Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Vlákno názorů k článku
Programujeme v jazyce Assembler v Linuxu: Trochu praxe

aLop
aLop (neregistrovaný)
8. 7. 2004 14:31

syntax

Ten příspěvek kousek nademnou používá takový zvláštní zápis "movl %xxx, kam" místo "mov kam, xxx". Co tam dělá to "l". Vím, že takový kod generuje třeba gcc ale nějak mi to vrtá hlavou.

michal_sjx
michal_sjx (neregistrovaný)
8. 7. 2004 15:51

Re: syntax

movl = mov long = move 32bits

alespon v tomto presvedceni ziji

Michal Ludvig
Michal Ludvig (neregistrovaný)
8. 7. 2004 18:58

Re: syntax

Kod toho prispevku byl napsan v AT&T syntaxi, ktera je na Unixech standard (na rozdil od syntaxe Intel pouzivane v NASM, ktera je importovana ze sveta DOSu).

Rozdilu je celkem hodne - nejvyraznejsi je zmena poradi operandu, pouzivani postfixu pro urceni velikosti operandu, pouzivani ruznych prefixu pred ruznymi typy operandu, adresovani pomoci offsetu, atd.

Napr. ulozeni hodnoty "1" do registru "EAX" je v
Inteli syntaxi:
mov eax, 1

V AT&T syntaxi:
movl $1, %eax

Postfixy jsou ruzne, napr:
8 bitu: movb $1,%al
16 bitu: movw $2,%ax
32 bitu: movl $3,%eax
64 bitu: movq $4,%rax

pokud je z operandu zrejme, jaka ma byt velikost (napr. je to registr), je mozne postfix vynechat.

Uz jste si asi vsimnul, ze konstanty maji prefix '$' zatimco registry '%'.

Rozdilu je samozrejme vic, ale tyhle jsou nejvic videt :-)

Zasílat nově přidané příspěvky e-mailem