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

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

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

int 21h

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

mov ax, es

mov cs8, ax

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

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

int 21h

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

mov ax, es

mov cs9, ax

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

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

int 21h

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

mov ax, es

mov cs60, ax     

push ds

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

mov ax, seg myint8     

mov ds, ax       

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

mov al, 8h       

int 21h                

pop ds

push ds

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

mov ax, seg myint9     

mov ds, ax       

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

mov al, 9h       

int 21h                

pop ds

push ds

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

mov ax, seg myint60    

mov ds, ax       

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

mov al, 60h      

int 21h                

pop ds

time:                               ; цикл, ограничивающий время работы

cmp klav,1                    ; проверка нажатия клавиши

je Kl_exit

cmp flag,0                    ; проверка на изменение секунд

je exit

mov flag,0             

mov ax,sec                    ; преобразование количества секунд

mov bl,10              

div bl

add ax,3030h                  ; преобразование в ASCII

mov word ptr es:msg+7,ax

mov ax,min                    ; преобразование количества минут

div bl                       

add ax,3030h                  ; преобразование в ASCII

mov word ptr es:msg+4,ax

mov ax,hour                   ; преобразование количества часов

div bl                       

add ax,3030h                  ; преобразование в ASCII

mov word ptr es:msg+1,ax

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

mov es,ax

lea bx,msg             

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

mn1:

mov al,[bx]

cmp al,'$'

je exit

mov es:[di],al

inc di

inc bx

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

inc di

jmp mn1

exit:

jmp time

kl_exit:

push ds

mov dx, ip8

mov ax, cs8

mov ds, ax

mov ah, 25h

mov al, 8h

int 21h

pop ds

push ds

mov dx, ip9

mov ax, cs9

mov ds, ax

mov ah, 25h

mov al, 9h

int 21h

pop ds

push ds

mov dx, ip60

mov ax, cs60

mov ds, ax

mov ah, 25h

mov al, 60h

int 21h

pop ds

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

int 21h

main  ENDP

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

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

push es                      

mov ax, dseg

mov es,ax

mov ax,word ptr es:cnt        ; вычисление количества прерываний int8

inc ax

cmp ax,18                     ; вызов int60, если поступило 18 int8

jne m0                 

int 60h

mov ax,0

m0:

mov word ptr es:cnt,ax

pop es

pop ax

mov ax,dseg

mov es,ax

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

myint8 ENDP

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

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

push es                      

mov ax, dseg

mov es,ax

in al, 60h

cmp al,1

je m_kl

pop es

pop ax

mov ax,dseg

mov es,ax

jmp dword ptr es:adr9i        ; управление - стандартному обработчику

m_kl:

mov word ptr es:klav,1       

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

out 20h,al

pop es                       

pop ax

iret

myint9 ENDP

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

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

push es

mov ax, dseg

mov es,ax