Files
NASM/is_digit/is_digit.asm
Пытков Роман 6a90ff02c8 id_digit и min
2025-09-23 17:16:48 +03:00

79 lines
1.4 KiB
NASM

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