
Цель работы
Научиться анализировать ход выполнения программы на языке Ассемблера при помощи отладчика Turbo Debugger.
Задание
Дан массив Х[1..М]. Вычислить сумму элементов, удовлетворяющих условию A<=X[i]<=B. Используйте адресацию по базе с индексированием.
Листинг программы
Turbo Assembler Version 3.2 01/03/13 21:32:02 Page 1
lab3_11.asm
LaborRabota3
1
2 print MACRO Mess
3 lea DX,Mess
4 mov AH,09h
5 int 21h
6 ENDM
7 vvod MACRO N
8 lea DX,N
9 mov AH,0Ah
10 int 21h
11 ENDM
12 print_sim MACRO Sim
13 mov DX,Sim
14 mov AH,06h
15 int 21h
16 ENDM
17 prin_sim1 MACRO sim
18 mov DL,Sim
19 mov AH,06h
20 int 21h
21 ENDM
22 ten MACRO xx,n
23 LOCAL m1,exit
24 cmp n,0
25 je exit
26 push AX
27 push CX
28 mov CX,n
29 mov AX,xx
30 m1:
31 mov DX,10
32 mul DX
33 loop m1
34 mov xx,AX
35 pop CX
36 pop AX
37 exit:
38 ENDM
39 asci_deg MACRO xx,str,len
40 LOCAL m1
41 mov AX,0
42 mov BX,0
43 mov SI,0
44 mov CH,0
45 mov CL,len
46 mov DI,CX
47 dec DI
48 m1:
49 mov BL,str[SI]
50 mov BH,0
51 sub BX,30h
52 ten BX,DI
53 add AX,BX
54 inc SI
55 dec DI
56 loop m1
57 mov xx,AX
Turbo Assembler Version 3.2 01/03/13 21:32:02 Page 2
lab3_11.asm
LaborRabota3
58 Endm
59
60 0000 my_stack SEGMENT STACK 'Stack'
61 0000 40*(????) DW 64 DUP (?)
62 0080 my_stack ENDS
63
64 0000 data SEGMENT
65 0000 0A*(??) mas db 10 dup(?)
66 000A 03 ?? Temp1 db 3,?
67 000C 02*(??) Temp db 2 dup(?)
68 000E 0A 0D 82 A2 A5 A4 A8+ mes1 db 10,13,'Введите $'
69 E2 A5 20 24
70 0019 2D A9 20 ED AB A5 AC+ mes2 db '-й элемент массива=$'
71 A5 AD E2 20 AC A0 E1+
72 E1 A8 A2 A0 3D 24
73 002D 0A 0D 82 A2 A5 A4 A8+ mes3 db 10,13,'Введите число элементов массива=$'
74 E2 A5 20 E7 A8 E1 AB+
75 AE 20 ED AB A5 AC A5+
76 AD E2 AE A2 20 AC A0+
77 E1 E1 A8 A2 A0 3D 24
78 0050 0A 0D 82 A2 A5 A4 A8+ mes4 db 10,13,'Введите число A=$'
79 E2 A5 20 E7 A8 E1 AB+
80 AE 20 41 3D 24
81 0063 0A 0D 82 A2 A5 A4 A8+ mes5 db 10,13,'Введите число B=$'
82 E2 A5 20 E7 A8 E1 AB+
83 AE 20 42 3D 24
84 0076 0A 0D 91 E3 AC AC A0+ mes6 db 10,13,'Сумма элементов удовлетворяющих условию=$'
85 20 ED AB A5 AC A5 AD+
86 E2 AE A2 20 E3 A4 AE+
87 A2 AB A5 E2 A2 AE E0+
88 EF EE E9 A8 E5 20 E3+
89 E1 AB AE A2 A8 EE 3D+
90 24
91 00A1 03 ?? MM db 3,?
92 00A3 02*(??) M1 db 2 dup(?)
93 00A5 03 ?? AA db 3,?
94 00A7 02*(??) A1 db 2 dup(?)
95 00A9 03 ?? BB db 3,?
96 00AB 02*(??) B1 db 2 dup(?)
97 00AD 01*(????) M dw 1 dup(?)
98 00AF 01*(????) A dw 1 dup(?)
99 00B1 01*(????) B dw 1 dup(?)
100 00B3 0A 0D 24 Ent db '',0Ah,0Dh,'$'
101 00B6 01*(????) Tm dw 1 dup(?)
102 00B8 01*(????) Tm1 dw 1 dup(?)
103 00BA 01*(????) Tm2 dw 1 dup(?)
104 00BC 01*(????) Sum dw 1 dup(?)
105 00BE data ends
106
107 0000 text SEGMENT
108 assume CS:text, DS:data, SS:my_stack
109 0000 main proc far
110 0000 1E push DS
111 0001 33 C0 xor AX,AX
112 0003 50 push AX
113 0004 B8 0000s mov AX,data
114 0007 8E D8 mov DS,AX
Turbo Assembler Version 3.2 01/03/13 21:32:02 Page 3
lab3_11.asm
LaborRabota3
115
116 print Mes3
1 117 0009 BA 002Dr lea DX,Mes3
1 118 000C B4 09 mov AH,09h
1 119 000E CD 21 int 21h
120 Vvod MM
1 121 0010 BA 00A1r lea DX,MM
1 122 0013 B4 0A mov AH,0Ah
1 123 0015 CD 21 int 21h
124 asci_deg M,M1,[MM]+1
1 125 0017 B8 0000 mov AX,0
1 126 001A BB 0000 mov BX,0
1 127 001D BE 0000 mov SI,0
1 128 0020 B5 00 mov CH,0
1 129 0022 8A 0E 00A2r mov CL,[MM]+1
1 130 0026 8B F9 mov DI,CX
1 131 0028 4F dec DI
1 132 0029 ??0000:
1 133 0029 8A 9C 00A3r mov BL,M1[SI]
1 134 002D B7 00 mov BH,0
1 135 002F 83 EB 30 sub BX,30h
1 136 ten BX,DI
2 137 0032 83 FF 00 cmp DI,0
2 138 0035 74 11 je ??0002
2 139 0037 50 push AX
2 140 0038 51 push CX
2 141 0039 8B CF mov CX,DI
2 142 003B 8B C3 mov AX,BX
2 143 003D ??0001:
2 144 003D BA 000A mov DX,10
2 145 0040 F7 E2 mul DX
2 146 0042 E2 F9 loop ??0001
2 147 0044 8B D8 mov BX,AX
2 148 0046 59 pop CX
2 149 0047 58 pop AX
2 150 0048 ??0002:
1 151 0048 03 C3 add AX,BX
1 152 004A 46 inc SI
1 153 004B 4F dec DI
1 154 004C E2 DB loop ??0000
1 155 004E A3 00ADr mov M,AX
156 0051 8B 0E 00ADr mov CX,M
157 0055 BE 0000 mov SI,0
158 0058 BB 0000 mov BX,0
159 005B N:
160 print Mes1
1 161 005B BA 000Er lea DX,Mes1
1 162 005E B4 09 mov AH,09h
1 163 0060 CD 21 int 21h
164 0062 83 C6 31 add SI,31h
165 print_sim SI
1 166 0065 8B D6 mov DX,SI
1 167 0067 B4 06 mov AH,06h
1 168 0069 CD 21 int 21h
169 006B 83 EE 31 sub SI,31h
170 print Mes2
1 171 006E BA 0019r lea DX,Mes2
Turbo Assembler Version 3.2 01/03/13 21:32:02 Page 4
lab3_11.asm
LaborRabota3
1 172 0071 B4 09 mov AH,09h
1 173 0073 CD 21 int 21h
174 Vvod Temp1
1 175 0075 BA 000Ar lea DX,Temp1
1 176 0078 B4 0A mov AH,0Ah
1 177 007A CD 21 int 21h
178 007C 89 36 00B6r mov Tm,SI
179 0080 89 0E 00B8r mov Tm1,CX
180 asci_deg Tm2,Temp,[Temp1]+1
1 181 0084 B8 0000 mov AX,0
1 182 0087 BB 0000 mov BX,0
1 183 008A BE 0000 mov SI,0
1 184 008D B5 00 mov CH,0
1 185 008F 8A 0E 000Br mov CL,[Temp1]+1
1 186 0093 8B F9 mov DI,CX
1 187 0095 4F dec DI
1 188 0096 ??0003:
1 189 0096 8A 9C 000Cr mov BL,Temp[SI]
1 190 009A B7 00 mov BH,0
1 191 009C 83 EB 30 sub BX,30h
1 192 ten BX,DI
2 193 009F 83 FF 00 cmp DI,0
2 194 00A2 74 11 je ??0005
2 195 00A4 50 push AX
2 196 00A5 51 push CX
2 197 00A6 8B CF mov CX,DI
2 198 00A8 8B C3 mov AX,BX
2 199 00AA ??0004:
2 200 00AA BA 000A mov DX,10
2 201 00AD F7 E2 mul DX
2 202 00AF E2 F9 loop ??0004
2 203 00B1 8B D8 mov BX,AX
2 204 00B3 59 pop CX
2 205 00B4 58 pop AX
2 206 00B5 ??0005:
1 207 00B5 03 C3 add AX,BX
1 208 00B7 46 inc SI
1 209 00B8 4F dec DI
1 210 00B9 E2 DB loop ??0003
1 211 00BB A3 00BAr mov Tm2,AX
212 00BE A1 00BAr mov AX,Tm2
213 00C1 8B 36 00B6r mov SI,Tm
214 00C5 88 84 0000r mov Mas[SI],AL
215 00C9 8B 0E 00B8r mov CX,Tm1
216 00CD 46 inc SI
217 00CE E2 8B loop N
218 print Mes4
1 219 00D0 BA 0050r lea DX,Mes4
1 220 00D3 B4 09 mov AH,09h
1 221 00D5 CD 21 int 21h
222 Vvod AA
1 223 00D7 BA 00A5r lea DX,AA
1 224 00DA B4 0A mov AH,0Ah
1 225 00DC CD 21 int 21h
226 asci_deg A,A1,[AA]+1
1 227 00DE B8 0000 mov AX,0
1 228 00E1 BB 0000 mov BX,0
Turbo Assembler Version 3.2 01/03/13 21:32:02 Page 5
lab3_11.asm
LaborRabota3
1 229 00E4 BE 0000 mov SI,0
1 230 00E7 B5 00 mov CH,0
1 231 00E9 8A 0E 00A6r mov CL,[AA]+1
1 232 00ED 8B F9 mov DI,CX
1 233 00EF 4F dec DI
1 234 00F0 ??0006:
1 235 00F0 8A 9C 00A7r mov BL,A1[SI]
1 236 00F4 B7 00 mov BH,0
1 237 00F6 83 EB 30 sub BX,30h
1 238 ten BX,DI
2 239 00F9 83 FF 00 cmp DI,0
2 240 00FC 74 11 je ??0008
2 241 00FE 50 push AX
2 242 00FF 51 push CX
2 243 0100 8B CF mov CX,DI
2 244 0102 8B C3 mov AX,BX
2 245 0104 ??0007:
2 246 0104 BA 000A mov DX,10
2 247 0107 F7 E2 mul DX
2 248 0109 E2 F9 loop ??0007
2 249 010B 8B D8 mov BX,AX
2 250 010D 59 pop CX
2 251 010E 58 pop AX
2 252 010F ??0008:
1 253 010F 03 C3 add AX,BX
1 254 0111 46 inc SI
1 255 0112 4F dec DI
1 256 0113 E2 DB loop ??0006
1 257 0115 A3 00AFr mov A,AX
258 print Mes5
1 259 0118 BA 0063r lea DX,Mes5
1 260 011B B4 09 mov AH,09h
1 261 011D CD 21 int 21h
262 Vvod BB
1 263 011F BA 00A9r lea DX,BB
1 264 0122 B4 0A mov AH,0Ah
1 265 0124 CD 21 int 21h
266 asci_deg B,B1,[BB]+1
1 267 0126 B8 0000 mov AX,0
1 268 0129 BB 0000 mov BX,0
1 269 012C BE 0000 mov SI,0
1 270 012F B5 00 mov CH,0
1 271 0131 8A 0E 00AAr mov CL,[BB]+1
1 272 0135 8B F9 mov DI,CX
1 273 0137 4F dec DI
1 274 0138 ??0009:
1 275 0138 8A 9C 00ABr mov BL,B1[SI]
1 276 013C B7 00 mov BH,0
1 277 013E 83 EB 30 sub BX,30h
1 278 ten BX,DI
2 279 0141 83 FF 00 cmp DI,0
2 280 0144 74 11 je ??000B
2 281 0146 50 push AX
2 282 0147 51 push CX
2 283 0148 8B CF mov CX,DI
2 284 014A 8B C3 mov AX,BX
2 285 014C ??000A:
Turbo Assembler Version 3.2 01/03/13 21:32:02 Page 6
lab3_11.asm
LaborRabota3
2 286 014C BA 000A mov DX,10
2 287 014F F7 E2 mul DX
2 288 0151 E2 F9 loop ??000A
2 289 0153 8B D8 mov BX,AX
2 290 0155 59 pop CX
2 291 0156 58 pop AX
2 292 0157 ??000B:
1 293 0157 03 C3 add AX,BX
1 294 0159 46 inc SI
1 295 015A 4F dec DI
1 296 015B E2 DB loop ??0009
1 297 015D A3 00B1r mov B,AX
298 0160 BE 0000 mov SI,0
299 0163 8B 0E 00ADr mov CX,M
300 0167 BA 0000 mov DX,0
301 016A B8 0000 mov AX,0
302 016D N1:
303 016D 8A 84 0000r mov AL,Mas[SI]
304 0171 8B 1E 00AFr mov BX,A
305 0175 3B C3 cmp AX,BX
306 0177 7D 03 jge E
307 0179 EB 10 90 jmp Exit
308 017C E:
309 017C 8B 1E 00B1r mov BX,B
310 0180 3B 06 00B1r cmp AX,B
311 0184 7E 03 jle E1
312 0186 EB 03 90 jmp Exit
313 0189 E1:
314 0189 03 D0 add DX,AX
315 018B Exit:
316 018B 46 inc Si
317 018C E2 DF loop N1
318 018E 89 16 00BCr mov Sum,DX
319 print Mes6
1 320 0192 BA 0076r lea DX,Mes6
1 321 0195 B4 09 mov AH,09h
1 322 0197 CD 21 int 21h
323 0199 8B 16 00BCr mov DX,Sum
324 019D 8B C2 mov AX,DX
325 019F 3C 0A cmp AL,10
326 01A1 7D 03 jge D
327 01A3 EB 0B 90 jmp D1
328 01A6 D:
329 01A6 B3 0A mov BL,10
330 01A8 F6 F3 div BL
331 01AA 8B D8 mov BX,AX
332 01AC 8A C7 mov AL,BH
333 01AE 8A E3 mov AH,BL
334 01B0 D1:
335 01B0 04 30 add AL,30h
336 01B2 80 C4 30 add AH,30h
337 01B5 8A F8 mov BH,AL
338 01B7 8A DC mov BL,AH
339 prin_sim1 BL
1 340 01B9 8A D3 mov DL,BL
1 341 01BB B4 06 mov AH,06h
1 342 01BD CD 21 int 21h
Turbo Assembler Version 3.2 01/03/13 21:32:02 Page 7
lab3_11.asm
LaborRabota3
343 prin_sim1 BH
1 344 01BF 8A D7 mov DL,BH
1 345 01C1 B4 06 mov AH,06h
1 346 01C3 CD 21 int 21h
347 print Ent
1 348 01C5 BA 00B3r lea DX,Ent
1 349 01C8 B4 09 mov AH,09h
1 350 01CA CD 21 int 21h
351 ;-------------------------
352 01CC CB ret
353 01CD main endp
354 01CD text ends
355 end main
Turbo Assembler Version 3.2 01/03/13 21:32:02 Page 8
Symbol Table
LaborRabota3
Symbol Name Type Value
??0000 Near TEXT:0029
??0001 Near TEXT:003D
??0002 Near TEXT:0048
??0003 Near TEXT:0096
??0004 Near TEXT:00AA
??0005 Near TEXT:00B5
??0006 Near TEXT:00F0
??0007 Near TEXT:0104
??0008 Near TEXT:010F
??0009 Near TEXT:0138
??000A Near TEXT:014C
??000B Near TEXT:0157
??DATE Text "01/03/13"
??FILENAME Text "lab3_11 "
??TIME Text "21:32:02"
??VERSION Number 0314
@CPU Text 0101H
@CURSEG Text TEXT
@FILENAME Text LAB3_11
@WORDSIZE Text 2
A Word DATA:00AF
A1 Byte DATA:00A7
AA Byte DATA:00A5
B Word DATA:00B1
B1 Byte DATA:00AB
BB Byte DATA:00A9
D Near TEXT:01A6
D1 Near TEXT:01B0
E Near TEXT:017C
E1 Near TEXT:0189
ENT Byte DATA:00B3
EXIT Near TEXT:018B
M Word DATA:00AD
M1 Byte DATA:00A3
MAIN Far TEXT:0000
MAS Byte DATA:0000
MES1 Byte DATA:000E
MES2 Byte DATA:0019
MES3 Byte DATA:002D
MES4 Byte DATA:0050
MES5 Byte DATA:0063
MES6 Byte DATA:0076
MM Byte DATA:00A1
N Near TEXT:005B
N1 Near TEXT:016D
SUM Word DATA:00BC
TEMP Byte DATA:000C
TEMP1 Byte DATA:000A
TM Word DATA:00B6
TM1 Word DATA:00B8
TM2 Word DATA:00BA
Turbo Assembler Version 3.2 01/03/13 21:32:02 Page 9
Symbol Table
LaborRabota3
Macro Name
ASCI_DEG
PRINT_SIM
PRIN_SIM1
TEN
VVOD
Groups & Segments Bit Size Align Combine Class
DATA 16 00BE Para none
MY_STACK 16 0080 Para Stack STACK
TEXT 16 01CD Para none