IRQ10的中断程序
实验目的
掌握PC机中断处理系统的基本原理,学会编写中断服务程序。
实验内容
连接好线路后,直接用手动产生单脉冲作为中断请求信号要求每按一次开关产生一次中断,在屏幕上显示一次“IRQ10”,中断10次后退出程序。
源程序
DATA SEGMENT
MESS DB 'IRQ10!',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA
START:
MOV AX, CS
MOV DS, AX
MOV DX, OFFSET INT10
MOV AX,2572H
; INT 21H ;设置IRQ2的中断向量
; IN AL,21H ;读中断屏蔽控制器
;AND AL,0FBH
; OUT 21H, AL ;开放IRQ2中断,IMR
INT 21H
IN AL,0A1H
AND AL,0FBH
OUT 0A1H, AL ;开放IRO10中断
MOV CX,10 ;记中断循环次数为10次
STI
LL:
JMP LL ;等待脉冲
INT10: ;中断服务程序
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET MESS
MOV AH,09 ;显示每次中断提示信息
INT 21H
MOV AL,20H
OUT 20H, AL ;发出EOI结束命令
OUT 0A0H,AL
LOOP NEXT
; IN AL,21H
; OR AL,04H ;关闭IRQ2中断
; OUT 21H, AL
IN AL,0A1H ;关闭IRQ10中断
OR AL,04H
OUT 0A1H,AL
STI ;置中断标志位
MOV AH,4CH ;返回DOS
INT 21H
NEXT: IRET
CODE ENDS
END START
实验结果
编译以及运行成功后,手动产生单脉冲,每按下一次按键,就在屏幕上显示“IR10”,中断10次,即按下10次按键后,程序结束。
IRQ3和IRQ10的中断嵌套程序
实验内容
手动产生单脉冲作为中断请求信号,进行IRQ10或者IRQ3中断操作,在屏幕显示中断信息时,按下另一个脉冲按钮,进行中断,屏幕上中断信息会被打断,进而显示另一个中断类型的中断信息。
源代码
DATA SEGMENT
MESS DB 'IRQ10!',0DH,0AH,'$'
MEES DB 'IRQ3!',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA
.386
START:
MOV AX, CS
MOV DS, AX
MOV DX, OFFSET INT10
MOV AX,2572H
INT 21H ;设置IRQ10的中断向量
MOV DX, OFFSET INT3
MOV AX,250BH
INT 21H ;设置IRQ10的中断向量
IN AL,21H ;读中断屏蔽控制器
AND AL,0F3H ;开放IRQ2 IRQ3中断
OUT 21H, AL
IN AL,0A1H ;读中断屏蔽控制器
AND AL,0FBH ;开放IRQ10中断
OUT 0A1H, AL
; MOV CX,10 ;记中断循环次数为10次
STI
LL: JMP LL
INT10: ;中断服务程序
PUSHAD
PUSHFD
MOV CX,10 ;记中断循环次数为10次
MOV AX, DATA
MOV DS, AX
CC: MOV DX, OFFSET MESS
MOV AH,09 ;显示每次中断提示信息
INT 21H
CALL DELAY
LOOP CC
MOV AL,20H
OUT 20H, AL ;发出EOI结束命令
MOV AL,0A0H
OUT 0A0H, AL ;发出EOI结束命令
IN AL,21H
OR AL,04H ;关闭IRQ2中断
OUT 21H, AL
OUT 0A1H,AL
POPFD
POPAD
STI ;置中断标志位
IRET
MOV AH,4CH ;返回DOS
INT 21H
INT3: ;中断服务程序
PUSHAD
PUSHFD
MOV CX,10
MOV AX, DATA
MOV DS, AX
bb: MOV DX, OFFSET MEES
MOV AH,09 ;显示每次中断提示信息
INT 21H
CALL DELAY
LOOP BB
MOV AL,20H
OUT 20H, AL ;发出EOI结束命令
IN AL,21H
OR AL,08H ;关闭IRQ3中断
OUT 21H, AL
POPFD
POPAD
STI ;置中断标志位
IRET
MOV AH,4CH ;返回DOS
INT 21H
DELAY PROC NEAR ;延时子程序
PUSH BX
PUSH CX
MOV BX,100H
lll: MOV CX,0
llLL: LOOP llLL
DEC BX
JNE lll
POP CX
POP BX
RET
DELAY ENDP
CODE ENDS
END START