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
mov QWORD [len], rax
mov r10, 0 ; Index i - начало слова
main_loop:
cmp r10, rax
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
xor rdi, rdi
mov rax, 60
syscall
Yml0cyA2NAoKc2VjdGlvbiAuYnNzCiAgICBidWYgcmVzYiA4MAoKc2VjdGlvbiAuZGF0YQogICAgbGVuOiBkcSAwCiAgICBpZHg6IGRxIDAKICAgIGFiYzogZHcgImFiYyAiCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIG1vdiByYXgsIDAKICAgIG1vdiByZGksIDAKICAgIG1vdiByc2ksIGJ1ZgogICAgbW92IHJkeCwgODAKICAgIHN5c2NhbGwKCiAgICBjbXAgcmF4LCAwCiAgICBqZSBleGl0CgogICAgbW92IFFXT1JEIFtsZW5dLCByYXgKICAgIG1vdiByMTAsIDAgOyBJbmRleCBpIC0g0L3QsNGH0LDQu9C+INGB0LvQvtCy0LAKbWFpbl9sb29wOgogICAgY21wIHIxMCwgcmF4CiAgICBqZ2UgZXhpdAogICAgbW92IHI5LCAxIDsgZmxhZyBpc0VuZ1dvcmQKICAgIG1vdiByMTEsIHIxMCA7IEluZGV4IGogLSDQutC+0L3QtdGGINGB0LvQvtCy0LAKICAgIG1vdiByMTIsIGJ1ZgogICAgYWRkIHIxMiwgcjEwCiAgICBjbXAgQllURSBbcjEyXSwgJyAnCiAgICBqZSBza2lwX3dzCiAgICBjbXAgQllURSBbcjEyXSwgMTAKICAgIGplIHNraXBfd3MKICAgIGptcCB3b3JkX2xvb3AKc2tpcF93czoKICAgIGluYyByMTAKICAgIGptcCBtYWluX2xvb3AKd29yZF9sb29wOgogICAgY21wIHIxMSwgcmF4CiAgICBqZ2UgYWN0aW9uX3dvcmQKICAgIG1vdiByMTIsIGJ1ZgogICAgYWRkIHIxMiwgcjExCiAgICBjbXAgQllURSBbcjEyXSwgJyAnCiAgICBqZSBhY3Rpb25fd29yZAogICAgY21wIEJZVEUgW3IxMl0sIDEwCiAgICBqZSBhY3Rpb25fd29yZAogICAgY21wIHI5LCAwCiAgICBqZSBuZXh0X3N5bWJvbAoKICAgIGNtcCBCWVRFIFtyMTJdLCAnQScKICAgIGpsIG5vdF9lbmdfc3ltYm9sCiAgICBjbXAgQllURSBbcjEyXSwgJ1onCiAgICBqbGUgbmV4dF9zeW1ib2wKICAgIGNtcCBCWVRFIFtyMTJdLCAnYScKICAgIGpsIG5vdF9lbmdfc3ltYm9sCiAgICBjbXAgQllURSBbcjEyXSwgJ3onCiAgICBqbGUgbmV4dF9zeW1ib2wKbm90X2VuZ19zeW1ib2w6CiAgICBtb3YgcjksIDAKbmV4dF9zeW1ib2w6CiAgICBpbmMgcjExCiAgICBqbXAgd29yZF9sb29wCmFjdGlvbl93b3JkOgogICAgY21wIHI5LCAwCiAgICBqZSBuZXh0X3dvcmQKCiAgICBtb3YgW2lkeF0sIHIxMQoKICAgIG1vdiByOCwgYnVmCiAgICBhZGQgcjgsIHIxMAogICAgc3ViIHIxMSwgcjEwCgogICAgbW92IHJheCwgMQogICAgbW92IHJkaSwgMQogICAgbW92IHJzaSwgcjgKICAgIG1vdiByZHgsIHIxMQogICAgc3lzY2FsbAoKICAgIG1vdiByYXgsIDEKICAgIG1vdiByZGksIDEKICAgIG1vdiByc2ksIGFiYwogICAgbW92IHJkeCwgNAogICAgc3lzY2FsbAoKCiAgICBtb3YgcjEwLCBbaWR4XQogICAgbW92IHJheCwgW2xlbl0KICAgIGptcCBtYWluX2xvb3AKbmV4dF93b3JkOgogICAgbW92IHIxMCwgcjExCiAgICBtb3YgcmF4LCBbbGVuXQogICAgam1wIG1haW5fbG9vcAoKZXhpdDoKICAgIHhvciByZGksIHJkaQogICAgbW92IHJheCwgNjAKICAgIHN5c2NhbGw=