Комплект лабораторных 1-6 / Лаба 5
.docМинистерство образования Российской Федерации
Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»
Кафедра МОЭВМ
Отчет по лабораторной работе №5
«Прерывания ДОС и БИОС. Функции ДОС и БИОС»
Вариант 14
Выполнили:
студенты гр. 3352
Воронин С.
Сергеев М.
Проверил:
Улитовский В.А.
Санкт-Петербург
2005 г.
Текст задания
Составить программу, вызывающую один или несколько обработчиков
прерываний ДОС или БИОС. Программа должна содержать средства,
подтверждающие исполнение прерывания, например, с использованием
других обработчиков прерываний.
Постановка индивидуального задания.
Составить программу, читающую содержимое файла в память. Для этого используются функции: 3Dh - открытие файла; 3Fh- чтение файла; 3Eh – закрытие файла обработчика прерывания 21h.
Текст программы
; Стек программы
AStack SEGMENT STACK
DW 12 DUP(?) ; Отводится 12 слов памяти
AStack ENDS
; Данные программы
DATA SEGMENT
Handle dw 0 ;резерв 2 байта для нашей переменной
Mess_ok db 'Файл загружен в память! $'
Mess_error db 'Не удалось открыть (найти) файл!$'
File_name db 'c:\test.txt',0
Buffer equ $ ;ссылка на область памяти, куда будет помещено сообщение из файла
DATA ENDS
; Код программы
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:AStack
; Головная процедура
Main PROC FAR
push DS ;\ Сохранение адреса начала PSP в стеке
sub AX,AX ; > для последующего восстановления по
push AX ;/ команде ret, завершающей процедуру.
mov AX,DATA ; Загрузка сегментного
mov DS,AX ; регистра данных.
mov ax,3D00h ;Открываем файл для чтения
mov dx,offset File_name ;Имя открываемого файла в DX
int 21h
jc Error_file ;если произошла ошибка - то на метку Error_file
mov Handle,ax ;запомним номер файла в переменной Handle
mov bx,ax
mov ah,3Fh ;Функция чтения файла
mov cx,0FDE8h ;Будем читать в память 0FDE8h = 65000 байт
mov dx,offset Buffer ;DX указывает на буфер для считывания
int 21h
mov ah,3Eh ;Закрываем файл
mov bx,Handle
int 21h
mov dx,offset Mess_ok
Out_prog:
mov ah,9
int 21h
ret
Error_file:
mov dx,offset Mess_error
jmp Out_prog
Main ENDP
CODE ENDS
END Main
Протокол пошаговой отладки
Отладчик |
Программа |
Исходные данные |
Изменяемые данные |
|
до |
после |
|||
F1 |
PUSH DS |
SP IP STACK (+0) |
0018 0000 0000 |
0016 0001 1E5B |
F1 |
SUB AX,AX |
IP |
0001 |
0003 |
F1 |
PUSH AX |
SP IP STACK (+0) STACK (+2) |
0016 0003 1E5B 0000 |
0014 0004 0000 1E5B |
F1 |
MOV AX,1E6D |
IP AX |
0004 0000 |
0007 1E6D |
F1 |
MOV DS,AX |
DS IP |
1E5B 0007 |
1E6D 0009 |
F1 |
MOV AX,3D00 |
AX IP |
1E6D 0009 |
3D00 000C |
F1 |
MOV DX,003C |
IP |
000C |
000F |
F2 |
INT 21 |
AX DX IP CF |
3D00 001B 000F 0 |
0002 003C 0011 1 |
F1 |
JC 0032 |
IP |
001 |
0032 |
F1 |
MOV DX,001B |
DX IP |
003C 0032 |
001B 0035 |
F1 |
JMP 002D |
IP |
0035 |
002D |
F1 |
MOV AH,09 |
AX IP |
0002 002D |
0902 002F |
F2 |
INT 21 |
AX IP |
0902 002F |
0924 0031 |
F1 |
RET Far |
SP CS IP |
0014 1E72 0031 |
0018 1E5B 0000 |
F2 |
INT 20 |
|
|
|
Результат тестирования программы
Программа корректно работает при всех возможных вариантах исходных данных.