中断窗口

时间:2011-05-09 14:50:14

标签: assembly

我的问题是,为什么在下面的装配顺序中需要禁止中断?中断是不是只保存所有寄存器并在完成后将它们带回来,所以不会丢失数据?

cli   
inb (%dx), %al  
orb  $0x01, %al  
outb %al, (%dx)  
sti

2 个答案:

答案 0 :(得分:3)

  

中断不会只保存所有   注册并在它之后将它们带回来   完成了,所以没有数据丢失?

是的,它会的。但是,某些I / O端口是时间敏感的,如果读/写序列中断,则可能无法正常工作。或者中断以某种方式影响端口(例如,您正在读取UART寄存器并且字符到达,触发串行中断并更改UART状态)。或者您可能正在写入与中断处理有关的端口(例如中断控制器)。如果没有更多细节,很难说它是否真的有必要,但总的来说,安全比抱歉更好。

答案 1 :(得分:0)

在这种特殊情况下,您正在从端口读取值,更改一位,然后再将其写出。要作为读 - 修改 - 写周期,代码必须不间断。

否则,如果在此序列期间发生另一个中断,并更改另一个位,则在继续时将覆盖该更改。不好!<​​/ p>