На листинге 1 показана программа dostest.asm, представляющая собой обычный драйвер устройства для системы MS-DOS, который общается с устройством. Несмотря на простоту и малый размер данная программа содержит основные компоненты драйвера устройства, который обрабатывает прерывания.
_____________________________________________________________________
page ,132
; masm tisr ; >err
.286p
.xlist
include ..\..\include\bogus.inc
.list
Words struc
LoWord dw ?
HiWord dw ?
Words ends
EOI equ 020h ; команда EOI для контроллера PIC
INTA00 equ 020h ; управление главным контроллером PIC
INTA01 equ 021h ; регистр маски главного контроллера PIC
INT_MASTER_0 equ 08h ;номер INT главн. контроллера PIC
INTB00 equ 0A0h ; управление подчиненным контроллером PIC
INTB01 equ 0A1h ;регистр маски подчиненного контроллера PIC
INT_SLAVE_0 EQU 70h ; номер INT подчиненного контроллера PIC
;
; Установить переменные для нашего номера прерывания
;
ife (FAKE_IRQ GE 8)
INT_DEV equ (INT_MASTER_0+(FAKE_IRQ AND 7))
PIC00 equ INTA00
PIC01 equ INTA01
else
INT_DEV equ (INT_SLAVE_0+(FAKE_IRQ AND 7))
INT_MASK equ 1 SHL (FAKE_IRQ AND 7)
PIC00 equ INTB00
PIC01 equ INTB01
endif
CONST SEGMENT DWORD PUBLIC 'DATA'
sdNoBogus db 'I do not see the bogus device.',Odh,Oah,'$'
sdPrompt db Odh,Oah,'S)tart, or Q)uit: ','$'
sdCRLF db Odh,Oah,'$'
sdDot db '.','$'
CONST ENDS
DATA SEGMENT DWORD PUBLIC 'DATA'
dwCount1 dw 0
dwCount2 dw 0
lpPrevISR dd 0 ; адрес предыдущей программы ISR
fStopping db 0 ; значение TRUE при завершении
DATA ENDS
STACK SEGMENT DWORD STACK 'STACK'
db 512 dup (?)
STACK ENDS
DGroup GROUP CONST,DATA,STACK
;IP IntSvcRtn - The Interrupt Service Routine (Программа
обслуживания
; прерывания)
; WARNINGS (предупреждения)
;