Препод Мукасеева В. Н. 3-й семестр / Lab 5 / отчет по 5
.docМинистерство образования Российской Федерации
УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра технической кибернетики
Лабораторная работа № 5
Программирование операций ввода-вывода
Выполнил:
студент гр.
Проверила преподаватель:
Мукасеева В. Н.
Уфа 2005
Лабораторная работа № 5
Программирование операций ввода-вывода
1. ЦЕЛЬ РАБОТЫ
Целью работы является закрепление лекционного материала по командам прерывания на языке ассемблера и приобретение практических навыков использования этих команд в программах с операциями ввода-вывода.
2. ХОД РАБОТЫ
Создать двумерный массив 5х5 однобайтовых переменных, заполнить его положительными, отрицательными и нулевыми значениями. Найти первый максимальный элемент и указать его местоположение.
2.1 Задание 1
2.1.1 Исходный текст программы
STACKSEG SEGMENT PARA PUBLIC 'STACK'
DB 64 DUP(0)
STACKSEG ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
MATRIX Dw -12, -50, -40, -35, -12
Dw -41, 400, -620, -177, -10
Dw -50, 120, -120, -55, 400
Dw -24, -10, -40, 100, -55
Dw 400, -10, -50, 400, 12
ROWLEN DW 10
SHOWMAX DB 'Первый максимальный элемент находится в столбце $'
SHOWROW DB ' и в строке $'
SHOWEQU DB ' и равен: $'
MAXINDEXROW DW 0
MAXINDEXCOL DW 0
DELITEL DB 100
TEN DB 10
TWO DB 2
MAX DW 0
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 CX,5
LEA BX,MATRIX
MOV AX,MATRIX[BX]
MOV MAX,AX
OUTERLOOP:
PUSH CX
MOV CX,5
MOV SI,0
INSIDELOOP:
MOV AX,MATRIX[BX+SI]
CMP AX,MAX
JLE LESS
MOV MAX,AX
MOV MAXINDEXCOL,SI
MOV MAXINDEXROW,BX
LESS: ADD SI,2
LOOP INSIDELOOP
POP CX
ADD BX,ROWLEN
LOOP OUTERLOOP
LEA DX,SHOWMAX
MOV AH,9H
INT 21H
MOV AX,MAXINDEXCOL
DIV TWO
MOV DL,AL
ADD DL,31H
MOV AH,2H
INT 21H
LEA DX,SHOWROW
MOV AH,9H
INT 21H
MOV AX,0
MOV AX,MAXINDEXROW
DIV TEN
MOV DL,AL
ADD DL,31H
MOV AH,2H
INT 21H
LEA DX,SHOWEQU
MOV AH,9H
INT 21H
CMP MAX,0
JGE POSSUM
NEG MAX
MOV DL,'-'
MOV AH,2H
INT 21H
POSSUM:MOV AX,MAX
MOV CX,3
CYCLEOUT:
DIV DELITEL
MOV BL,AH
MOV DL,AL
ADD DL,30H
MOV AH,2H
INT 21H
MOV AX,0
MOV AL,DELITEL
DIV TEN
MOV DELITEL,AL
MOV AL,BL
LOOP CYCLEOUT
RET
OUR_PROG ENDP
CSEG ENDS
END OUR_PROG
2.1.2 Блок-схема программы
да НЕТ
2.1.3 Листинг трансляции
Turbo Assembler Version 4.1 09/12/05 21:18:18 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 0000 DSEG SEGMENT PARA PUBLIC 'DATA'
6 0000 FFF4 FFCE FFD8 FFDD + MATRIX Dw -12, -50, -40, -35, -12
7 FFF4
8 000A FFD7 0190 FD94 FF4F + Dw -41, 400, -620, -177, -10
9 FFF6
10 0014 FFCE 0078 FF88 FFC9 + Dw -50, 120, -120, -55, 400
11 0190
12 001E FFE8 FFF6 FFD8 0064 + Dw -24, -10, -40, 100, -55
13 FFC9
14 0028 0190 FFF6 FFCE 0190 + Dw 400, -10, -50, 400, 12
15 000C
16 0032 000A ROWLEN DW 10
17 0034 8F A5 E0 A2 EB A9 20+ SHOWMAX DB 'ЏҐаўл© ¬ ЄбЁ¬ «мл© н«Ґ¬Ґв 室Ёвбп ў бв®«ЎжҐ $'
18 AC A0 AA E1 A8 AC A0+
19 AB EC AD EB A9 20 ED+
20 AB A5 AC A5 AD E2 20+
21 AD A0 E5 AE A4 A8 E2+
22 E1 EF 20 A2 20 E1 E2+
23 AE AB A1 E6 A5 20 24
24 0065 20 A8 20 A2 20 E1 E2+ SHOWROW DB ' Ё ў бва®ЄҐ $'
25 E0 AE AA A5 20 24
26 0072 20 A8 20 E0 A0 A2 A5+ SHOWEQU DB ' Ё а ўҐ: $'
27 AD 3A 20 24
28 007D 0000 MAXINDEXROW DW 0
29 007F 0000 MAXINDEXCOL DW 0
30 0081 64 DELITEL DB 100
31 0082 0A TEN DB 10
32 0083 02 TWO DB 2
33 0084 0000 MAX DW 0
34 0086 DSEG ENDS
35
36
37 0000 CSEG SEGMENT PARA PUBLIC 'CODE'
38 ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG
39 0000 OUR_PROG PROC FAR
40
41 0000 1E PUSH DS
42 0001 2B C0 SUB AX,AX
43 0003 50 PUSH AX
44 0004 B8 0000s MOV AX,DSEG
45 0007 8E D8 MOV DS,AX
46 0009 B9 0005 MOV CX,5
47 000C BB 0000r LEA BX,MATRIX
48 000F 8B 87 0000r MOV AX,MATRIX[BX]
49 0013 A3 0084r MOV MAX,AX
50 0016 OUTERLOOP:
51 0016 51 PUSH CX
52 0017 B9 0005 MOV CX,5
53 001A BE 0000 MOV SI,0
54 001D INSIDELOOP:
55 001D 8B 80 0000r MOV AX,MATRIX[BX+SI]
56 0021 3B 06 0084r CMP AX,MAX
57 0025 7E 0B JLE LESS
Turbo Assembler Version 4.1 09/12/05 21:18:18 Page 2
prog.asm
58 0027 A3 0084r MOV MAX,AX
59 002A 89 36 007Fr MOV MAXINDEXCOL,SI
60 002E 89 1E 007Dr MOV MAXINDEXROW,BX
61 0032 83 C6 02 LESS: ADD SI,2
62 0035 E2 E6 LOOP INSIDELOOP
63 0037 59 POP CX
64 0038 03 1E 0032r ADD BX,ROWLEN
65 003C E2 D8 LOOP OUTERLOOP
66 003E BA 0034r LEA DX,SHOWMAX
67 0041 B4 09 MOV AH,9H
68 0043 CD 21 INT 21H
69 0045 A1 007Fr MOV AX,MAXINDEXCOL
70 0048 F6 36 0083r DIV TWO
71 004C 8A D0 MOV DL,AL
72 004E 80 C2 31 ADD DL,31H
73 0051 B4 02 MOV AH,2H
74 0053 CD 21 INT 21H
75 0055 BA 0065r LEA DX,SHOWROW
76 0058 B4 09 MOV AH,9H
77 005A CD 21 INT 21H
78 005C B8 0000 MOV AX,0
79 005F A1 007Dr MOV AX,MAXINDEXROW
80 0062 F6 36 0082r DIV TEN
81 0066 8A D0 MOV DL,AL
82 0068 80 C2 31 ADD DL,31H
83 006B B4 02 MOV AH,2H
84 006D CD 21 INT 21H
85 006F BA 0072r LEA DX,SHOWEQU
86 0072 B4 09 MOV AH,9H
87 0074 CD 21 INT 21H
88 0076 83 3E 0084r 00 CMP MAX,0
89 007B 7D 0A JGE POSSUM
90 007D F7 1E 0084r NEG MAX
91 0081 B2 2D MOV DL,'-'
92 0083 B4 02 MOV AH,2H
93 0085 CD 21 INT 21H
94 0087 A1 0084r POSSUM:MOV AX,MAX
95 008A B9 0003 MOV CX,3
96 008D CYCLEOUT:
97 008D F6 36 0081r DIV DELITEL
98 0091 8A DC MOV BL,AH
99 0093 8A D0 MOV DL,AL
100 0095 80 C2 30 ADD DL,30H
101 0098 B4 02 MOV AH,2H
102 009A CD 21 INT 21H
103 009C B8 0000 MOV AX,0
104 009F A0 0081r MOV AL,DELITEL
105 00A2 F6 36 0082r DIV TEN
106 00A6 A2 0081r MOV DELITEL,AL
107 00A9 8A C3 MOV AL,BL
108 00AB E2 E0 LOOP CYCLEOUT
109 00AD CB RET
110 00AE OUR_PROG ENDP
111 00AE CSEG ENDS
112 END OUR_PROG
Turbo Assembler Version 4.1 09/12/05 21:18:18 Page 3
Symbol Table
Symbol Name Type Value
??DATE Text "09/12/05"
??FILENAME Text "prog "
??TIME Text "21:18:18"
??VERSION Number 040A
@CPU Text 0101H
@CURSEG Text CSEG
@FILENAME Text PROG
@WORDSIZE Text 2
CYCLEOUT Near CSEG:008D
DELITEL Byte DSEG:0081
INSIDELOOP Near CSEG:001D
LESS Near CSEG:0032
MATRIX Word DSEG:0000
MAX Word DSEG:0084
MAXINDEXCOL Word DSEG:007F
MAXINDEXROW Word DSEG:007D
OUR_PROG Far CSEG:0000
OUTERLOOP Near CSEG:0016
POSSUM Near CSEG:0087
ROWLEN Word DSEG:0032
SHOWEQU Byte DSEG:0072
SHOWMAX Byte DSEG:0034
SHOWROW Byte DSEG:0065
TEN Byte DSEG:0082
TWO Byte DSEG:0083
Groups & Segments Bit Size Align Combine Class
CSEG 16 00AE Para Public CODE
DSEG 16 0086 Para Public DATA
STACKSEG 16 0040 Para Public STACK
Вывод: В ходе лабораторной работы приобрели навыки написания программ с использованием прерываний в операциях ввода/ввода.