FIXME. add suffixes to instructions
FIXME. write descriptions for the following instructions:
cmp
-
j
\(\text{X}\) jmp
-
set
\(\text{X}\) test
-
cmov
\(\text{X}\) - introduce labels
- flags register
Jumps
jump.c
void f(int x) {
if (x == 2) {
puts("it's two");
}
else {
puts("not two");
}
}
\(\leftrightarrow\)
jump.s
f:
cmp $2, %edi
jne else
mov $.str1, %edi
xor %eax, %eax
jmp puts
else:
mov $.str2, %edi
xor %eax, %eax
jmp puts
set
set.c
int g(int x) {
if (x == 2) {
return 1;
}
else {
return 0;
}
}
\(\leftrightarrow\)
set.s
g:
xor %eax, %eax
cmp $2, %edi
sete %al
retq
test
test.c
int h(int x) {
if (x == 0) {
return 1;
}
return 0;
}
\(\leftrightarrow\)
test.s
h:
xor %eax, %eax
test %edi, %edi
sete %al
retq
Conditional Moves
conditional-move.c
int i(int x) {
if (x == 2) {
return -2;
}
else {
return x;
}
}
\(\leftrightarrow\)
conditional-move.s
i:
cmp $2, %edi
mov $-2, %eax
cmovne %edi, %eax
retq