Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
01.05.2014
Размер:
78.85 Кб
Скачать

Министерство образования Российской Федерации

Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»

Кафедра МОЭВМ

Отчет по лабораторной работе №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

Результат тестирования программы

Программа корректно работает при всех возможных вариантах исходных данных.

Соседние файлы в папке Комплект лабораторных 1-6