Jazyk symbolických adres (zkratka JSA, anglicky assembly language) je v informatice nízkoúrovňový programovací jazyk, který je tvořen symbolickou reprezentací jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro daný procesor. Symbolickou reprezentaci tvoří zpravidla výrobce procesoru a je založena na mnemotechnických zkratkách, které vyjadřují co daná 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 vysokoúrovňových programovacích jazyků).
Pro překlad JSA do strojového kódu se používá program, který nazýváme assembler (překladač). Oba názvy jsou často nesprávně zaměňovány.
Obsah |
JSA se poprvé objevily v 50. letech 20. 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 reálného času.
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.
Anglické slovo assembler znamená sestavovatel a označuje pouze překladač, tj. program, který sestavuje strojový kód. 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 (a zcela nesprávně) pro označení JSA používá termín assembler.
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. 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ří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):
mov al, 61h
Která se přeloží na strojový kód:
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ů. 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 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 …
(Napsáno pro NASM)
[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
Existuje velké množství překladačů JSA, pro x86 například:
pro jiné architektury:
| Programovací jazyky | |||
|
ABAP | Ada | AppleScript | AWK | C | C++ | C# | COBOL | ColdFusion | Clean | D | Eiffel | Erlang | Flex | Fortran | JADE | Java | JavaScript | JSA | Lisp | Lua | Oberon | Object Pascal | Objective-C | Pascal | Pawn | Perl | PHP | Python | REALbasic | REBOL | RPG | Ruby | SQL / PL/SQL | Tcl / Tcl/Tk | Visual Basic / VBScript | VB.NET | Visual FoxPro
|
"Si l'homme russe construit les routes, la femme russe trace les chemins."
"Lorsque les femmes russes ne vivront pas seulement à travers leur mari, les hommes russes n'auront plus peur de l'amour ni de la force de la femme russe et n'auront plus besoin de la faiblesse de l'autre pour être sûrs de leur masculinité."