section .data
var dd 0
msg1 db 'Input XXXX number, please. 0 - exit.',0xa;our dear string
len1 equ $ - msg1
msg2 db 'Number is lower than 1000. Try again. Error.',0xa
len2 equ $ - msg2
msg3 db 'Number is bigger than 9999. Try again. Error.',0xa
len3 equ $ - msg3
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
mov edx,len1;message length
mov ecx,msg1;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
TryAgain:
; here is the question, what does "var" get? a number or a string with some symbol at the end?
; what should i do?
mov eax,3 ;sys_read call
mov ebx,0 ;file descriptor: 0 (stdin)
mov ecx,var ;where to put data
mov edx,4 ;number of bytes
int 0x80 ;call kernel
cmp dword [var],1000
jl ErrorLower ;lower than 1000 - try again!
cmp dword [var],9999
jg ErrorBigger
mov eax,4
mov ebx,1
mov ecx,var ;print var to the stdout and exit
mov edx,4
int 0x80 ;call kernel
jmp Exit
ErrorLower:
mov edx,len2
mov ecx,msg2
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
jmp TryAgain
ErrorBigger:
mov edx,len3
mov ecx,msg3
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
jmp TryAgain
Exit:
mov eax,1 ;system call number (sys_exit)
mov ebx,0 ;error code 0, make linux happy
int 0x80 ;call kernel