程序源代码: (1)
;数据段
DATA SEGMENT
MESS DB 'TPCA interrupt! ',0DH,0AH, '$'
;需要显示的数据,以'$'结束,方便系统调用。0DH,0AH为换行 DATA ENDS
;代码段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, CS ;系统调用25是设置中断
MOV DS, AX
MOV DX, OFFSET INT3 ;采用间接修改法,设置中断向量
MOV AX, 250BH ;设置 IRQ3 对应的中断向量,25是系统调用功能 ;号,在AL里放中断向量号,0B*4=2C,是中断程序的地址所在位置,DS放中断程序的段 ;基址,DX放偏移地址
INT 21H ;中断设置完成
IN AL, 21H ;读中断屏蔽寄存器,21H 是该寄存器的端口号
AND AL, 0F7H ;开放 IRQ3 中断,允许 IRQ3 的中断申请
OUT 21H, AL ;写OCW1
MOV CX, 10 ;记中断循环次数为 10 次
STI ;允许中断发生
5
WAIT:
JMP WAIT
INT3: MOV AX, DATA ;中断服务程序
MOV DS, AX
MOV DX, OFFSET MESS MOV AH, 09
;在屏幕上显示每次中断的提示信息 ,DS:DX中存放显示的字符串的地址 INT 21H
MOV AL, 20H
; 发出 EOI 结束中断到 PC 内主片的地址 20H OUT 20H, AL
LOOP NEXT ;LOOP每次跳转CX自动减1
IN AL, 21H ;读中断屏蔽寄存器,获取中断屏蔽字 OR AL, 08H ;关闭 IRQ3 中断
OUT 21H, AL ;将中断屏蔽字送到中断屏蔽寄存器 STI ;置中断标志位 MOV AH, 4CH ;返回 DOS INT 21H
NEXT: IRET ;中断返回
CODE ENDS
END START
(2)
DATA SEGMENT
MESS DB 'TPCA interrupt! ',0DH,0AH, '$' DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, CS MOV DS, AX
MOV DX, OFFSET INT3 ;采用间接修改法,设置中断向量 MOV AX, 2572H INT 21H
IN AL, 21H ;主片
AND AL, 0FBH ;1111 1011 OUT 21H, AL
IN AL, 0A1H ;从片
AND AL, 0FBH ;1111 1011 OUT 0A1H, AL
6
MOV CX, 10 ;记中断循环次数为10次 STI ;允许中断发生
WAIT: JMP WAIT
INT3: MOV AX, DATA ;中断服务程序 MOV DS, AX
MOV DX, OFFSET MESS
MOV AH, 09 ;在屏幕上显示每次中断的提示信息 INT 21H
MOV AL, 20H ; 发出EOI结束中断到PC内主片的地址20H OUT 20H, AL ;关闭主片 OUT 0A0H,AL ;关闭从片
LOOP NEXT
IN AL, 21H ;读中断屏蔽寄存器,获取中断屏蔽字 OR AL, 04H ;关闭IRQ3中断
OUT 21H, AL ;将中断屏蔽字送到中断屏蔽寄存器
IN AL, 0A1H ;读中断屏蔽寄存器,获取中断屏蔽字 OR AL, 04H ;关闭IRQ10中断
OUT 0A1H, AL ;将中断屏蔽字送到中断屏蔽寄存器
STI ;置中断标志位
MOV AH, 4CH ;返回DOS INT 21H
NEXT: IRET ;中断返回
CODE ENDS
END START
实验 1-2 (1)实验内容
PC 机内中断嵌套实验。使用单次脉冲模拟两个中断源的中断产生,填写 中断处理程序,体会中断嵌套的过程。
(2)主要步骤
接线图:
7
说明:本实验接线图如图 1-3 所示,从单脉冲单元引出两根导线,一根接到系统总线单元区的 IRQ 引脚,一根接到 USB 核心卡的 IRQ10 端。
参考流程图:
程序源代码: CODE SEGMENT
ASSUME CS:CODE ,DS: DATA START:
.386 ;告诉汇编器生成intel 80386指令集
CLI ;关中断 MOV AX,CS ;设置中断向量表INT10
MOV DS,AX ;将CS段基址给DS
MOV DX,OFFSET INT10 ;int10的偏移地址给DX MOV AX,2572H
INT 21H ;系统调用25号设置中断功能,中断号72H
8