2011-05-09 33 views
2

我的問題是,爲什麼在下面的裝配順序中需要禁止中斷?中斷不會保存所有的寄存器並在完成後將它們恢復,所以不會丟失數據?中斷窗口

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

回答

3

不會中斷只是保存所有 寄存器將其帶回它 完成後,因此沒有數據丟失?

是的,它會。但是,某些I/O端口對時間敏感,如果讀/寫序列中斷,則可能無法正常工作。或者中斷以某種方式影響端口(例如,您正在讀取UART寄存器並且字符到達,觸發串行中斷並更改UART狀態)。或者你可以寫入一個本身與中斷處理有關的端口(例如中斷控制器)。沒有更多的細節,很難說是否真的有必要,但總的來說,最好是安全而不是抱歉。

+0

這很有道理,謝謝一堆。 – jn1kk 2011-05-09 15:11:34

0

在這種特殊情況下,您正在讀取端口的值,更改一位,然後再次寫出。要作爲讀 - 修改 - 寫週期工作,代碼必須是不間斷的。否則,如果在此序列中發生另一箇中斷,並更改另一位,則在繼續時將覆蓋該更改。不好!