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

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

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

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

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

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

ОТЧЕТ

о лабораторной работе №6

«Изучение принципов обработки аппаратных прерываний»        

                                         СПО                            _____________

                                       Работу выполнил студент    4081/2   

группа           Ф.И.О.

Преподаватель      

подпись           Ф.И.О.

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

2007г.

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

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

2. Выполнение программы работы.

2.1. Перехватить прерывание от таймера int 8h, предусмотрев в программе обработки передачу управления исходному обработчику. Для иллюстрации результата вывести символ “*” в центр экрана прямым отображением в видеопамять.

Для вывода символа на экран использовался способ вывода через видеопамять, т.к. он является наиболее быстродействующим. Используется видеобуфер, с адреса B800h:0000h по адрес B800h:FFFFh. Вывод одного символа на экран – 2 байта в видеобуфере: один – сам символ, второй - цвет фона и текста. Расположение символа в видеобуфере – место на экране.

Будем выводить символ розового цвета на синем фоне, расположение - 7d0h.

prog1.asm

sseg SEGMENT STACK                 ; сегмент стека

db 64 dup (?)

sseg ENDS

dseg SEGMENT PARA PUBLIC 'DATA'

adr8i:

ip8 dw 0h         ; вектор обработчика

cs8 dw 0h  

msg db '*$'

dseg ENDS

cseg SEGMENT

main proc FAR

; связь между регистром сегмента и сегментом программы

ASSUME      cs:cseg, ds:dseg, ss:sseg

work: mov ax, dseg                  ; инициализация сегмента данных dseg

mov ds, ax

; установка вектора прерывания int8

mov ax,3508h                  ; получение адреса обработчика (вектор прерывания)

int 21h

mov ip8, bx       ; сохранение указателей на программу обработки

mov ax, es

mov cs8, ax

push ds

mov dx, offset myint8         ; получение адреса обработчика

mov ax, seg myint8     

mov ds, ax       

mov ah, 25h                   ; установка вектора прерывания

mov al, 8h       

int 21h                

pop ds

mov ax,0h                    

int 16h

push ds

mov dx, ip8

mov ax, cs8

mov ds, ax

mov ah, 25h

mov al, 8h

int 21h

pop ds

mov ah,4ch                    ; завершение работы программы

int 21h

ret

main  ENDP

myint8 proc FAR                    ; обработчик прерывания

push ax                       ; сохранение контекста

push bx

push es

push ds

push di

mov ax, dseg

mov ds,ax

mov ax,0b800h                 ; цветной дисплей

mov es,ax

lea bx, msg

mov di,7d0h                   ; место отображения сообщения

m1:

mov al,[bx]

cmp al,'$'

je m_ex

mov es:[di],al

inc di

inc bx

mov es:[di],word ptr 15h      ; атрибуты вывода сообщения

inc di

jmp m1

m_ex:

pop di                       

pop ds

pop es

pop bx

pop ax

mov ax, dseg                 

mov es, ax

jmp dword ptr es:adr8i        ; переход к стандартному обработчику

myint8 ENDP

cseg ENDS

END work

Результаты работы программы:

В центре экрана мы видим символ “*” розового цвета на синем фоне, для окончания работы программы следует нажать любую клавишу.

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

В данной программе следует предусмотреть снятие заявки (иначе повторный вызов прерывания будет невозможен).

IСR – регистр команд прерываний и слово управления операцией, служат для программирования контроллера и задания различных режимов прерываний, доступен через порт 20h/A0h.

prog2.asm

sseg SEGMENT STACK                 ; сегмент стека

db 64 dup (?)

sseg ENDS

dseg SEGMENT PARA PUBLIC 'DATA'

adr8i:

ip8 dw 0h                     ; вектор обработчика

cs8 dw 0h  

msg db '*$'

dseg ENDS

cseg SEGMENT

main proc FAR

; связь между регистром сегмента и сегментом программы

ASSUME      cs:cseg, ds:dseg, ss:sseg

work: mov ax, dseg                  ; инициализация сегмента данных dseg

mov ds, ax

; установка вектора прерывания int8

mov ax,3508h                  ; получение адреса обработчика (вектор прерывания)

int 21h

mov ip8, bx       ; сохранение указателей на программу обработки

mov ax, es

mov cs8, ax

push ds

mov dx, offset myint8         ; получение адреса обработчика

mov ax, seg myint8     

mov ds, ax       

mov ah, 25h                   ; установка вектора прерывания

mov al, 8h       

int 21h                

pop ds

mov ax,0h                    

int 16h

push ds

mov dx, ip8

mov ax, cs8

mov ds, ax

mov ah, 25h

mov al, 8h

int 21h

pop ds

mov ah,4ch                    ; завершение работы программы

int 21h

main  ENDP

myint8 proc FAR                    ; обработчик прерывания

push ax                       ; сохранение контекста

push bx

push es

push ds

push di

mov ax, dseg

mov ds,ax

mov ax,0b800h                 ; цветной дисплей

mov es,ax

lea bx, msg

mov di,7d0h                   ; место отображения сообщения

m1:

mov al,[bx]

cmp al,'$'

je m_ex

mov es:[di],al

inc di

inc bx

mov es:[di],word ptr 15h      ; атрибуты вывода сообщения

inc di

jmp m1

m_ex:

pop di                       

pop ds

pop es

pop bx

pop ax

mov al,20h                    ;снятие заявки на обслуживание (IСR)

out 20h,al

iret

myint8 ENDP

cseg ENDS

END work

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

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