.text .globl main main: ## true && false mov $1, %rdi test %rdi, %rdi jz .T0 # l'opérateur && est paresseux mov $0, %rdi .T0: call print_bool ## if 3 <> 4 then 10 * 2 else 14 mov $3, %rdi cmp $4, %rdi je .T1false mov $10, %rdi imul $2, %rdi jmp .T1 .T1false: mov $14, %rdi .T1: call print_int ## 2 = 3 || 4 <= 2*3 mov $2, %rdi cmp $3, %rdi sete %dil movzbq %dil, %rdi # movzbq = mov with zero extension test %rdi, %rdi jnz .T2 # l'opérateur || est paresseux mov $4, %rbx mov $2, %rcx imul $3, %rcx cmp %rcx, %rbx # attention au sens ! setle %bl movzbq %bl, %rdi .T2: call print_bool 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 ## une routine pour afficher un booléen (%rdi) avec printf print_bool: cmp $0, %rdi je .Lfalse mov $true, %rdi jmp .Lprint .Lfalse: mov $false, %rdi .Lprint: mov $0, %rax call printf ret .data message: .string "%d\n" true: .string "true\n" false: .string "false\n" ## Local Variables: ## compile-command: "gcc -no-pie bool.s && ./a.out" ## End: