Jazyk symbolických adres: Porovnání verzí

Smazaný obsah Přidaný obsah
McFly (diskuse | příspěvky)
přidán ext odkaz na učebnici assembleru x86
Řádek 43:
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„Ahoj světe!" ==
(Napsáno[[Hello world]] prov [[Netwide Assembler|NASM]]):
<source lang="asm">
<code>
[org 100h]<br />
[bits 16]<br />
jmp START
 
; Nastavit pozici kurzoru.<br />
; IN: dl = x, dh = y<br />
curto:<br />
xor bh,bh<br />
mov ah,2<br />
int 10h<br />
ret
 
; Napsat barevne znaky, ale neposouvat kurzor.<br />
; IN: al = char, bl = color, cx = count<br />
putchar:
xor bh,bh<br />
mov ah,9<br />
int 10h<br />
ret
 
; Napsat znak a posunout kurzor<br />
; IN: al = char<br />
wrchar:<br />
xor bh,bh<br />
mov ah,0Eh<br />
int 10h<br />
ret
 
; Cist klavesu s cekanim<br />
; OUT: al = [[ASCII]] code || 0, ah = scan code<br />
inkey:<br />
mov ah,0<br />
int 16h<br />
ret
 
; Napsat textovy retezec ukonceny binarni nulou.<br />
; IN: ds:si -> null_terminated_string<br />
writez:<br />
l_writez1:<br />
lodsb<br />
or al,al<br />
jz l_writez9<br />
xor bh,bh<br />
mov ah,0Eh<br />
int 10h<br />
jmp l_writez1<br />
l_writez9:<br />
ret
 
msg1: db "Ahoj svete!", 13,10, 0
 
START:<br />
push cs<br />
pop ds<br />
mov si,msg1<br />
call writez
 
END:<br />
mov ax,4C00h<br />
int 21h
</codesource>
 
== Překladače JSA ==
Existuje velké množství překladačů JSA, pro x86 například: