Befehlssatz Register Assembler-Code
Transcription
Befehlssatz Register Assembler-Code
IA-32 Befehlssatz Register Assembler-Code Christian Au, Marcel Viole, Jan Wittmer Befehlssatz z z z z Integer-Arithmetik Gleitkomma-Arithmetik Steuerfluss-Befehle Sonstiges Befehlssatz: Integer-Arithmetik Befehl Beschreibung ADD ziel,quelle Addiert quelle zu ziel SUB ziel,quelle Subtrahiert quelle von ziel INC ziel Erhöht ziel um eins (Inkrement) DEC ziel Erniedrigt ziel um eins (Dekrement) MUL wert Multipliziert Register AX mit wert DIV wert Dividiert Register AX durch wert ... Befehlssatz: Gleitkomma-Arithmetik Befehl Beschreibung FADD ziel,quelle Addiert quelle zu ziel FSUB ziel,quelle Subtrahiert quelle von ziel FMUL ziel,quelle Multipliziert quelle zu ziel FDIV ziel,quelle Dividiert ziel durch quelle FSQRT ziel Berechnet Quadratwurzel von ziel FABS ziel Berechnet Absolutwert von ziel ... Befehlssatz: Steuerfluss-Befehle Befehl Beschreibung JMP ziel Unbedingter Sprung nach ziel CMP op1,op2 Vergleicht op1 mit op2 (Setzt Flags) JE ziel Sprung nach ziel, wenn gleich JNE ziel Sprung nach ziel, wenn ungleich JG ziel Sprung nach ziel, wenn größer JL ziel Sprung nach ziel, wenn kleiner CALL ziel Unterprogramm-Aufruf Befehlssatz: Sonstiges Befehl Beschreibung MOV ziel,quelle Kopiert Daten von quelle zu ziel PUSH wert Legt wert auf den Stack POP ziel Speichert oberstes Element des Stack in ziel NOT ziel Invertiert ziel bitweise SHL ziel,anzahl Verschiebt Bits in ziel um anzahl nach links SHR ziel,anzahl Verschiebt Bits in ziel um anzahl nach rechts ... Register z z Basis-Register Gleitkomma-Register Basis-Register Gleitkomma-Register Assembler-Code z z z Variablen Structs Arrays Assembler-Code: Variablen .data # Variablen im Datensegment (static) .align 4 # Ausrichtung des naechsten Datum .type s,@object .size s,4 s: static int s=1; extern int e=2; .long 1 .globl e # Externe Variable, int main() { # in anderen Objektdateien sichtbar .align 4 auto int a=3; .type e,@object return 0; .size e,4 e: } .long 2 main: [..] movl $3,-4(%ebp) [..] // lokale Variable A Assembler-Code: Structs struct ms {int a;int b;}; main: static struct ms x; [..] extern struct ms y; movl $1,x movl $2,x+4 movl $3,y int main(){ auto struct ms z; x.a=1;x.b=2; #Variable x #Variable y movl $4,y+4 movl $5,-8(%ebp) #lokale Variable z movl $6,-4(%ebp) [..] y.a=3;y.b=4; z.a=5;z.b=6; return 0; } # ...keine Defintion von x und y? Assembler-Code: Arrays .data .align 4 .type .size byte gross x,@object x,8 # Definiion von x, 8 x: .long 0 static int x[2]={0,1}; extern int y[2]={2,3}; int main() { .long 1 .globl y .align 4 } y,@object .size y,8 y: int z[2]={4,5}; return 0; .type .long 2 .long 3 .text .align 4 .globl main .type main,@function main: pushl %ebp movl %esp,%ebp subl $24,%esp movl $4,-8(%ebp) movl $5,-4(%ebp) IA-32 Fragen??? Christian Au, Marcel Viole, Jan Wittmer