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

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

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

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ ТЕХНИЧЕСКОЙ КИБЕРНЕТИКИ

КАФЕДРА АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

ОТЧЕТ

по лабораторной работе

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

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

                                                                                                            группа                               ФИО

Преподаватель                             Душутина Е.В.

                                                                                                  подпись                             ФИО

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

2007г.


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

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

При выводе в видеопамять в буфер 0B800h отдельно задается расположение символа на экране и цвет символа и фона.

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

itimer2.asm


sseg SEGMENT STACK

      db 64 dup (?)

sseg ENDS

dseg SEGMENT PARA PUBLIC 'DATA'

adr_int:

      ipsave dw 0h

      cssave dw 0h     

      msg db '*$'

dseg ENDS

cseg SEGMENT

main proc FAR

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

start:

      ; Data segment init

      mov ax, dseg

      mov ds, ax

      ; Get int adress

      mov ah,35h

      mov al,8h

      int 21h

      mov ipsave, bx

      mov ax, es

      mov cssave, ax   

      push ds

      mov dx, offset int_8

      mov ax, seg int_8

      mov ds, ax       

      ; Set out handler

      mov ah, 25h

      mov al, 8h       

      int 21h                

      pop ds

      mov ax,0h                   

      int 16h

      push ds

      mov dx, ipsave

      mov ax, cssave

      mov ds, ax

      mov ah, 25h

      mov al, 8h

      int 21h

      pop ds

      mov ah,4Ch

      int 21h

      ret

main  ENDP

int_8 proc FAR   

      push ax    

      push bx

      push es

      push ds

      push di

      mov ax, dseg

      mov ds,ax

      ; Color display

      mov ax,0B800h

      mov es,ax

      lea bx, msg

      ; Where to display

      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 0F0h

      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:adr_int

int_8 ENDP

cseg ENDS

END start

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

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