Jazyky symbolických instrukcí
Jazyk symbolických instrukcí (někdy také assembler) je označení pro rodinu nízkoúrovňových programovacích jazyků, které vychází přímo z architektury souboru instrukcí (ISA – Information Set Architecture) dané platformy (např. procesoru). Konkrétních jazyků je velmi mnoho a je prakticky nemožné znát všechny. Existují však určité rysy, které jsou společné.
Jazyky symbolických instrukcí se již zřídkakdy používají k programování aplikací. Lze se s nimi však setkat při nízkoúrovňových optimalizacích, kdy lze pro zrychlení výpočtu využít speciální funkce dané platformy (např. procesoru). Tehdy se spíše než na přehlednost a přenositelnost programu hledí na hrubý výkon (3D engine, vědecké výpočty, real-time aplikace, miniaturní zařízení).
Symbolické instrukce jsou mnemotechnické zkratky pro instrukce platformy. Zkratky zpravidla vychází z anglických názvu instrukcí. Navíc jsou v jazyce k dispozici funkce, které ulehčují psaní delších a složitějších programů – například možnost zapisovat adresy skoků mnemotechnicky (label, goto).
Pro všechny jazyky symbolických instrukcí je společný jejich jednoduchý převod do strojového kódu.
Praktický příklad
Pro praktické znázornění problematiky bude představen velmi jednoduchý výukový procesor a jeho soubor instrukcí.
Instrukce ukázkového procesoru
Jedno instrukční slovo výukového procesoru je dlouhé 16 bitů. První čtyři bity jsou operační znak instrukce, další čtyři bity obsahují číslo registru a zbývajících 8 bitů obsahuje přímý operand. Všechna čísla jsou pro jednoduchost v přímém kódu bez znaménka.
Paměť obsahuje 32 buněk o velikosti 8 bitů adresovaných 5 bity. Adresa se předává jako přímý operand. Používá-li operace dva registry, je číslo druhého z nich předáno jako přímý operand.
| Operační znak (4) | Číslo registru (4) | Přímý operand (8) |
| Operační znak | Mnemotechnická zkratka | Význam |
|---|---|---|
| 0010 | LW rA,B | načti obsah paměťové buňky č.B do registru č.A |
| 0011 | SW B,rA | ulož obsah registru č.A do paměťové buňky č.B |
| 0100 | ADD rA,rB | sečti registr č.A s registrem č.B a výsledek ulož do registru č.A |
| 0101 | ASR rA | aritmetický posuv registru č.A vpravo |
Program pro výpočet aritmetického průměru
Ukázkový program načte operandy z paměťových buněk 0×16 a 0×19, vypočte jejich aritmetický průměr a výsledek uloží do paměťové buňky 0×17.
Pseudokód
- načti první operand z paměťové buňky 0×16 do registru R1
- načti druhý operand z paměťové buňky 0×19 do registru R2
- sečti registry R1 a R2 a výsledek ulož do registru R1
- vyděl registr R1 dvěma (aritmetický posuv vpravo)
- výsledek v registru R1 ulož do paměťové buňky 0×17
Jazyk symbolických instrukcí
Toto je program zapsaný v jazyce symbolických instrukcí:
LW r2,0x19
ADD r1,r2
ASR r1
SW 0x17,r1
zdrojový kód (TEXT) - zobrazit (49 znaků)
Strojový kód – přehledně
Toto je celý program ve strojovém kódu, zapsaný přehledně:
0010.0010.00010011
0100.0001.00000010
0101.0001.00000000
0011.0001.00010001
zdrojový kód (TEXT) - zobrazit (94 znaků)
Strojový kód – výstup
Toto je celý program ve strojovém kódu, jak by byl uložený v paměti:
zdrojový kód (TEXT) - zobrazit (80 znaků)
Reference
- Alan Clemens: The Principles of Computer Hardware, Second Edition
- +Software
- +Programovací jazyky
- Jazyky symbolických instrukcí