📄 8259中断控制.asm
字号:
;******************************************;
; copyright@vivian_chan ;
; chen_xi 2006 ;
; ;
;******************************************;
data segment
msg db ' THIS IS A 8259A INTERRUPT!',0ah,0dh,'$'
p21 db ?
p20 db ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data ;数据段初始化
mov ds,ax
cli ;关中断
mov ah,35h
mov al,0bh ;送IRQ3类型码0bH
int 21h ;保存系统原中断向量
push bx ;保护现场
push es
push ds
mov bx,10 ;设置中断次数
mov ax,seg useint ;保存新中断向量
mov ds,ax
mov dx,offset useint
mov ah,25h ;DOS功能调用
mov al,0bh ;送IRQ3类型码0bH
int 21h
pop ds
in al,21h
mov p21,al
mov al,0f7h ;开IRQ3中断源
out 21h,al
in al,20h
mov p20,al
out 20h,al
sti
next: nop ;循环等待
cmp bx,0
jne next
mov al,p21 ;恢复原中断屏蔽字
out 21h,al
pop ds ;恢复现场
pop dx
mov ah,25h
mov al,0bh ;恢复原系统中断向量
int 21h
mov ah,4ch ;返回DOS
int 21h
useint proc far ;中断服务程序
sti ;开中断
dec bx
push ax ;保护现场
push bx
push ds
mov ax,data ;设置用户段
mov ds,ax
mov dx,offset msg ;取要显示的字符串地址
mov ah,09h ;显示字符串
int 21h
mov al,20h ;发EOI命令
out 20h,al
pop ds ;恢复现场
pop bx
pop ax
iret ;中断返回
useint endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -