int指令(軟件中斷指令)


INT(軟件中斷指令)是CALL指令的一種特殊形式。call指令調用調用的子程序是用戶程序的一部分,而INT指令調用的操作系統提供的子程序或者其他特殊的子程序。

 

中斷服務子程序和標准過程的最大區別是 匯編程序可以有任意個過程,中斷服務子程序最多有256個過程、

 

INT指令共有四中不同的格式:

 

《1》  int n

  n是中斷號,這就允許用戶程序調用256個中斷服務子程序。

  該指令2字節長度,第一字節是int機器碼,第二字節是8位立即數,表示中斷號。

  CPU在執行到INT指令時,通過中斷描述符表找到中斷號對應的中斷服務子程序的地址,(本質上就是一個異常處理程序的軟件調用)

《2》 int 3

  INT 3 是中斷指令的一種特殊形式,僅有一個字節長。

  調試器將該指令當作軟件中斷指令來用。調試的時候,當程序中的某一位置加斷點的時候,調試器會把斷點處指令編碼的第一個字節替換為INT 3指令的編碼。

當程序執行到INT 3,回向調試器申請系統調用,調試器因此獲得CPU控制權。之后,再用原先的編碼替換INT 3 編碼。

 

 

《3》INTO    中斷號4

  如果溢出標志位為1,則INTO指令會產生一個軟件中斷,利用這個指令可以快速測試算術運算指令之后是否有溢出產生。

《4》BOUND  中斷號5

  BOUND reg,mem

  其執行算法為:if(reg<[mem])or(reg>[mem+sizeof(reg)]) then INT 5

  判斷數組下表是否在合理范圍內,不合理觸發INT 5 中斷,返回地址仍是BOUND

 

 

 不管是哪種,都會發生

(1)標志寄存器入棧

(2)CS:EIP 寄存器入棧,

(3)通過中斷號在中斷描述符表中找到對應的描述符,並將對應的數據放入CS:EIP中、

 

CS入棧和出棧都是一個32位值,只有低16位有效。擴充的高16位無定義,目的是使堆棧保持與4字節邊界對齊。這對80386的性能來說很重要。。。么。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM