Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
01.05.2014
Размер:
629.76 Кб
Скачать

Текст файла листинга

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

Соседние файлы в папке Лабораторная работа №4