📄 file8-1.asm
字号:
stack segment stack
db 1024 dup(0)
stack ends
data segment
intmsg db 'A 8259A Interrupt !'
db 0dh,0ah,0
counter db 0 ;中断计数记录单元
data ends
extra segment
extra ends
code segment 'code'
assume cs:code,ds:data,ss:stack,es:extra
start: mov ax,data
mov ds,ax
mov es,ax
mov ax,3508h ;中断向量号08H
int 21h
push bx ;保存偏移地址
push es ;保存段基地址
cli ;关中断
push ds
mov dx,offset new08h
mov ax,seg new08h
mov ds,ax
mov ax,2508h
int 21h ;设置新中断向量
pop ds
in al,21h ;读出IMR
push ax ;保存原IMR内容
and al,0feh ;允许IRQ0
out 21h,al ;设置新IMR
mov counter,0 ;设置中断次数初值
sti ;开中断
start1: cmp counter,10
jb start1 ;中断10次退出
cli ;关中断
pop ax ;恢复原IMR
out 21h,al
pop dx ;恢复原中断向量
pop ds
mov ax,2508h
int 21h
sti ;开中断
mov ax,4c00h ;返回DOS
int 21h
new08h proc
sti ;开中断
push ax ;保护寄存器
push bx
push ds
mov ax,data ;外部随机产生中断,DS不确定,必须设置DS
mov ds,ax ;设置数据段DS
inc counter ;中断次数加1
mov si,offset intmsg ;显示信息
call dpstri
mov al,20h ;发送EOI命令
out 20h,al ;写OCW2命令字
pop ds ;恢复寄存器
pop bx
pop ax
iret ;中断返回
new08h endp
dpstri proc ;显示字符串子程序
push ax ;入口参数DS:SI=字符串首址
push bx
dps1: lodsb
cmp al,0
jz dps2
mov bx,0 ;调用ROM-BIOS功能显示
mov ah,0eh
int 10h
jmp dps1
dps2: pop bx
pop ax
ret
dpstri endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -