Files
NASM/even_odd/even_odd.asm
Пытков Роман 01c7a248ad even_odd
2025-09-23 01:24:01 +03:00

80 lines
1.3 KiB
NASM

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