当前位置: 代码迷 >> 汇编语言 >> 这个"死循环"是如何跳出来的
  详细解决方案

这个"死循环"是如何跳出来的

热度:5680   发布时间:2013-02-26 00:00:00.0
这个"死循环"是怎么跳出来的?
在看接口的编程时总有如下 "死循环 "
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 次, 所以它能够在这个判断循环中发生, 但对这个循环来说, 这样的中断是透明的
  相关解决方案