Министерство образования Российской Федерации
УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра технической кибернетики
Лабораторная работа № 3
Программирование ветвлений и циклов
Выполнили:
студенты гр.
Проверил преподаватель:
Мукасеева В. Н.
Уфа 2005
Лабораторная работа № 3 Программирование ветвлений и циклов
1. Цель работы
Целью работы является закрепление знаний по командам условного и безусловного переходов и циклов на примере программ на языке ассемблера, а также приобретение навыков написания программ с циклами.
2. ХОД РАБОТЫ
1)Создать двумерный массив 5х5 однобайтовых переменных, заполнить его положительными, отрицательными и нулевыми значениями. Подсчитать количество положительных элементов на главной и побочной диагонали.
2)Подсчитать количество положительных элементов в столбцах двумерного массива, созданного в прошлой задаче.
2.1 Задание 1
2.1.1 Исходный текст программы
TITLE EX_PROG
PAGE ,132
STACKSEG SEGMENT PARA PUBLIC 'STACK'
DB 64 DUP(0)
STACKSEG ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
matrix DB 1, 20H,30H, 40H, 0H
DB 12H, -3,0CH, -5, 13H
DB 1, 2H, 4H, 8H, 0FH
DB 11H, 41H, 0CDH, 11H, 3H
DB 0, 0AH, 0DDH, 12H, 0
ROWLEN DB 5
POSCNTONMAIN DB 0
POSCNTONSEC DB 0
MESSONM DB 'AMOUNT OF POSITIVE NUMBERS ON MAIN DIAGONAL:$'
MESSONS DB 0DH,0AH,'AMOUNT OF POSITIVE NUMBERS ON SECONDARY DIAGONAL:$'
DSEG ENDS
SUBTTL ОСНОВНАЯ ПРОГРАММА
PAGE
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
LEA BX,MATRIX
MOV CL,ROWLEN
MOV SI,0
MOV AX,0
CYCLEMD:
MOV AL, MATRIX[BX+SI]
CMP MATRIX[BX+SI],0
JLE NEGZ
INC POSCNTONMAIN
NEGZ:
ADD BL,ROWLEN
INC SI
LOOP CYCLEMD
MOV SI,0
MOV AX,0
MOV AL,ROWLEN
MOV SI,AX
DEC SI
MOV CL,ROWLEN
MOV AX,0
LEA BX,MATRIX
CYCLESD:
MOV AL,MATRIX[BX+SI]
CMP MATRIX[BX+SI],0
JLE NEGZS
INC POSCNTONSEC
NEGZS:
ADD BL,ROWLEN
DEC SI
LOOP CYCLESD
LEA DX,MESSONM
MOV AH,9H
INT 21H
MOV DL,POSCNTONMAIN
ADD DL,30H
MOV AH,2H
INT 21H
LEA DX,MESSONS
MOV AH,9H
INT 21H
MOV DL,POSCNTONSEC
ADD DL,30H
MOV AH,2H
INT 21H
RET
OUR_PROG ENDP
CSEG ENDS
END OUR_PROG
2.1.2 Блок-схема программы
2.1.3 Листинг трансляции
Turbo Assembler Version 4.1 02/12/05 15:04:34 Page 1
prog.asm
EX_PROG
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 01 20 30 40 00 matrix DB 1, 20H,30H, 40H, 0H
9 0005 12 FD 0C FB 13 DB 12H, -3,0CH, -5, 13H
10 000A 01 02 04 08 0F DB 1, 2H, 4H, 8H, 0FH
11 000F 11 41 CD 11 03 DB 11H, 41H, 0CDH, 11H, 3H
12 0014 00 0A DD 12 00 DB 0, 0AH, 0DDH, 12H, 0
13 0019 05 ROWLEN DB 5
14 001A 00 POSCNTONMAIN DB 0
15 001B 00 POSCNTONSEC DB 0
16 001C 41 4D 4F 55 4E 54 20+ MESSONM DB 'AMOUNT OF POSITIVE NUMBERS ON MAIN DIAGONAL:$'
17 4F 46 20 50 4F 53 49+
18 54 49 56 45 20 4E 55+
19 4D 42 45 52 53 20 4F+
20 4E 20 4D 41 49 4E 20+
21 44 49 41 47 4F 4E 41+
22 4C 3A 24
23 0049 0D 0A 41 4D 4F 55 4E+ MESSONS DB 0DH,0AH,'AMOUNT OF POSITIVE NUMBERS ON SECONDARY DIAGONAL:$'
24 54 20 4F 46 20 50 4F+
25 53 49 54 49 56 45 20+
26 4E 55 4D 42 45 52 53+
27 20 4F 4E 20 53 45 43+
28 4F 4E 44 41 52 59 20+
29 44 49 41 47 4F 4E 41+
30 4C 3A 24
31 007D DSEG ENDS
32
33
34Turbo Assembler Version 4.1 02/12/05 15:04:34 Page 2
prog.asm
EX_PROG
ОСНОВНАЯ ПРОГРАММА
35 0000 CSEG SEGMENT PARA PUBLIC 'CODE'
36 ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG
37 0000 OUR_PROG PROC FAR
38
39 0000 1E PUSH DS
40 0001 2B C0 SUB AX,AX
41 0003 50 PUSH AX
42 0004 B8 0000s MOV AX,DSEG
43 0007 8E D8 MOV DS,AX
44
45
46 0009 BE 0000 MOV SI,0
47 000C BB 0000r LEA BX,MATRIX
48 000F 8A 0E 0019r MOV CL,ROWLEN
49 0013 BE 0000 MOV SI,0
50 0016 B8 0000 MOV AX,0
51 0019 CYCLEMD:
52 0019 8A 80 0000r MOV AL, MATRIX[BX+SI]
53 001D 80 B8 0000r 00 CMP MATRIX[BX+SI],0
54
55 0022 7E 04 JLE NEGZ
56 0024 FE 06 001Ar INC POSCNTONMAIN
57 0028 NEGZ:
58 0028 02 1E 0019r ADD BL,ROWLEN
59 002C 46 INC SI
60 002D E2 EA LOOP CYCLEMD
61 002F BE 0000 MOV SI,0
62 0032 B8 0000 MOV AX,0
63 0035 A0 0019r MOV AL,ROWLEN
64 0038 8B F0 MOV SI,AX
65 003A 4E DEC SI
66 003B 8A 0E 0019r MOV CL,ROWLEN
67 003F B8 0000 MOV AX,0
68 0042 BB 0000r LEA BX,MATRIX
69 0045 CYCLESD:
70 0045 8A 80 0000r MOV AL,MATRIX[BX+SI]
71 0049 80 B8 0000r 00 CMP MATRIX[BX+SI],0
72 004E 7E 04 JLE NEGZS
73 0050 FE 06 001Br INC POSCNTONSEC
74 0054 NEGZS:
75 0054 02 1E 0019r ADD BL,ROWLEN
76 0058 4E DEC SI
77 0059 E2 EA LOOP CYCLESD
78 005B BA 001Cr LEA DX,MESSONM
79 005E B4 09 MOV AH,9H
80 0060 CD 21 INT 21H
81 0062 8A 16 001Ar MOV DL,POSCNTONMAIN
82 0066 80 C2 30 ADD DL,30H
83 0069 B4 02 MOV AH,2H
84 006B CD 21 INT 21H
85
86 006D BA 0049r LEA DX,MESSONS
87 0070 B4 09 MOV AH,9H
88 0072 CD 21 INT 21H
89 0074 8A 16 001Br MOV DL,POSCNTONSEC
90 0078 80 C2 30 ADD DL,30H
91 007B B4 02 MOV AH,2H
Turbo Assembler Version 4.1 02/12/05 15:04:34 Page 3
prog.asm
EX_PROG
ОСНОВНАЯ ПРОГРАММА
92 007D CD 21 INT 21H
93
94 007F CB RET
95 0080 OUR_PROG ENDP
96 0080 CSEG ENDS
97 END OUR_PROG
Turbo Assembler Version 4.1 02/12/05 15:04:34 Page 4
Symbol Table
EX_PROG
Symbol Name Type Value
??DATE Text "02/12/05"
??FILENAME Text "prog "
??TIME Text "15:04:34"
??VERSION Number 040A
@CPU Text 0101H
@CURSEG Text CSEG
@FILENAME Text PROG
@WORDSIZE Text 2
CYCLEMD Near CSEG:0019
CYCLESD Near CSEG:0045
MATRIX Byte DSEG:0000
MESSONM Byte DSEG:001C
MESSONS Byte DSEG:0049
NEGZ Near CSEG:0028
NEGZS Near CSEG:0054
OUR_PROG Far CSEG:0000
POSCNTONMAIN Byte DSEG:001A
POSCNTONSEC Byte DSEG:001B
ROWLEN Byte DSEG:0019
Groups & Segments Bit Size Align Combine Class
CSEG 16 0080 Para Public CODE
DSEG 16 007D Para Public DATA
STACKSEG 16 0040 Para Public STACK