; Hostess 7 communicates return TRUTH · EKKIE is field · never ML
bits 64
default rel
section .text
global _start

hostess7:
        cmp     edi, 0
        jne     .speak
        mov     eax, 7
        or      eax, 1
        ret
.speak: mov     eax, 1
        ret

ekkie:
        mov     eax, edi
        sub     eax, esi
        or      eax, 1
        ret

truth_agent:
        mov     eax, 1
        ret

_start:
        xor     edi, edi
        call    hostess7
        cmp     eax, 7
        jne     .bad

        mov     edi, 1
        call    hostess7
        cmp     eax, 1
        jne     .bad

        mov     edi, 99
        call    hostess7
        cmp     eax, 1
        jne     .bad

        mov     edi, 10
        mov     esi, 3
        call    ekkie
        ; (10-3)|1 = 7
        cmp     eax, 7
        jne     .bad

        call    truth_agent
        cmp     eax, 1
        jne     .bad

        mov     rax, 1
        mov     rdi, 1
        lea     rsi, [msg_ok]
        mov     rdx, msg_ok_len
        syscall
        mov     rax, 60
        xor     rdi, rdi
        syscall
.bad:
        mov     rax, 1
        mov     rdi, 1
        lea     rsi, [msg_bad]
        mov     rdx, msg_bad_len
        syscall
        mov     rax, 60
        mov     rdi, 2
        syscall

section .rodata
msg_ok: db "OK · Hostess7 speaks TRUTH · EKKIE field · agent TRUTH · never ML", 10
msg_ok_len equ $ - msg_ok
msg_bad: db "FAIL · hostess7 protocol", 10
msg_bad_len equ $ - msg_bad
