彙編指令CLI/STI

來源:互聯網
上載者:User

標籤:style   blog   color   資料   代碼   div   時間   應用   

CLI 禁止中斷髮生
STI 允許中斷髮生

       這兩個指令只能在核心模式下執行,不可以在使用者模式下執行;而且在核心模式下執行時,應該儘可能快的恢複中斷,因為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  
  sti

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.