Задание №6. Подсчитать количество положительных и отрицательных элементов в заданном векторе

Подсчитать количество положительных и отрицательных элементов в заданном векторе:

а) элементы вектора однобайтовые;

б) элементы вектора двухбайтовые.

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



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: