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

      jmp time

kl_exit:

      push ds

      mov dx, ipsave_8

      mov ax, cssave_8

      mov ds, ax

      mov ah, 25h

      mov al, 8h

      int 21h

      pop ds

      push ds

      mov dx, ipsave_9

      mov ax, cssave_9

      mov ds, ax

      mov ah, 25h

      mov al, 9h

      int 21h

      pop ds

      push ds

      mov dx, ipsave_60

      mov ax, cssave_60

      mov ds, ax

      mov ah, 25h

      mov al, 60h

      int 21h

      pop ds

      mov ah,4ch             

      int 21h

main  ENDP

int_8 proc FAR              

      push ax                

      push es                     

      mov ax, dseg

      mov es,ax

      mov ax,word ptr es:cnt 

      inc ax

      cmp ax,18        

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

int_8 ENDP

int_9 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:adr_int9   

m_kl:

      mov word ptr es:klav,1      

      mov al,20h             

      out 20h,al

      pop es                      

      pop ax

      iret

int_9 ENDP

int_60 proc FAR             

      push ax                

      push es

      mov ax, dseg

      mov es,ax

      mov es:flag,1          

      mov ax,word ptr es:sec 

      inc ax

      cmp ax,60

      jne ms                      

      mov ax,0               

      mov word ptr es:sec,ax      

      jmp mm

ms:

      mov word ptr es:sec,ax

      jmp m_ex

mm:

      mov ax,word ptr es:min 

      inc ax

      cmp ax,60              

      jne mm_m               

      mov ax,0               

      mov word ptr es:min,ax      

      jmp mh

mm_m:

      mov word ptr es:min,ax

      jmp m_ex

mh:

      mov ax,word ptr es:hour

      inc ax

      cmp ax,24              

      jne mh_h               

      mov ax,0               

      mov word ptr es:hour,ax

      jmp m_ex

mh_h:

      mov word ptr es:hour,ax

m_ex:

      pop es

      pop ax

      mov al,20h       

      out 20h,al

      iret

int_60 ENDP

cseg ENDS

END start


Данная программа выводит в левом верхнем углу экрана часы суточного времени. При этом программа реагирует только на нажатие клавиши Esc. Все остальные нажатые клавиши записываются в буфер, и после размаскирования клавиатуры по завершении программы идут на обработку.

Выводы

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