Подсчитать количество положительных и отрицательных элементов в заданном векторе:
а) элементы вектора однобайтовые;
б) элементы вектора двухбайтовые.
1) Листинг программы:
Turbo Assembler Version 3.1 24/04/12 17:34:43 Page 1
1.asm
1 0000 stak segment para public 'data'
2 0000 40*(73 74 61 63 6B) db 64 dup('stack')
3 0140 stak ends
4 0000 DSEG SEGMENT PARA PUBLIC 'DATA'
5 0000 FF FE 03 F8 F7 09 FA+ mas db -1,-2,3,-8,-9,9,-6,1,2,-5; заданный вектор
6 01 02 FB
7 =000A len_mas=$-mas; количество элементов в векторе
8 000A 00 sch_pol db 0; счетчик положительных элементов вектора
9 000B 00 sch_otr db 0; счетчик отрицательных элементов вектора
10 000C dseg ends
Turbo Assembler Version 3.1 24/04/12 17:34:43 Page 2
1.asm
11 0000 cseg segment para public 'code'
12 assume cs:cseg,ds:dseg,ss:stak
13 0000 our_prog proc far
14 0000 1E push ds
15 0001 B8 0000 mov ax,0
16 0004 50 push ax
17 0005 B8 0000s mov ax,dseg
18 0008 8E D8 mov ds,ax
20 000A B9 000A mov cx,len_mas; инициализация счетчика цикла
21 000D 33 F6 xor si,si; инициализация индексного регистра
22 000F 80 BC 0000r 00 cycl: cmp mas[si],0; сравниваем элемент вектора с 0
23 0014 7F 07 jg pol; элементы >0 считаем в блоке pol
24 0016 FE 06 000Br inc sch_otr; увеличиваем счетчик элементов <0
25 001A EB 05 90 jmp kon_cycl; безусловный переход на метку kon_cycl
|
|
26 001D FE 06 000Ar pol: inc sch_pol; увеличиваем счетчик элементов >0
27 0021 46 kon_cycl: inc si; переходим к следующему элементу вектора
28 0022 E2 EB loop cycl; завершаем цикл
29 0024 CB ret
30 0025 our_prog endp
31 0025 cseg ends
32 end our_prog
Turbo Assembler Version 3.1 24/04/12 17:34:43 Page 3
Symbol Table
Symbol Name Type Value
??DATE Text "24/04/12"
??FILENAME Text "1 "
??TIME Text "17:34:43"
??VERSION Number 030A
@CPU Text 0101H
@CURSEG Text CSEG
@FILENAME Text 1
@WORDSIZE Text 2
CYCL Near CSEG:000F
KON_CYCL Near CSEG:0021
LEN_MAS Number 000A
MAS Byte DSEG:0000
OUR_PROG Far CSEG:0000
POL Near CSEG:001D
SCH_OTR Byte DSEG:000B
SCH_POL Byte DSEG:000A
Groups & Segments Bit Size Align Combine Class
CSEG 16 0025 Para Public CODE
DSEG 16 000C Para Public DATA
STAK 16 0140 Para Public DATA
2) Листинг программы:
Turbo Assembler Version 3.1 24/04/12 19:50:33 Page 1
2.asm
1 0000 stak segment para public 'data'
2 0000 40*(73 74 61 63 6B) db 64 dup('stack')
3 0140 stak ends
4 0000 DSEG SEGMENT PARA PUBLIC 'DATA'
5 0000 FFFF FFFE 0003 FFF8 + mas dw -1,-2,3,-8,-9,9,-6,1,2,-5; заданный вектор
6 FFF7 0009 FFFA 0001 +
7 0002 FFFB
8 =0014 len_mas=$-mas; количество элементов в векторе
9 0014 0000 sch_pol dw 0; счетчик положительных элементов вектора
10 0016 0000 sch_otr dw 0; счетчик отрицательных элементов вектора
11 0018 dseg ends
Turbo Assembler Version 3.1 24/04/12 19:50:33 Page 2
2.asm
12 0000 cseg segment para public 'code'
13 assume cs:cseg,ds:dseg,ss:stak
14 0000 our_prog proc far
15 0000 1E push ds
16 0001 B8 0000 mov ax,0
17 0004 50 push ax
18 0005 B8 0000s mov ax,dseg
19 0008 8E D8 mov ds,ax
20 000A B9 0014 mov cx,len_mas; инициализация счетчика цикла
21 000D 33 F6 xor si,si; инициализация индексного регистра
22 000F 83 BC 0000r 00 cycl: cmp mas[si],0; сравниваем элемент вектора с 0
23 0014 7F 07 jg pol; элементы >0 считаем в блоке pol
24 0016 FF 06 0016r inc sch_otr; увеличиваем счетчик элементов <0
25 001A EB 05 90 jmp kon_cycl; безусловный переход на метку kon_cycl
26 001D FF 06 0014r pol: inc sch_pol; увеличиваем счетчик элементов >0
27 0021 46 kon_cycl: inc si; переходим к следующему элементу вектора
28 0022 E2 EB loop cycl; завершаем цикл
29 0024 CB ret
30 0025 our_prog endp
31 0025 cseg ends
|
|
32 end our_prog
Turbo Assembler Version 3.1 24/04/12 19:50:33 Page 3
Symbol Table
Symbol Name Type Value
??DATE Text "24/04/12"
??FILENAME Text "2 "
??TIME Text "19:50:33"
??VERSION Number 030A
@CPU Text 0101H
@CURSEG Text CSEG
@FILENAME Text 2
@WORDSIZE Text 2
CYCL Near CSEG:000F
KON_CYCL Near CSEG:0021
LEN_MAS Number 0014
MAS Word DSEG:0000
OUR_PROG Far CSEG:0000
POL Near CSEG:001D
SCH_OTR Word DSEG:0016
SCH_POL Word DSEG:0014
Groups & Segments Bit Size Align Combine Class
CSEG 16 0025 Para Public CODE
DSEG 16 0018 Para Public DATA
STAK 16 0140 Para Public DATA