Программирование операций ввода-вывода
Автор: Nikita Bobrovskii • Октябрь 5, 2022 • Лабораторная работа • 1,514 Слов (7 Страниц) • 139 Просмотры
Министерство науки и высшего образования РФ
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«Ярославский государственный технический университет»
Кафедра «Информационный системы и технологии»
Отчет защищен
с оценкой ________
- Преподаватель
__________ Ю.В. Царёв
«___» ____________ 2022
Программирование операций ввода-вывода
Отчет о лабораторной работе по курсу «Машино-зависимые языки программирования»
ЯГТУ 09.03.04-003 ЛР
Отчет выполнил
студент гр. ЦПИ-11
[pic 1] Н.А. Бобровский
«19» мая 2022
2022
Цель работы: закрепить лекционный материал по командам прерывания на языке ассемблера и приобрести практические навыки использования этих команд в программах с операциями ввода-вывода.
Вариант 3 (Массив 5 на 5). Найти первый (последний) максимальный (минимальный) элемент двухмерного массива и указать его местоположение:
- элементы массива однобайтовые
- элементы массива двухбайтовые
a)
[pic 2]
TITLE EX_PROG
STACK SEGMENT PARA STACK 'STACK'
DB 64 DUP('STACK')
STACK ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
LEN = 25
MAS DB LEN DUP(?)
MAX_EL DB -128
POSITION DW 0
MESS_MAX DB 0DH,0AH,"Maximum array element: $"
MESS_POS DB 0DH,0AH,"Element position: (X,Y)$"
MESS_ENTER DB "Enter (X,Y) element: $"
MESS_ERROR DB 0DH,0AH, "Error... ", 0DH,0AH,"$"
STRING DB 25, 26 DUP (?)
N DW ?
ARRAY DB 4 DUP(?)
DSEG ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG, DS:DSEG, SS:STACK
PROG:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX
MOV BP, 0
MOV CX, LEN
XOR SI, SI
START:
ERROR_EXIT:
CALL ENTER
MOV DI, 0
LEA DX, STRING
MOV AH, 0AH
INT 21H
MOV DL, 0AH
MOV AH, 2
INT 21H
MOV DL, 0DH
MOV AH, 2
INT 21H
LEA SI, STRING+2
CMP [SI], 13
JE ERROR
CMP BYTE PTR [SI], "-"
JNE METKA
MOV DI, 1
INC SI
METKA:
XOR AX, AX
MOV BL, 10
PROW_NUM:
MOV DL, [SI]
CMP DL, 13
JE NUM_1
CMP DL, '0'
JB ERROR
CMP DL, '9'
JA ERROR
SUB DL, '0'
MUL BL
ADD AL, DL
INC SI
JMP PROW_NUM
NUM_1:
CMP DI, 1
JNE END_NUM
NEG AL
END_NUM:
LEA SI, MAS
ADD SI, BP
MOV [SI], AL
INC BP
LOOP START
XOR SI, SI
MOV CX, LEN
CYCLE:
MOV AL, MAX_EL
CMP MAS[SI], AL
JG MAX_PROV
JMP NEXT
MAX_PROV:
MOV AL, [SI]
MOV MAX_EL, AL
NEXT:
INC SI
LOOP CYCLE
MOV CX, LEN
XOR SI, SI
MOV BL, [SI]
FIND_POS:
MOV AL, [SI]
CMP AL, MAX_EL
JE WRITE_POS
JMP NEXT_POS
WRITE_POS:
MOV POSITION, SI
JMP RESULT
NEXT_POS:
INC SI
LOOP FIND_POS
XOR DH, DH
MOV CX, LEN
XOR SI, SI
MOV BL, [SI]
RESULT:
LEA DX, MESS_MAX
MOV AH, 09H
INT 21H
MOV AL, MAX_EL
MOV N, AX
CALL METKA_2
MOV BL, 5
MOV AX, POSITION
DIV BL
INC AL
ADD AL, '0'
MOV MESS_POS+21, AL
INC AH
ADD AH, '0'
MOV MESS_POS+23, AH
LEA DX, MESS_POS
MOV AH, 09H
INT 21H
JMP OUT
METKA_2:
MOV SI, 3
MOV CX, 3
MOV BL, 10
MOV AX, N
CMP N, 0
JGE ARRAY_PROV
NEG AX
MOV ARRAY, '-'
ARRAY_PROV:
MOV AH, 0
DIV BL
ADD AH, '0'
MOV ARRAY+SI, AH
DEC SI
CMP CX, 1
JE XYZ
LOOP ARRAY_PROV
...