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

Страницы работы

Содержание работы

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра автоматики и вычислительной техники

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 4

Дисциплина: системное программное обеспечение

Тема: изучение принципов обработки аппаратных прерываний

Выполнил ст. группы 4081/1:                                                                                            

Проверила                                                                                                                 

Санкт-Петербург 2008

  1. Цель работы

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

  1. Программа работы

Часто используемые процедуры, такие как замена и восстановление векторов прерываний в таблице векторов прерываний (ВП), вывод строки на экран, получение системного времени, оформлены как макрокоманды и помещены во включаемый файл 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.  Изменение программы так, чтобы не происходила передача управления

Похожие материалы

Информация о работе