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