global _start

section .data
buff times 32 db 0
count dq 0
even db "Even"
evenCount dq $-even
odd db "Odd"
oddCount dq $-odd

section .text
default rel

_start:
    call read_text
    
    lea rsi, [buff]
    add rsi, qword [count]
    sub rsi, 2
    mov rax, [rsi]

    test rax, 0x1
    jnz .even
.odd:
    lea rsi, [even]
    mov rdx, [evenCount]
    jmp .write
.even:
    lea rsi, [odd]
    mov rdx, [oddCount]

.write:
    call write_text

    mov rax, 60
    mov rdi, 0
    syscall

; Функция читает текст в буффер
; Регистры не изменяет
read_text:
    push rax
    push rdi
    push rsi
    push rdx

    mov rax, 0          ; sys_read
    mov rdi, 0          ; stdin
    lea rsi, [rel buff]       ; адрес буфера
    mov rdx, 256        ; количество байт
    syscall
    mov [count], rax

    pop rdx
    pop rsi
    pop rdi
    pop rax
    ret

; Функция выводит buff
; In:
;   - RSI - начало буфера
;   - RDX - размер буфера
; Регистры не изменяет
write_text:
    push rax
    push rdi
    push rsi
    push rdx

    mov rax, 1          ; sys_write
    mov rdi, 1          ; stdout
    syscall
    mov [count], rax

    pop rdx
    pop rsi
    pop rdi
    pop rax
    ret