Jazyk symbolických adres

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Jazyk symbolických adres (zkratka JSA, slangově assembler) nebo také jazyk symbolických instrukcí je v informatice nízkoúrovňový programovací jazyk, jehož základem jsou symbolické reprezentace jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro určitý procesor. Nejedná se tedy o jeden konkrétní jazyk, ale spíše o druh jazyka. Symbolickou reprezentaci tvoří zpravidla výrobce procesoru a je založena na mnemotechnických zkratkách, které vyjadřují, co daná strojová instrukce dělá, označují symbolicky registr, slovní zkratku podmínky a podobně. JSA je proto závislý na konkrétním procesoru a zapsaný program je obtížně přenositelný na jinou platformu (na rozdíl od vyšších programovacích jazyků).

Pro překlad z JSA do strojového kódu se používá program, který nazýváme assembler (překladač). V programátorském slangu se název assembler používá i pro JSA.

Historie

JSA se poprvé objevily v 50. letech 20. +more století, kdy byly označovány jako druhá generace programovacích jazyků. Eliminovaly většinu chyb vznikajících při programování a časovou náročnost první generace programovacích jazyků tím, že odstranily nutnost pamatovat si číselné kódy jednotlivých strojových instrukcí, nutnost vypočítávat adresy skoků a umístění dat a zjednodušením (zkrácením) zápisu programu. Ve své době byly široce využívány pro všechny typy programování. Avšak v 80. letech (u mikropočítačů v 90. letech) byly nahrazeny programovacími jazyky s vyšší úrovní abstrakce, které přinášely vyšší produktivitu programování.

V současné době jsou JSA používány zejména pro přímé ovládání hardware, přístup ke specializovaným instrukcím procesoru nebo pro kritické úseky, kde je nutný vysoký výkon. Typicky se jedná o ovladače zařízení, nízkoúrovňové embedded systémy a operační systémy.

Pokročilé překladače JSA poskytují doplňující nástroje pro správu a vývoj kódu, řízení překladu programu, a podporu ladění. Mezi hlavní prvky patří také podpora maker, pak nazýváme takový překladač makro assembler.

Terminologie

Anglické slovo assembler znamená sestavovatel a označuje pouze překladač, tj. program, který sestavuje strojový kód. +more Programovací jazyk zpracovávaný takovým překladačem se označuje JSA, v angličtině se jmenuje assembly language.

Exaktní česká terminologie vychází z toho, že assembler označuje pouze překladač, zatímco programovací jazyk označuje výhradně jako jazyk symbolických adres (JSA), kterýžto výraz popisuje základní nabízenou výhodu - odstranění nutnosti ručně propočítávat veškeré adresy při překladu programu.

V praxi se ovšem velmi často pro označení JSA používá termín assembler (původem z anglického jazyka).

Charakteristika

JSA je programovací jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. Každá rodina procesorů má svůj vlastní odlišný JSA, protože ve strojových instrukcích různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. +more Každá firma vyrábějící procesory si definuje vlastní pravidla pro JSA svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.

Společným rysem drtivé většiny JSA je, že kódovou jednotkou je zde jeden řádek.

Program v JSA se skládá z překladových direktiv: tyto direktivy ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp. ). +more Rovněž označují začátek a konec kódových sekcí. strojových instrukcí: symbolicky zapsané strojové instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem definic obsahu paměti: můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné návěstí: návěstí umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť maker: makra slouží pro nahrazení často používaných sekvencí instrukcí, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí podmínkových bloků: podmínkové bloky dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem definic překladových symbolů: překladové symboly pomáhají při vytváření dobře strukturovaného kódu programu.

Příkladem jednoho řádku (tedy jednoho příkazu) v JSA může být následující zápis instrukce procesoru x86/i386 (např. Intel 80386):

Do akumulátoru (l=low: dolní část) načti konstantu 61 v hexadecimální soustavě mov al, 61h

která se přeloží na strojový kód (kde první část kódu je vlastní instrukce mov al a druhá část konstanta 61h):

10110000 01100001

který znamená přesun hexadecimální hodnoty 61 (97 dekadicky) do registru procesoru pojmenovaného „al“. Název instrukce „mov“ (zkratka anglického slova move - přesun) je následován seznamem parametrů. +more Tak vypadá typická instrukce v JSA.

Assembler zpravidla překládá zdrojový kód na několik průchodů. To je dané tím, že při prvním průchodu nejsou známé adresy a hodnoty definované za překládaným řádkem, ovšem i při dalších průchodech se mohou adresy posunout, protože délka strojové instrukce může záviset na hodnotách adres a konstant, které byly v prvním průchodu neznámé, přičemž změnou původně předpokládané délky instrukce se mohou adresy opět posunout…

Program „Ahoj světe!“

Hello world v MASM pro Windows:

model flat, stdcall option casemap :none include windows. +moreinc include kernel32. inc . data message db "Ahoj svete. ",13,10 . code main proc invoke GetStdHandle, STD_OUTPUT_HANDLE invoke WriteConsoleA, eax, addr message, sizeof message, 0, 0 ret main endp end main.

Hello world v NASM pro DOS:

[org 100h] [bits 16] jmp START

Nastavit pozici kurzoru IN: dl = x, dh = y curto: xor bh,bh mov ah,2 int 10h ret

Napsat barevne znaky, ale neposouvat kurzor IN: al = char, bl = color, cx = count putchar: xor bh,bh mov ah,9 int 10h ret

Napsat znak a posunout kurzor IN: al = char wrchar: xor bh,bh mov ah,0Eh int 10h ret

Cist klavesu s cekanim OUT: al = ASCII code || 0, ah = scan code inkey: mov ah,0 int 16h ret

Napsat textovy retezec ukonceny binarni nulou IN: ds:si -> null_terminated_string writez: l_writez1: lodsb or al,al jz l_writez9 xor bh,bh mov ah,0Eh int 10h jmp l_writez1 l_writez9: ret

msg1: db "Ahoj svete!", 13,10, 0

START: push cs pop ds mov si,msg1 call writez

END: mov ax,4C00h int 21h

Překladače JSA

Existuje velké množství překladačů JSA, pro x86 například:

* Flat Assembler (FASM) - open source assembler pro procesory x86, sebekompilující * Netwide Assembler (NASM) - open source assembler pro procesory x86, sám napsaný v jazyku C * GNU Assembler (gas) - součást projektu GNU; je multiplatformní, používá se především pro kód vložený v programech v jazyce C * Microsoft Macro Assembler (MASM) - překladač od firmy Microsoft * Turbo Assembler (TASM) - překladač firmy Borland

pro jiné architektury: * AX166 - překladač firmy Amit pro procesory vycházející z 80C166

Externí odkazy

[url=https://web. archive. +moreorg/web/20160909000435/http://zxm. speccy. cz/files/down/Bitydobytu. pdf]Bity do bytu[/url] - krásná učebnice assembleru procesoru Z80 od spisovatele, novináře, popularizátora počítačů Ladislava Zajíčka * [url=http://www. epstudio. cz/~papousek/]Učebnice assembleru x86[/url] * [url=https://web. archive. org/web/20140404022922/http://strojak. cz/]Naučte se assembler 8080, Z80, 6502[/url] - učebnice assembleru osmibitových procesorů.

Kategorie:Programovací jazyky

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top