.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: