In: Electrical Engineering
Assignment Description:
Develop and test an Intel 8086 assembly program that reads two
decimal numbers x and y. Your program
should display the result of their:
1) Addition: x+y
2) Subtraction: x-y
3) Multiplication: x*y
4) Division: x / y
Notes:
x and y are two-digit decimal numbers (i.e. 0-99).
The program should display an error message if the value of y is
zero, in the case of division.
You can assume only positive numbers but you will get a bonus if
your program can read and handle
negative numbers.
You will get higher mark if your program accepts only two decimal
digits (0-9) for each number and
print error message when the user tries to enter non-decimal digits
(e.g. A-Z, or a-z, or any special
character).
Your program output should be similar to the following
examples:
Example1: (x>y)
Please enter two 2-digit decimal
number:
X= 48
Y= 26
X + Y = 74
X – Y = 22
X * Y = 1248
X /Y = 1 with Remainder 22
Example2: (x<y)
Please enter two 2-digit decimal
number:
X= 12
Y= 37
X + Y = 49
X – Y = -25
X * Y = 444
X /Y = 0 with Remainder 12
Example3: (y=0)
Please enter two 2-digit decimal
number:
X= 56
Y= 00
X + Y = 56
X – Y = 56
X * Y = 00
X /Y = error overflow
Hey! Hope you're having a great day! If this helps, please don't forget to leave a thumbs up!
The following code uses the Irvine32 library, so make sure it's installed in your system.
TITLE MASM Template (main.asm)
INCLUDE Irvine32.inc
.data
;Please choose either of the following operations:', 13,10,0
szMenu db "Now what do you want to do with those 2 numbers?", 13, 10
db 'Add (A)',13,10
db 'Subtract (S)',13,10
db 'Divide (D)',13,10
db 'Multiply (M)',13,10
db 'Exit (E)',13,10
db 'Selection: ',0 ;13,10,0
myMenu db 'Welcome!', 13, 10
db 'Enter Integer 1: ',0
myInteger2 db 'Enter Integer 2: ',0;13,10,0
szInvalidMenu db 13, 10, "Invalid Menu Choice!", 13, 10, 0
myTotal db 'Total: ',13,10,0
.data?
Input1 dd ?
Input2 dd ?
Total dd ?
.code
Start:
call Clrscr
mov edx, offset myMenu
call WriteString
FirstNum:
call ReadInt
test eax, eax
jz Start
mov Input1, eax
SecondNum:
mov edx, offset myInteger2
call WriteString
call ReadInt
test eax, eax
jz SecondNum
mov Input2, eax
Menu:
mov edx, offset szMenu
call WriteString
call ReadChar
.if al == "A" || al == "a"
Call Crlf
mov edx, offset myTotal
call WriteString
mov eax, Total
mov eax, Input1
add eax, Input2
Call WriteInt
Call Crlf
;jmp start
.elseif al == "S" || al == "s"
Call Crlf
mov edx, offset myTotal
call WriteString
mov eax, Total
mov eax, Input1
sub eax, Input2
Call WriteInt
Call Crlf
;jmp start
.elseif al == "D" || al == "d"
Call Crlf
mov edx, offset myTotal
call WriteString
mov eax, Total
mov eax, Input1
div eax, Input2
Call WriteInt
Call Crlf
;jmp start
.elseif al == "M" || al == "m"
Call Crlf
mov edx, offset myTotal
call WriteString
mov eax, Total
mov eax, Input1
mul eax, Input2
Call WriteInt
Call Crlf
;jmp start
.elseif al == "E" || al == "e"
exit
.else
mov edx, offset szInvalidMenu
call WriteString
jmp Menu
.endif
call WaitMsg
exit
end Start
exit
main ENDP
END main