; Jade Yu Cheng
; ICS 312
; Assignment 4 Exercise 1
; Feb 28, 2009
; The program prompts the user to enter 2 positive integers. The program aborts
; with an error message if either number is not encodable as a 1-byte value.
; The program then computes the sum of the two integers. If there is an
; overflow, the program prints an error message. Otherwise, the program prints
; the result.
%include "asm_io.inc"
segment .data
prompt db "Enter a 1-byte unsigned number: ", 0
invalid db "Invalid number...", 0
overflow db "Overfow!", 0
sum db "The summation of these two numbers is: ", 0
segment .bss
input1 resb 1 ; reserve space for the first number
input2 resb 1 ; reserve space for the second number
result resb 1 ; reserve space for the result number
segment .text
global asm_main
asm_main:
enter 0,0 ; setup
pusha ; setup
mov eax, prompt ; print out the prompt message
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, 255 ; compare the input with 255
jnbe else_block ; branch if the input is larger than 255
mov [input1], eax ; if the input is in range, store it in "input1"
mov eax, prompt ; print out the prompt message
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 a negative number
cmp eax, 255 ; cmpare the input with 255
jnbe else_block ; branch if the input is larger than 255
mov [input2], eax ; if the input is in range, store it in "input2"
mov bl, [input1] ; mov "input1" into bl
add bl, [input2] ; add bl with "input2", store the result in bl
jc overflow_block ; jump if carray bit is set
mov eax, sum ; print out the summation message
call print_string
movzx eax, bl ; unsigned extend bl into eax
call print_int ; print out the result
call print_nl
jmp end ; skip the overflow_block and else_block
else_block:
mov eax, invalid ; print out the number invalid message
call print_string
call print_nl
jmp end ; skip the overflow_block
overflow_block:
mov eax, overflow ; print out the overflow error message
call print_string
call print_nl
end:
popa ; cleanup
mov eax, 0 ; cleanup
leave ; cleanup
ret ; cleanup