Bc. Vojtěch Hordějčuk

„Dejte mi pevný bod a já pohnu Zemí.” - Archimedes

Domů » Wiki » Programovací jazyky » Jazyky symbolických instrukcí

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 r1,0x16
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.0001.00010000
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:

00100001000100000010001000010011010000010000001001010001000000000011000100010001

zdrojový kód (TEXT) - zobrazit (80 znaků)

Reference

  • Alan Clemens: The Principles of Computer Hardware, Second Edition