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