.text
.globl main
main:
sub $16, %rsp # on alloue deux mots sur la pile
movq $3, 8(%rsp) # x alloué en sp + 8
mov 8(%rsp), %rdi
imul 8(%rsp), %rdi
call print_int
movq $3, 8(%rsp) # x alloué en sp+8
mov 8(%rsp), %rax
add %rax, %rax
mov %rax, (%rsp) # y alloué en sp
imul 8(%rsp), %rax # x * y dans %rax
mov %rax, %rdi # et sauvé dans %rdi
mov 8(%rsp), %rax
add $3, %rax
mov %rax, (%rsp) # z également alloué en sp
mov $0, %rdx
mov (%rsp), %rax
idivq %rax # divise %rdx::%rax par %rax dans %rax
add %rax, %rdi
call print_int
add $16, %rsp
mov $0, %rax # on termine proprement
ret
## une routine pour afficher un entier (%rdi) avec printf
print_int:
mov %rdi, %rsi
mov $message, %rdi # arguments pour printf
mov $0, %rax
call printf
ret
.data
message:
.string "%d\n"
## Local Variables:
## compile-command: "gcc local.s && ./a.out"
## End: