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