这个"死循环"是怎么跳出来的?
在看接口的编程时总有如下 "死循环 "
WAIT:JMP WAIT
不知是怎么跳出来的?
高手指点~
====================================================================
假设8255的A口、B口、C口、控制寄存器的地址分别为:60H、61H、62H、63H
MOV AL, 10100000B
OUT 63H, AL
MOV AL, 00001101B
OUT 63H, AL ; 开中断
MOV BX, OFFSET DATA
MOV DS, SEG INT60
MOV DX, OFFSET INT60
MOV AX, 2560H
INT 21H ; 置中断向量,中断号为60H
STI ; 开标志Flags中IF位
WAIT:JMP WAIT
INT60:MOV AL, [BX]
OUT 60H, AL
TEST AL, ‘$’
JZ SRET
INC BX
JMP INT60
SRET:IRET
========================================================================
[解决办法]
WAIT:JMP WAIT的前面设置了中断服务例程,又执行了开中断指令,如此一来,当端口有动作时会触发中断,这就使JMP WAIT交出了对cpu控制权。
[解决办法]
int8 是硬件实时时钟中断, 每秒发生 18.2 次, 所以它能够在这个判断循环中发生, 但对这个循环来说, 这样的中断是透明的