-
Notifications
You must be signed in to change notification settings - Fork 0
/
Source Code 2.txt
141 lines (128 loc) · 2.5 KB
/
Source Code 2.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
; AddTwo.asm - adds two 32-bit integers.
; Chapter 3 example
.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword
Include irvine32.inc
.data
Prompt1 BYTE "Enter the first number: ",0
Prompt2 BYTE "Enter the second number: ",0
Prompt3 BYTE "The product is: ",0
Prompt4 BYTE " and the quotient is ",0
Prompt5 BYTE " with remainder ",13,10,0
Prompt6 BYTE " Do you wish to repeat? Enter y/Y to repeat, n/N to exit ",13,10,0
Prompt7 BYTE " The Sum is ",0
Prompt8 BYTE " and the difference is ",13,10
num1 DWORD ?
num2 DWORD ?
.code
;====================================================================
P1:
mov edx, OFFSET Prompt1
call WriteString
call ReadInt
ret
;====================================================================
P2:
mov edx, OFFSET Prompt2
call WriteString
call ReadInt
ret
;====================================================================
P3:
mov edx, OFFSET Prompt3
call WriteString
call WriteInt
ret
;====================================================================
P5:
mov edx, OFFSET Prompt7
call WriteString
call WriteInt
ret
;====================================================================
P4:
mov edx, OFFSET Prompt4
call WriteString
call WriteInt
mov eax, ebx
mov edx, OFFSET Prompt5
call WriteString
call WriteInt
ret
;================================================
P6:
mov edx, OFFSET Prompt8
call WriteString
call WriteInt
ret
;================================================
main proc
;User Input
top:
xor edx,edx
xor eax,eax
xor ebx,ebx
;Retrieve Numbers
call P1 ;"Enter the first number: "
mov ebx,eax
call P2 ;"Enter the second number: "
push eax
push ebx
cmp ax, 0
jl Uno
cmp bx, 0
jl Uno
;Both Positive
xor edx, edx
imul ebx
call P3 ;"The product is: "
pop eax
pop ebx
xor edx, edx
idiv bx
call P4 ;" The q and remainder is "
jmp redo
Uno:
pop eax
pop ebx
cmp ebx, 0
jl Dos
neg eax
xor edx, edx
div ebx
mov ebx, edx
mov edx, OFFSET Prompt4
call WriteString
call WriteInt
mov eax, ebx
mov edx, OFFSET Prompt5
call WriteString
call WriteInt
jmp redo
Dos:
push eax
push ebx
neg eax
neg ebx
add eax, ebx
call P5
pop eax
pop ebx
sub eax, ebx
call P6
jmp redo
redo:
mov eax, 0
mov edx, OFFSET Prompt6
call Writestring
call Readchar
cmp al, 59h
je top
cmp al, 79h
je top
exit
invoke ExitProcess,0
main endp
end main