ASSUME CS:CODE,DS:DATA
START: CLI
MOV AX,DATA MOV DS,AX
MOV DX,INTCSR_BYTE0 MOV AL,00H OUT DX,AL
MOV DX,INTCSR_BYTE1 MOV AL,1FH OUT DX,AL
MOV DX,INTCSR_BYTE2 MOV AL,3FH OUT DX,AL
MOV DX,INTCSR_BYTE3 MOV AL,00H OUT DX,AL
MOV AX,0000H MOV ES,AX
;中断程序入口地址修改
MOV DI,34H ;INT 0DH,34H=0DH*4 MOV AX,ES:[DI]
MOV IPBAK,AX ;IP MOV AX,OFFSET MYINT CLD STOSW
MOV AX,ES:[DI] ;CS MOV CSBAK,AX MOV AX,SEG MYINT STOSW
;OCW1 修改
IN AL,21H MOV MKBAK,AL AND AL,0DFH OUT 21H,AL
STI
A1: NOP
CALL BREAK JMP A1
MYINT: PUSH DS PUSH AX PUSH DX
MOV DX,IMB4_BYTE3 IN AL,DX
MOV DX,INTCSR_BYTE2 MOV AL,3FH OUT DX,AL
;清除中断标志OCW2 修改 MOV AL,65H OUT 20H,AL;
MOV AH,0EH MOV AL,37H INT 10H POP DX
POP AX POP DS IRET
BREAK PROC NEAR PUSH DS MOV AH,06H MOV DL,0FFH INT 21H JE RETURN
POP DS CLI
MOV AL,MKBAK ;使用主片的奇端口 OUT 21H,AL
MOV AX,0000H MOV ES,AX
;恢复中断入口地址
MOV DI,34H ;INT 0DH,34H=0DH*4 MOV AX,IPBAK CLD STOSW
MOV AX,CSBAK
STOSW
MOV DX,INTCSR_BYTE1 MOV AL,00H OUT DX,AL
STI
MOV AX,4C00H INT 21H RETURN:POP DS RET BREAK ENDP
CODE ENDS
END START 实验结果
每按下一次开关,屏幕上便显示一个字符“7”
实验结果总结
本次实验中首先学会了DOS环境下进入根目录和复制文件的操作方法,进一步加深了自己的基础知识。本次试验主要就是在源代码的基础之上对其进行修改,使之符合本次试验所使用的实验的平台。通过对原程序的修改更进一步的理解了实模式下的中断调用,对8259的工作机制进一步加深了理解。