bits 64

section .bss
    buf resb 80

section .data
    len: dq 0
    idx: dq 0
    abc: dw "abc "
section .text
    global _start

_start:
    mov rax, 0
    mov rdi, 0
    mov rsi, buf
    mov rdx, 80
    syscall

    cmp rax, 0
    je exit

    mov QWORD [len], rax
    mov r10, 0 ; Index i - начало слова
main_loop:
    cmp r10, rax
    jge exit
    mov r9, 1 ; flag isEngWord
    mov r11, r10 ; Index j - конец слова
    mov r12, buf
    add r12, r10
    cmp BYTE [r12], ' '
    je skip_ws
    cmp BYTE [r12], 10
    je skip_ws
    jmp word_loop
skip_ws:
    inc r10
    jmp main_loop
word_loop:
    cmp r11, rax
    jge action_word
    mov r12, buf
    add r12, r11
    cmp BYTE [r12], ' '
    je action_word
    cmp BYTE [r12], 10
    je action_word
    cmp r9, 0
    je next_symbol

    cmp BYTE [r12], 'A'
    jl not_eng_symbol
    cmp BYTE [r12], 'Z'
    jle next_symbol
    cmp BYTE [r12], 'a'
    jl not_eng_symbol
    cmp BYTE [r12], 'z'
    jle next_symbol
not_eng_symbol:
    mov r9, 0
next_symbol:
    inc r11
    jmp word_loop
action_word:
    cmp r9, 0
    je next_word

    mov [idx], r11

    mov r8, buf
    add r8, r10
    sub r11, r10

    mov rax, 1
    mov rdi, 1
    mov rsi, r8
    mov rdx, r11
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, abc
    mov rdx, 4
    syscall


    mov r10, [idx]
    mov rax, [len]
    jmp main_loop
next_word:
    mov r10, r11
    mov rax, [len]
    jmp main_loop

exit:
    xor rdi, rdi
    mov rax, 60
    syscall