cli禁止中斷發生
stl允許中斷發生
這兩個指令只能在核心模式下執行,不可以在使用者模式下執行;而且在核心模式下執行時,應該盡可能快的恢復中斷,因為cli會禁用硬體中斷,若長時間禁止中斷會影響其他動作的執行(如移動滑鼠等等),系統就會變得不穩定。在標誌暫存器中中斷標誌清零的情況下,可以以「int ××」的形式呼叫軟中斷。
程式設計師可以改變段位址和偏移位址,但是在這個過程中如果需要改變段暫存器ss和sp必須禁止中斷,當改變完成後再恢復中斷(也就是說在cli指令後需要有與其配對的sti指令,否則計算機--最常見的反應就是崩潰)
在對 ss 和sp操作的時候, 如果有中斷發生,中斷的儲存現場的操作是將相關暫存器值儲存到ss:sp指向的位址.
如果ss 或者sp沒有完成賦值操作, 這時候ss:sp指向的位址則是不期望的地方. 如果將系統或者其他應用的資料覆蓋,會導致系統/應用崩潰.
比方說,下面這個程式段(沒有遮蔽中斷):
(1) mov ax,100h
(2) mov ss,ax
(3) mov sp,200h
假設在執行完指令(2)時產生了乙個計時器中斷。這時ss等於100h,但是sp還沒有來得及改變。這樣就是說堆疊的段位址正確,但偏移位址還是原先堆疊的偏移位址。
下面是兩條規則:
1)在改變ss:sp之前,必須用cli指令遮蔽中斷,然後等操作執行完立即用sti指令恢復
2)ss:sp需要設定在空閒的記憶體位址,不要建立在其他的程式(尤其是系統的)**區
正確的寫法:
cli
mov ax,100h
mov ss,ax
mov sp,200h
stijpg 改 rar
mo彙編指令 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...
彙編 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...
彙編指令msr STM 常用彙編指令
在嵌入式開發中,匯程式設計序常常用於非常關鍵的地方,比如系統啟動時初始化,進出中斷時 的環境保護,恢復等對效能有要求的地方。arm指令集可以分為六大類,分別為資料處理指令 load store 指令 跳轉指令 程式狀態 暫存器處理指令 協處理器指令和異常產生指令。arm指令使用的基本格式如下 opc...