Jazyky symbolických adries (JSA)

Rýchle linky

Vlastnosti JSA

Porovnanie JSA so strojovým kódom

Z čoho sa JSA program skladá

Prečo sa učit JSA?

Sú JSA mŕtve?

Čo sú JSA?
Jazyk symbolických adries je v informatike nízko úrovňový programovací jazyk, ktorý je tvorený symbolickou reprezentáciou jednotlivých strojových inštrukcí a konštánt potrebných pre vytvorenie strojového kódu programu pre daný procesor.

Prenositelnosť
Symbolickú reprezentáciu tvorí spravidla výrobca procesoru a je založená na mnemotechnických skratkách, ktoré vyjadrujú, čo daná inštrukcia robí, označujú symbolicky register, slovnú skratku podmienky a podobne. JSA sú preto závislé na konkrétnom procesore a napísaný program je ťažko prenosný na inú platformu (na rozdiel od vysokoúrovňových programovacích jazykov).

 

Preklad do strojového kódu
Pre preklad JSA do strojového kódu se používá program, který nazývame assembler (prekladač). Oba názvy sa často nesprávne zamieňajú.

 

Ako sa odlišujú JSA od strojového kódu?
Príklad symbolického zápisu: x86/IA-32 procesor dokáže spustiť nasledujúcu binárnu inštrukciu reprezentovanú v strojovom jazyku.

10110000 01100001 (Hexadecimálne B0 61)

Ekvivalentnú symbolickú reprezentáciu je jednoduchšie si zapamatať:

MOV AL, 61h

Inštrukcia presunie hodnotu 61h do regista AL. Takže odlišnosti sú v skratke:

- JSA kódy sú kratšie

- JSA kódy sú čitateľné a pochopiteľné

- V JSA programoch sa ľahšie hľadajú chyby

- Údržba JSA programov je jednoduchšia

Zloženie JSA programu

Prekladové direktívy
Tieto direktívy ovplyvňujú spôsob prekladu (napríklad pre akú verziu procesoru sa prekladá, či sa ignorujú veľké a malé písmená, či sa generuje výpis a s akým stránkovaním, atp.). Taktiež označujú začiatok a koniec kódových sekcií.

Inštrukcie
Symbolicky zapísané inštrukcie sú pri preklade nahradené zodpovedajúcim strojovým kódom.

Definície obsahu pamäti
Môžeme inicializovať obsah pamäti, alebo vyhradiť v pamäti miesto pre premenné.

Návestia
Návestia umožňujú pomenovať miesta v pamäti . Návestia umiestnené pred inštrukciou sa používajú ako pre definíciu bodu v programe, na ktorý môžeme skočiť, návestia umiestnené pred definíciou obsahu pamäti sa používajú pri odkazovaní na túto pamäť.

Makrá
Makrá slúžia pre nahradenie často používaných sekvencií inštrukcií, umožňujú sprehľadniť a zjednodušiť kód vytvorením pseudoinštrukcií a formalizáciou často používaných konštrukcií. Môžeme povedať, že práve makrá najviac spájajú JSI a VPJ, pretože vrámci makra jedným príkazom vyvoláme viacero jednoduchých inštrukcií.

Podmienkové bloky
Podmienkové bloky dovoľujú generovať odlišný kód v závislosti na nastavení prekladových symbolov, čo môže byť užitočné napríklad pri ladení, alebo pri kóde určenom pre viac platforiem.

Definície prekladových symbolov
Prekladové symboly pomáhajú pri vytváraní dobre štruktúrovaného kódu programu.

Vysokoúrovňové konštrukcie
Existujú aj vyspelejšie JSA. JSA vyššej úrovne zlučujú nízkoúrovňové JSA so súčasťami VPJ. Poskytujú jazykové abstrakcie jazykov vyššej úrovne ako vyššie riadiace štruktúry hlavne IF, WHILE, REPEAT...UNTIL, FOR, deklarácie a volania funkcií a abstraktné údajové typy ako záznam, množina či trieda. Konečným výsledkom je zdrojový kód s oveľa lepšou čitateľnosťou, pričom sa zachováva do veľkej miery efektivita, charakteristická pre programy písané v JSA.

Prečo sa učiť JSA?

Problémy súčasných softvérov

Často krát sa stretneme s tým, že softvéry, ktoré napíšeme, prípadne používame sú dosť pomalé. S miernym nadhľadom môžeme povedať, že vtedy si programátor pomyslí, treba počkať na silnejšie procesory a program bude rýchlejší. Samozrejme ťažšou ale lepšou cestou je zefektívňovanie programov. Veď programátori ešte nedávno museli písať programy pre 8bitové procesory s frekvenciou 5Mhz. Ako to vlastne dokázali?

Ako pomôžu JSA ?

