
Текст файла листинга
Microsoft (R) Macro Assembler Version 5.10 3/24/5
Page 1-1
1 ; ТЕКСТ ПРОГРАММЫ
2
3 = 0024 EOFLine EQU '$' ; Опред
еление символьной константы
4 ; "
Конец строки"
5
6 mult MACRO A, B ; Произ
ведение A и B, резултат в AX
7
8 mov DX, OFFSET MulM
essage; УМНОЖЕНИЕ
9 call WriteMsg
10
11 push A
12 push B
13 call Write
14
15 mov AX, A
16 mul B
17
18 push AX
19 push DX
20
21 mov DX, OFFSET Mess
age
22 call WriteMsg
23
24 pop AX
25 call WriteAX
26 pop AX
27 call WriteAX
28
29 mov DX, OFFSET _Ent
er
30 call WriteMsg
31
32 ENDM
33
34 Sum MACRO A, B ; Сумма A
и B, резултат в AX
35
36 mov DX, OFFSET SumM
essage ; СЛОЖЕНИЕ
37 call WriteMsg
38
39 push A
40 push B
41 call Write
42
43
44 mov AX, A
45 add AX, B
46 mov A, AX
Microsoft (R) Macro Assembler Version 5.10 3/24/5
Page 1-2
47
48 mov DX, OFFSET Mess
age
49 call WriteMsg
50
51 call WriteAX
52
53 mov DX, OFFSET _Ent
er
54 call WriteMsg
55
56
57 ENDM
58
59 ; Стек программы
60
61 0000 AStack SEGMENT STACK
62 0000 000C[ DW 12 DUP(?)
; Отводится 12 слов памяти
63 ????
64 ]
65
66 0018 AStack ENDS
67
68 ;Данные программы
69
70 0000 DATA SEGMENT
71 ; Директивы описания данных
72
73 0000 0A 0D 24 _Enter DB 0AH, 0DH, EOFLi
ne
74 0003 90 A5 A7 E3 AB EC Message DB 'Результат опер
ации: ', EOFLine
75 E2 A0 E2 20 AE AF
76 A5 E0 A0 E6 A8 A8
77 3A 20 24
78 0018 41 20 3D 20 24 UserMessage1 DB 'A = ', EOFLine
79 001D 42 20 3D 20 24 UserMessage2 DB 'B = ', EOFLine
80 0022 82 EB AF AE AB AD MulMessage DB 'Выполняю умнож
ение...', 0AH, 0DH, EOFLine
81 EF EE 20 E3 AC AD
82 AE A6 A5 AD A8 A5
83 2E 2E 2E 0A 0D 24
84 003A 82 EB AF AE AB AD SumMessage DB 'Выполняю сложе
ние...', 0AH, 0DH, EOFLine
85 EF EE 20 E1 AB AE
86 A6 A5 AD A8 A5 2E
87 2E 2E 0A 0D 24
88 0051 82 EB AF AE AB AD DivMessage DB 'Выполняю делен
ие...', 0AH, 0DH, EOFLine
89 EF EE 20 A4 A5 AB
90 A5 AD A8 A5 2E 2E
91 2E 0A 0D 24
92
Microsoft (R) Macro Assembler Version 5.10 3/24/5
Page 1-3
93 0067 91 E2 A0 E0 E2 20 Hello DB 'Старт программ
ы ', 0AH, 0DH, EOFLine
94 AF E0 AE A3 E0 A0
95 AC AC EB 20 20 20
96 0A 0D 24
97 007C 8A AE AD A5 E6 20 GameOVER DB 'Конец работы п
рограммы ', 0AH, 0DH, EOFLine
98 E0 A0 A1 AE E2 EB
99 20 AF E0 AE A3 E0
100 A0 AC AC EB 20 0A
101 0D 24
102
103 0096 0002 Variable_1 DW 2H
104 0098 0010 Variable_2 DW 10H
105
106
107
108 009A DATA ENDS
109
110 ; Код программы
111
112 0000 CODE SEGMENT
113
114 ASSUME CS:CODE, DS:DATA, SS:ASt
ack
115
116 ; Процедура печати строки
117 0000 WriteMsg PROC NEAR
118
119 0000 50 push AX
120 0001 33 C0 xor AX, AX
121 0003 B4 09 mov AH, 9
122 0005 CD 21 int 21h ; Вызов фу
нкции DOS по прерыванию
123 0007 58 pop AX
124 0008 C3 ret
125
126 0009 WriteMsg ENDP
127
128
129 ; Процедура печати числа в шестнадцатир
ичной системе
130 0009 WriteAX PROC NEAR
131 0009 8B D8 mov BX, AX
132 000B B1 04 mov CL, 4
133 000D D2 EC shr AH, CL
134 000F 8A C4 mov AL, AH
135 0011 E8 002B R call Print_Nible
136 0014 8A E7 mov AH, BH
137 0016 80 E4 0F and AH, 0Fh
138 0019 8A C4 mov AL, AH
139 001B E8 002B R call Print_Nible
140 001E B1 04 mov CL, 4
141 0020 8A C3 mov AL, BL
Microsoft (R) Macro Assembler Version 5.10 3/24/5
Page 1-4
142 0022 D2 E8 shr AL, CL
143 0024 E8 002B R call Print_Nible
144 0027 8A C3 mov AL, BL
145 0029 24 0F and AL, 0Fh
146 002B Print_Nible:
147 002B 3C 0A cmp AL, 10
148 002D 1C 69 sbb AL, 69H
149 002F 2F das
150 0030 8A D0 mov DL, AL
151 0032 B4 02 mov AH, 2
152 0034 CD 21 int 21h
153 0036 C3 ret
154 0037 WriteAX ENDP
155
156 0037 Write PROC NEAR
157
158 0037 BA 0018 R mov DX, OFFSET User
Message1
159 003A E8 0000 R call WriteMsg
160
161 003D 36: A1 0010 mov AX, SS:10H
162 0041 E8 0009 R call WriteAX
163
164 0044 BA 0000 R mov DX, OFFSET _Ent
er
165 0047 E8 0000 R call WriteMsg
166
167 004A BA 001D R mov DX, OFFSET User
Message2
168 004D E8 0000 R call WriteMsg
169
170 0050 36: A1 0012 mov AX, SS:12H
171 0054 E8 0009 R call WriteAX
172
173 0057 BA 0000 R mov DX, OFFSET _Ent
er
174 005A E8 0000 R call WriteMsg
175
176 005D C2 0004 ret 4
177
178 0060 Write ENDP
179
180
181 0060 delenie PROC NEAR ; В сте
ке длжны находиться делимое и делитель
182
183 0060 BA 0051 R mov DX, OFFSET DivM
essage ; ДЕЛЕНИЕ
184 0063 E8 0000 R call WriteMsg
185
186 0066 BA 0018 R mov DX, OFFSET User
Message1
187 0069 E8 0000 R call WriteMsg
188
Microsoft (R) Macro Assembler Version 5.10 3/24/5
Page 1-5
189 006C A1 0098 R mov AX, Variable_2
190 006F E8 0009 R call WriteAX
191
192 0072 BA 0000 R mov DX, OFFSET _Ent
er
193 0075 E8 0000 R call WriteMsg
194
195 0078 BA 001D R mov DX, OFFSET User
Message2
196 007B E8 0000 R call WriteMsg
197
198 007E A1 0096 R mov AX, Variable_1
199 0081 E8 0009 R call WriteAX
200
201 0084 BA 0000 R mov DX, OFFSET _Ent
er
202 0087 E8 0000 R call WriteMsg
203
204
205 008A A1 0098 R mov AX, Variable_2
; Делимое
206 008D 8B 1E 0096 R mov BX, Variable_1
; Делитель
207
; результат в CX
208 0091 33 C9 xor CX, CX ; Очист
ка частного
209 0093 3B C3 Repeat: cmp AX, BX ; Если
делимое < делителя,
210 0095 72 05 jb Quit ; то вы
йти
211 0097 2B C3 sub AX, BX ; Вычит
ание делителя из делимого
212 0099 41 inc CX ; Инкре
мент частного
213 009A EB F7 jmp Repeat ; Повто
рить цикл
214 ; Частн
ое в CX, остаток в AX
215
216 009C Quit:
217 009C BA 0003 R mov DX, OFFSET Mess
age
218 009F E8 0000 R call WriteMsg
219
220 00A2 8B C1 mov AX, CX
221 00A4 E8 0009 R call WriteAX
222
223 00A7 BA 0000 R mov DX, OFFSET _Ent
er
224 00AA E8 0000 R call Writemsg
225 00AD C3 ret
226 00AE delenie ENDP
227
Microsoft (R) Macro Assembler Version 5.10 3/24/5
Page 1-6
228
229
230 ; Головная процедура
231 00AE Main PROC FAR
232
233 00AE 1E push DS ;\ С
охранение адреса начала PSP в стеке
234 00AF 33 C0 xor AX, AX ; > д
ля последующего восстановления по
235 00B1 50 push AX ;/ к
оманде ret, завершающей процедуру.
236
237 00B2 B8 ---- R mov AX, DATA
; Загрузка сегментного
238 00B5 8E D8 mov DS, AX
; регистра данных.
239
240 00B7 BA 0067 R mov DX, OFFSET HELL
O
241 00BA E8 0000 R call WriteMsg
242
243 00BD E8 0060 R call delenie
244
245 Mult Variable_1, Var
iable_2
246 00C0 BA 0022 R 1 mov DX, OFFSET MulM
essage; УМНОЖЕНИЕ
247 00C3 E8 0000 R 1 call WriteMsg
248 00C6 FF 36 0096 R 1 push Variable_1
249 00CA FF 36 0098 R 1 push Variable_2
250 00CE E8 0037 R 1 call Write
251 00D1 A1 0096 R 1 mov AX, Variable_1
252 00D4 F7 26 0098 R 1 mul Variable_2
253 00D8 50 1 push AX
254 00D9 52 1 push DX
255 00DA BA 0003 R 1 mov DX, OFFSET Mess
age
256 00DD E8 0000 R 1 call WriteMsg
257 00E0 58 1 pop AX
258 00E1 E8 0009 R 1 call WriteAX
259 00E4 58 1 pop AX
260 00E5 E8 0009 R 1 call WriteAX
261 00E8 BA 0000 R 1 mov DX, OFFSET _Ent
er
262 00EB E8 0000 R 1 call WriteMsg
263
264 sum Variable_1, Var
iable_2
265 00EE BA 003A R 1 mov DX, OFFSET SumM
essage ; СЛОЖЕНИЕ
266 00F1 E8 0000 R 1 call WriteMsg
267 00F4 FF 36 0096 R 1 push Variable_1
268 00F8 FF 36 0098 R 1 push Variable_2
269 00FC E8 0037 R 1 call Write
Microsoft (R) Macro Assembler Version 5.10 3/24/5
Page 1-7
270 00FF A1 0096 R 1 mov AX, Variable_1
271 0102 03 06 0098 R 1 add AX, Variable_2
272 0106 A3 0096 R 1 mov Variable_1, AX
273 0109 BA 0003 R 1 mov DX, OFFSET Mess
age
274 010C E8 0000 R 1 call WriteMsg
275 010F E8 0009 R 1 call WriteAX
276 0112 BA 0000 R 1 mov DX, OFFSET _Ent
er
277 0115 E8 0000 R 1 call WriteMsg
278
279 0118 BA 007C R mov DX, OFFSET GAME
OVER
280 011B E8 0000 R call WriteMsg
281
282 011E CA 0002 ret 2
; Выход в DOS по команде,
283
; находящейся в 1-ом слове PSP.
284 0121 Main ENDP
285
286 0121 CODE ENDS
287 END Main
Microsoft (R) Macro Assembler Version 5.10 3/24/5
Symbols-1
Macros:
N a m e Lines
MULT . . . . . . . . . . . . . . 17
SUM . . . . . . . . . . . . . . 13
Segments and Groups:
N a m e Length Align Combine Class
ASTACK . . . . . . . . . . . . . 0018 PARA STACK
CODE . . . . . . . . . . . . . . 0121 PARA NONE
DATA . . . . . . . . . . . . . . 009A PARA NONE
Symbols:
N a m e Type Value Attr
DELENIE . . . . . . . . . . . . N PROC 0060 CODE Length = 004E
DIVMESSAGE . . . . . . . . . . . L BYTE 0051 DATA
EOFLINE . . . . . . . . . . . . NUMBER 0024
GAMEOVER . . . . . . . . . . . . L BYTE 007C DATA
HELLO . . . . . . . . . . . . . L BYTE 0067 DATA
MAIN . . . . . . . . . . . . . . F PROC 00AE CODE Length = 0073
MESSAGE . . . . . . . . . . . . L BYTE 0003 DATA
MULMESSAGE . . . . . . . . . . . L BYTE 0022 DATA
PRINT_NIBLE . . . . . . . . . . L NEAR 002B CODE
QUIT . . . . . . . . . . . . . . L NEAR 009C CODE
REPEAT . . . . . . . . . . . . . L NEAR 0093 CODE
SUMMESSAGE . . . . . . . . . . . L BYTE 003A DATA
USERMESSAGE1 . . . . . . . . . . L BYTE 0018 DATA
USERMESSAGE2 . . . . . . . . . . L BYTE 001D DATA
VARIABLE_1 . . . . . . . . . . . L WORD 0096 DATA
VARIABLE_2 . . . . . . . . . . . L WORD 0098 DATA
WRITE . . . . . . . . . . . . . N PROC 0037 CODE Length = 0029
WRITEAX . . . . . . . . . . . . N PROC 0009 CODE Length = 002E
WRITEMSG . . . . . . . . . . . . N PROC 0000 CODE Length = 0009
@CPU . . . . . . . . . . . . . . TEXT 0101h
@FILENAME . . . . . . . . . . . TEXT Lr4
@VERSION . . . . . . . . . . . . TEXT 510
_ENTER . . . . . . . . . . . . . L BYTE 0000 DATA
Microsoft (R) Macro Assembler Version 5.10 3/24/5
Symbols-2
235 Source Lines
265 Total Lines
30 Symbols
45984 + 428124 Bytes symbol space free
0 Warning Errors
0 Severe Errors