All pastes #2083080 Raw Edit

Untitled

public text v1 · immutable
#2083080 ·published 2011-09-26 16:00 UTC
rendered paste body
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