## on calcule avec la pile .text .globl main main: pushq $4 # 4 + 6 pushq $6 popq %rdi popq %rbx add %rbx, %rdi call print_int pushq $21 # 21 * 2 pushq $2 popq %rdi popq %rbx imul %rbx, %rdi call print_int pushq $4 # 4 + 7 / 2 pushq $7 pushq $2 popq %rbx mov $0, %rdx popq %rax idivq %rbx # divise %rdx::%rax par %rbx pushq %rax # le quotient dans est %rax popq %rbx popq %rdi add %rbx, %rdi call print_int pushq $3 # 3 - 6 * (10 / 5) pushq $6 pushq $10 pushq $5 popq %rbx mov $0, %rdx popq %rax idivq %rbx # divise %rdx::%rax par %rbx dans %rax pushq %rax popq %rbx popq %rax imul %rbx, %rax pushq %rax popq %rbx popq %rdi sub %rbx, %rdi call print_int 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 arith1-v2.s && ./a.out" ## End: