Санкт-Петербургский государственный политехнический университет
Факультет технической кибернетики
Кафедра автоматики и вычислительной техники
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 4
Дисциплина: системное программное обеспечение
Тема: изучение принципов обработки аппаратных прерываний
Выполнил ст. группы 4081/1:
Проверила
Санкт-Петербург 2008
Получение знаний о логике взаимодействия процессора и контроллера прерываний, способах маскирования аппаратных прерываний, системе приоритетов, приобретение навыков использования стандартных средств для обслуживания аппаратных прерываний, умений создавать собственные и дополнять уже существующие программы обработки прерываний.
Часто используемые процедуры, такие как замена и восстановление векторов прерываний в таблице векторов прерываний (ВП), вывод строки на экран, получение системного времени, оформлены как макрокоманды и помещены во включаемый файл mac.inc. Его текст приведен ниже.
; функции dos
dos macro
push ax
mov ah, #1
int 021
pop ax
#em
; вывод на экран
print macro
push dx, cx, bx
mov bx, 1
lea dx, #1
mov cx, #2
dos 040
pop bx, cx, dx
#em
;замена стандартного ВП
chv macro
push ax, bx, dx, es
mov al, #2
dos 035 ;получение вектора
mov w #1, bx
mov w #1+2, es ;сохранение его
lea dx, #3
mov al, #2
dos 025 ;установка вектора
pop es, dx, bx, ax
#em
; восстановление стандартного ВП
restv macro
push ax, dx
lds dx, #2
mov al, #1
dos 025 ;установка вектора
mov ds, cs
pop dx, ax
#em
; замена ВП с запретом внешний прерываний
schv macro
push ax, dx
cli ;сброс флага разрешения прерывания
lea ax, #3
mov dx, cs
mov ds, 0
xchg w [#2*4], ax
xchg w [#2*4+2], dx
mov ds, cs
mov w #1, ax
mov w #1+2, dx ;сохранение ВП
sti ;установка флага разрешения прерыв.
pop dx, ax
#em
; восстановление ВП с запретом внеш.прер.
srestv macro
push ax, dx
cli ;сброс флага разрешения прерывания
mov ax, w #2
mov dx, w #2+2
mov ds, 0
mov w [#1*4], ax
mov w [#1*4+2], dx
mov ds, cs
sti ;установка флага разрешения прерыв.
pop dx, ax
#em
; получение системного времени
gettime macro
push ax, cx, dx
mov ah, 2ch
int 21h ;получение сист. времени
mov #1, ch ;сохранение часов
mov #2, cl ;минут
mov #3, dh ;секунд
pop dx, cx, ax
#em
2.1. Перехватить прерывание от таймера int 8h, предусмотрев в программе обработки передачу управления исходному обработчику. Для иллюстрации результата вывести символ “*” в левый верхний угол экрана прямым отображением в видеопамять.
Out1.8
include mac.inc
jmp start
old_v dd ? ;двойное слово для хранения значения вектора прерывания
char db '*'
start:
chv old_v, 08, i08_hnd ;замена ВП системного таймера
mov ah, 0
int 016 ;ожидание прерывания от клавиатуры
restv 08, old_v ;восстановление ВП системного таймера
mov ah, 04c
int 021 ;завершение выполнения программы
i08_hnd:
push ax, ds, es
mov ds, cs ;установка доступа к данным процедуры
mov es, 0b800 ;указатель на видеобуфер
mov al, char
es mov [0], al ;вывод в угол экрана символа “*”
pop es, ds, ax
cs jmp old_v ;передача управления исходному обработчику
Осуществлен перехват прерывания 8h, в программе обработки управление передано исходному обработчику. Результат работы – вывод «*» в верхнем левом углу экрана и завершение программы.
2.2. Изменение программы так, чтобы не происходила передача управления
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.