2.2 Задание 2
2.2.1 Исходный текст программы
STACKSEG SEGMENT PARA PUBLIC 'STACK'
DB 64 DUP(0) ; Область стека
STACKSEG ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
MATRIX DB 0, 20, 0, -30, 0
DB 40, -50, 60, 10, 0
DB -1, 20, 0, 5, 45
DB 41, 0, -4, 11, 11
DB -4, 0, -5, 10, -121
POSCNT DB 0
ROWLEN DW 5
MESSPOSONCOL DB 'AMOUNT OF POSITIVE NUMBERS IN $'
MESSCOL DB ' COL IS :$'
CARRLBK DB 0DH,0AH,'$'
DSEG ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG
OUR_PROG PROC FAR
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
MOV SI,0
MOV CX,ROWLEN
OUTERLOOP:
PUSH CX
LEA BX,MATRIX
MOV CX,ROWLEN
INSIDELOOP:
CMP MATRIX[BX+SI],0
JLE NEGZ
INC POSCNT
NEGZ:
ADD BX,ROWLEN
LOOP INSIDELOOP
LEA DX,MESSPOSONCOL
MOV AH,9H
INT 21H
POP CX
INC SI
MOV DX,SI
ADD DL,30H
MOV AH,2H
INT 21H
LEA DX,MESSCOL
MOV AH,9H
INT 21H
MOV DL,POSCNT
ADD DL,30H
MOV AH,2H
INT 21H
LEA DX,CARRLBK
MOV AH,9H
INT 21H
MOV AH,0
MOV POSCNT,AH
LOOP OUTERLOOP
RET
OUR_PROG ENDP
CSEG ENDS
END OUR_PROG
2.2.2 Блок-схема программы
2.2.3 Листинг трансляции
Turbo Assembler Version 4.1 02/12/05 22:22:34 Page 1
prog.asm
1 0000 STACKSEG SEGMENT PARA PUBLIC 'STACK'
2 0000 40*(00) DB 64 DUP(0) ; Область стека
3 0040 STACKSEG ENDS
4
5
6
7 0000 DSEG SEGMENT PARA PUBLIC 'DATA'
8 0000 00 14 00 E2 00 MATRIX DB 0, 20, 0, -30, 0
9 0005 28 CE 3C 0A 00 DB 40, -50, 60, 10, 0
10 000A FF 14 00 05 2D DB -1, 20, 0, 5, 45
11 000F 29 00 FC 0B 0B DB 41, 0, -4, 11, 11
12 0014 FC 00 FB 0A 87 DB -4, 0, -5, 10, -121
13 0019 00 POSCNT DB 0
14 001A 0005 ROWLEN DW 5
15 001C 41 4D 4F 55 4E 54 20+ MESSPOSONCOL DB 'AMOUNT OF POSITIVE NUMBERS IN $'
16 4F 46 20 50 4F 53 49+
17 54 49 56 45 20 4E 55+
18 4D 42 45 52 53 20 49+
19 4E 20 24
20 003B 20 43 4F 4C 20 49 53+ MESSCOL DB ' COL IS :$'
21 20 3A 24
22 0045 0D 0A 24 CARRLBK DB 0DH,0AH,'$'
23 0048 DSEG ENDS
24 0000 CSEG SEGMENT PARA PUBLIC 'CODE'
25 ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG
26 0000 OUR_PROG PROC FAR
27
28 0000 1E PUSH DS
29 0001 2B C0 SUB AX,AX
30 0003 50 PUSH AX
31 0004 B8 0000s MOV AX,DSEG
32 0007 8E D8 MOV DS,AX
33 0009 BE 0000 MOV SI,0
34 000C 8B 0E 001Ar MOV CX,ROWLEN
35 0010 OUTERLOOP:
36 0010 51 PUSH CX
37 0011 BB 0000r LEA BX,MATRIX
38 0014 8B 0E 001Ar MOV CX,ROWLEN
39 0018 INSIDELOOP:
40 0018 80 B8 0000r 00 CMP MATRIX[BX+SI],0
41 001D 7E 04 JLE NEGZ
42 001F FE 06 0019r INC POSCNT
43 0023 NEGZ:
44 0023 03 1E 001Ar ADD BX,ROWLEN
45 0027 E2 EF LOOP INSIDELOOP
46 0029 BA 001Cr LEA DX,MESSPOSONCOL
47 002C B4 09 MOV AH,9H
48 002E CD 21 INT 21H
49 0030 59 POP CX
50 0031 46 INC SI
51 0032 8B D6 MOV DX,SI
52 0034 80 C2 30 ADD DL,30H
53 0037 B4 02 MOV AH,2H
54 0039 CD 21 INT 21H
55 003B BA 003Br LEA DX,MESSCOL
56 003E B4 09 MOV AH,9H
57 0040 CD 21 INT 21H
Turbo Assembler Version 4.1 02/12/05 22:22:34 Page 2
prog.asm
58 0042 8A 16 0019r MOV DL,POSCNT
59 0046 80 C2 30 ADD DL,30H
60 0049 B4 02 MOV AH,2H
61 004B CD 21 INT 21H
62 004D BA 0045r LEA DX,CARRLBK
63 0050 B4 09 MOV AH,9H
64 0052 CD 21 INT 21H
65 0054 B4 00 MOV AH,0
66 0056 88 26 0019r MOV POSCNT,AH
67 005A E2 B4 LOOP OUTERLOOP
68 005C CB RET
69 005D OUR_PROG ENDP
70 005D CSEG ENDS
71 END OUR_PROG
Turbo Assembler Version 4.1 02/12/05 22:22:34 Page 3
Symbol Table
Symbol Name Type Value
??DATE Text "02/12/05"
??FILENAME Text "prog "
??TIME Text "22:22:34"
??VERSION Number 040A
@CPU Text 0101H
@CURSEG Text CSEG
@FILENAME Text PROG
@WORDSIZE Text 2
CARRLBK Byte DSEG:0045
INSIDELOOP Near CSEG:0018
MATRIX Byte DSEG:0000
MESSCOL Byte DSEG:003B
MESSPOSONCOL Byte DSEG:001C
NEGZ Near CSEG:0023
OUR_PROG Far CSEG:0000
OUTERLOOP Near CSEG:0010
POSCNT Byte DSEG:0019
ROWLEN Word DSEG:001A
Groups & Segments Bit Size Align Combine Class
CSEG 16 005D Para Public CODE
DSEG 16 0048 Para Public DATA
STACKSEG 16 0040 Para Public STACK
Вывод: В ходе лабораторной работы приобрели навыки написания программ с условными и безусловными переходами и циклами.