; Jade Yu Cheng
; ICS 312
; Assignment 5 Exercise 1
; March 17, 2009
; The program prompt the user to enter 10 numbers between 0 and 9 (both
; included). The program prints an error message and re-prompt the user for
; another number if the number entered is invalid. These numbers are stored in
; memory as 1-byte values. Once the user has entered 10 valid numbers, the
; program prints them out in the order they were entered.
%include "asm_io.inc"
segment .data
prompt db "Enter a number between 0 and 9: ", 0 ; a message
invalid db "Invalid number!", 0 ; a message
segment .bss
n resb 10 ; reserve space for the numbers
segment .text
global asm_main
asm_main:
enter 0,0 ; setup
pusha ; setup
mov edx, 0 ; initialize edx = 0
mov ebx, n ; initialize ebx to point to the starting of n
loop_start:
cmp edx, 9 ; compare edx with 9
jg loop_end ; terminate the loop if 10 iterations are done
mov eax, prompt ; print out the message to prompt user input
call print_string
call read_int ; read a number and store it in eax
cmp eax, 0 ; compare the input with 0
jnge else_block ; branch if the input is a negative number
cmp eax, 9 ; compare the input with 9
jnbe else_block ; branch if the input is larger than 9
inc edx ; increment edx
inc ebx ; increment ebx to point to the next position
mov [ebx], al ; store the number as a one byte quantity
jmp loop_start
loop_end:
mov edx, 0 ; initialize edx = 0
mov ebx, n ; initialize ebx to point to the starting of n
loop_print_start:
cmp edx, 9 ; compare edx with 9
jg end ; terminate the loop if 10 iterations are done
inc edx ; increment edx
inc ebx ; increment ebx to point ot the next position
mov eax, 0 ; wipe out garbage in eax
mov al, [ebx] ; put the contents of the address that ebx
; points to input eax as a one byte quantity
call print_int ; print out the content of eax
call print_nl
jmp loop_print_start
else_block:
mov eax, invalid ; print out the number invalid message
call print_string
call print_nl
jmp loop_start ; go back to the loop for more inputs
end:
popa ; cleanup
mov eax, 0 ; cleanup
leave ; cleanup
ret ; cleanup