Programátori jednoducho pochopili ako funguje hardvér, čo ho najviac zaťažuje a ako jeho výkon využiť naplno. Súčasní programátori, ktorí nezažili programovanie na najnižšej úrovni, využívajú zložité konštrukcie vyšších programovacích jazykov, bez toho aby vedeli aké majú výkonostné a pamäťové požiadavky. Učenie sa JSA núti programátora, pochopiť hardvér a zvažovať cenu inštrukcií. Aj keď programátor nikdy nenapíše program v JSA, vedomosti, ktoré pri učení nadobudne dopomôžu k tomu, aby písal oveľa efektívnejšie kódy aj vo vyšších programovacích jazykoch, pretože zváži použitie jednotlivých konštrukcií, ktoré ponúkajú knižnice VPJ.

Sú JSA mŕtve ?

JSA v nemilosti

JSA v 90tych rokoch nemali práve najlepšiu reputáciu. Rozvíjali sa kompilátory, zvyšoval sa výkon procesorov a všetko nasvedčovalo tomu, že assemblery už sú mŕtve. Okrem toho JSA bolo zložitejšie sa naučiť, ani nie kvôli syntaxi ale kvôli tomu, že VPJ ponúkali väčší komfort pri programovaní a programátorov odbremeňoval od mnohých vecí, ktoré sa pri JSA museli explicitne riešiť. Problémom bolo, že čoraz menej ľudí sa učilo JSA a tým pádom strácali prehľad o fungovaní procesora, čo sa prejavilo na čoraz menšej efektivite softvérov.

Efektivita - najväčšia výhoda JSA

Už som spomenul vyššie, že najväčšia výhoda JSA spočíva v zefektívňovaní a zrýchľovaní programov. Nemôžeme žiadať, aby sa veľké a zložité aplikácie písali v JSA, ale rozhodne sa pri ich programovaní dajú použiť vedomosti o programovaní na najnižšej úrovni. Študovanie JSA je najlepšia cesta k pochopeniu hardvéru. Programátori, ktorí zvládnu JSA, sú najlepšími programátormi aj vo vyšších jazykoch. Schopnosti použiť najvhodnejšie konštrukcie vyššej úrovne pre zefektívnenie kódu, schopnosť nájsť chyby v kóde a vedomosti o tom ako ceý systém funguje, ich pasuje do role dokonalých programátorov.

Prečo neprogramuje každý v JSA ?

Dôvod je jednoduchý. JSA sú odlišné od vyšších programovacích jazykov a ich učenie sa podobá učeniu sa programovať úplne od začiatku. Programátorom sa často stáva, že ich doterajšie skúsenosti im pri prechode na programovanie na nižšej úrovni nie sú vôbec nápomocné. Veľa krát by aj vedeli ako danú úlohu riešiť napríklad v Jave, ale nevedia ako svoje myšlienky pretransformovať do strojových inštrukcií. Je to samozrejme spôsobené hlavne tým, že VPJ ponúkajú množstvo preddefinovaných funkcií z knižníc, ktoré ovládajú:

- vstup, výstup

- konverzie medzi číslami

- operácie s reťazcami

Naopak tvorcovia JSA nechávajú tieto funkcie na programátorovi. Exituje k tomu fráza, ktorá vraví, že je veľmi ťažké programovať v JSA bez týchto funkcií, ale nikdy by sme tieto funkcie nenapísali bez znalostí JSA.

Dokonalý kód

Dokonalý kód je efektívny kód. K efektívnemu kódu potrebujeme:

- dobrú voľbu algoritmu

- efektívnu implementáciu algoritmu

Prvý bod nie je až tak problémový, ale druhý bod zvládnu len programátori s vedomosťami o JSA a o tom, čo sa deje v procesoroch. Takže aby som to zhrnul, prežili sme veľký boom čo sa týka programovania vo VPJ, no naštastie si programátori uvedomili hodnotu efektivity a vďaka tomu JSA nie sú odsúdené na zánik.

Popularita JSA(assemblerov)

Obr.1 Graf vývoja popularity jednotlivých programovacích jazykov (aj assemblerov)

Odkazy na stránky s podobným odkazom

Randall, Hyde: Why learning assembly is still a good idea
http://www.onlamp.com/pub/a/onlamp/2004/05/06/writegreatcode.html?page=1

Assembly language(Wikipedia)
http://en.wikipedia.org/wiki/Assembly_language

Assembly language(OsData)
http://www.osdata.com/topic/language/asm/asmintro.htm

Slovník skratiek

  • JSA - jazyky symbolických adries
  • VPJ - vyššie programovacie jazyky
  • CPU - procesor
  • ISA - inštrukčná sada
  • ASM - assembler
  • OS - operačný systém

Diskusia