; 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