global _start section .data g_buff times 10 db 0 g_buffLen dq 0 g_digit db "Digit" g_digitLen dq $-g_digit g_notDigit db "Not a digit" g_notDigitLen dq $-g_notDigit section .text default rel _start: call read_text movzx rax, byte [g_buff] ; первый символ cmp rax, '0' jl .notDigit cmp rax, '9' jg .notDigit .digit: lea rsi, [g_digit] mov rdx, [g_digitLen] jmp .write .notDigit: lea rsi, [g_notDigit] mov rdx, [g_notDigitLen] .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 g_buff] ; адрес буфера mov rdx, 256 ; количество байт syscall mov [g_buffLen], 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 [g_buffLen], rax pop rdx pop rsi pop rdi pop rax ret