Sie sind auf Seite 1von 2

Themengebiet: Seite: Copyright:

x86-Assembler Referenz (Version 1) 1 Johannes Bauer (www.johannes-bauer.com)

x86-Assembler Referenz
Befehl Bedeutung

Eine kleine bersicht ber die gebruchlichsten Assembler-Befehle:


Pseodocode Beispiel

movl von, nach pushl wert popl register cmp b, a jmp ziel je ziel jne ziel jl ziel jg ziel jle ziel jge ziel ja ziel jb ziel jae ziel jbe ziel incl register decl register addl was, zu subl was, von mull wert imull wert divl wert idivl wert andl was, zu orl was, zu xorl was, zu notl was shll um, was shrl um, was sall um, was sarl um, was roll um, was rorl um, was rcll um, was rcrl um, was

Schiebt den Wert von nach nach Schiebt den Wert wert auf den Stack Schreibt den letzten Wert des Stacks nach register Vergleicht b mit a, speichert das Resultat in den Prozessorags Springe nach ziel Springe nach ziel, wenn a = b Springe nach ziel, wenn a != b Springe nach ziel, wenn a < b (Signiert) Springe nach ziel, wenn a > b (Signiert) Springe nach ziel, wenn a <= b (Signiert) Springe nach ziel, wenn a >= b (Signiert) Springe nach ziel, wenn a > b (Unsigniert) Springe nach ziel, wenn a < b (Unsigniert) Springe nach ziel, wenn a >= b (Unsigniert) Springe nach ziel, wenn a <= b (Unsigniert) Inkrementiert Regsiter register Dekrementiert Regsiter register Addiert den Wert was zu zu Subtrahiert den Wert was von von Multipliziert wert mit %eax (Unsigniert) Resultat nach %edx:%eax (Highbyte, Lowbyte) Multipliziert wert mit %eax (Signiert) Resultat nach %edx:%eax (Highbyte, Lowbyte) Dividiert %eax durch wert (Unsigniert) Resultat nach %eax, Rest nach %edx Dividiert %eax durch wert (Signiert) Resultat nach %eax, Rest nach %edx Bitweises UND von was zu zu Bitweises ODER von was zu zu Bitweises exklusives ODER von was zu zu Bitweises NICHT von was Bitweises Shift-Left von was um um Bits Bitweises Shift-Right von was um um Bits Arithmetischer Shift-Left von was um um Bits Arithmetischer Shift-Right von was um um Bits Rotiere links von was um um Bits Rotiere rechts von was um um Bits Rotiere links von was um um Bits mit Carry Rotiere rechts von was um um Bits mit Carry

eax = ebx; eax = 4; esp--; *(esp) = wert; register = *esp; esp++;

movl %ebx, %eax movl $4, %eax pushl %ebx popl %ebx cmp $5, %eax

goto ziel; if (a==b) goto ziel; if (a!=b) goto ziel; if (a<b) goto ziel; if (a>b) goto ziel; if (a<=b) goto ziel; if (a>=b) goto ziel; if (a>b) goto ziel; if (a<b) goto ziel; if (a>=b) goto ziel; if (a<=b) goto ziel; eax++; eax--; eax += ebx; eax -= ebx; edx = (ebx*eax)>>32; eax = (ebx*eax); edx = (ebx*eax)>>32; eax = (ebx*eax); edx = (eax%ebx); eax = (eax/ebx); edx = (eax%ebx); eax = (eax/ebx); eax &= ebx; eax |= ebx; eax ^= ebx; eax = ~eax; eax <<= 5; eax >>= 5;

jmp ende je gleich jne ungleich jl kleiner jg groesser jle kleinergl jge groessergl ja groesser jb kleiner jae groessergl jbe kleinergl incl %eax decl %eax addl %ebx, %eax subl %ebx, %eax mull %ebx imull %ebx divl %ebx idivl %ebx andl %ebx, %eax orl %ebx, %eax xorl %ebx, %eax notl %eax shll $5, %eax shrl $5, %eax sall $5, %eax sarl $5, %eax roll $5, %eax rorl $5, %eax rcll $5, %eax rcrl $5, %eax

Themengebiet: Seite: Copyright:

x86-Assembler Referenz (Version 1) 2 Johannes Bauer (www.johannes-bauer.com)

So sieht normalerweise ein Funktionsaufruf aus:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Unterprogramm : pushl %ebp movl %esp , %ebp // // // //

/ / Basepointer sichern / / Stackframe erzeugen

J e t z t l i e g e n d i e Parameter an f o l g e n d en Adressen : Parameter1 = 8(%ebp ) Parameter2 = 12(%ebp ) Parameter3 = 16(%ebp )

/ / Programmverlauf // ... leave ret / / S t a c k p o i n t e r z u r c k s e t z e n ( movl %ebp, % esp ) / / Zurckkehren

main : / / ...Hauptprogramm... pushl Parameter3 pushl Parameter2 pushl Parameter1 c a l l Unterprogramm / / ...Und w e i t e r . . . ret

Und so eine for-Schleife, die von 7 bis 13 (beides einschlielich!) zhlt:


1 2 3 4 5 6 7 8 9 10 11

movl $7 , % ecx for_begin : cmp $13 , % ecx jg for_end / / Code h i e r i n c l %ecx jmp f o r _ b e g i n for_end :

/ / Counter i n i t i a l i s i e r e n

/ / Counter zu gro? // > Dann f o r S c h l e i f e beenden

/ / Counter erhhen