Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab1-7l.doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
188.43 Кб
Скачать

Рекомендации по выполнению работы

В процессе перехвата прерываний часто бывает необходимо сохранить старый вектор прерывания для последующего его восстановления во время выхода из программы.

Во время обработки системных прерываний (08h , 09h) необходимо вызывать старый обработчик этого прерывания, если вы не выполняете полностью всех его функций.

Также необходимо сохранить регистры, с которыми вы работаете, и восстановить их значения перед выходом из процедуры обработчика.

ПРИЛОЖЕНИЕ 1

Теоретическая справка

Работа с прерываниями

Первый килобайт памяти содержит таблицу векторов прерываний. Вектор прерывания это адрес обработчика данного прерывания занимающий два машинных слова (четыре байта), в которых записаны его сегмент и смещение.

Вектор прерывания можно получить и установить при помощи функций 35h и 25h.

Получение вектора прерывания:

AH=35

AL=№ прерывания

В регистровой паре ES:BX возвращается вектор заданного прерывания.

Установка вектора прерывания:

AH=25h

AL=№ прерывания

Устанавливается вектор прерывания, находящийся в регистровой паре DS:DX, возвращается вектор заданного прерывания.

Написание резидентов

Завершение программы прерыванием 27h оставляет ее резидентной в памяти. CS должен указывать на начало PSP для того, чтобы эта функция работала правильно. В программах COM, CS сразу устанавливается соответствующим образом, поэтому надо просто завершить программу прерыванием 27h. В программах EXE , CS первоначально указывает на первый байт, следующий за PSP (т.е. 100h). При нормальном завершении EXE программы последняя инструкция RET выталкивает из стека первые положенные туда значения:

PUSH DX

MOV AX,0

PUSH AX.

Поскольку DS первоначально указывает на начало PSP, то при получении этих значений из стека счетчик команд указывает на смещение 0 в PSP, где при инициализации записывается инструкция INT 20h. Поэтому INT 20h выполняется, а это cтандартная функция для завершения программы и передачи управления в DOS. Чтобы заставить прерывание 27h работать в EXE программе надо поместить 27h во второй байт PSP (первый содержит машинный код инструкции INT), а затем завершить программу обычным RET. Для обоих типов файлов прежде чем выполнить прерывание 27h, DX должен содержать смещение конца программы, отсчитываемое от начала PSP.

Список использованной литературы.

  1. Фролов А. В., Фролов Г. В.. MS-DOS для программиста (ч. 1). -М: Диалог - МИФИ, 1997.

  2. Фролов А. В., Фролов Г. В.. MS-DOS для программиста (ч. 2). -М: Диалог - МИФИ, 1997.

  3. Турбо Паскаль 7.0. (Под ред. А. Колесникова, В. Гинзбурга). -Киев: BHV, 1996.

  4. Березин Б. И., Березин. С. Б. Начальный курс С и С++. -М: Диалог - МИФИ, 1996.

  5. Пильщиков В. Н. Программирование на языке Ассемблера IBM PC. -М: Диалог - МИФИ, 1996.

  6. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT. –М: Финансы и статистика, 1991.

  7. Нортон П. Программно-аппаратная организация IBM PC. -М: Радио и связь, 1992.

  8. Нортон П. Персональный компьютер фирмы IBM и операционная система MS-DOS. -М: Радио и связь, 1992.

  9. Нортон П., Уилтон Р. IBM PC и PS/2. Руководство по программированию. -М: Радио и связь, 1994.

  10. Гук М. Аппаратные средства IBM PC. Энциклопедия. –СПб: Питер, 2000.

1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]