8086彙編 中斷處理機制

咱們在8086編程時,當一個CPU內部中斷或者外部中斷來了,該去執行什麼樣的中斷處理程序呢?由於咱們知道CPU就是個小傻瓜,只能機械的跟着CS,IP走,因此一切的一切,包括中斷機制都是咱們編程人員編出來的。編程

下面咱們看這個中斷指令:int 0;ip

這是一個masm風格彙編的調用中斷指令,中斷類型代碼爲0,意思是說咱們要調用一箇中斷類型代碼爲0的中斷,而後讓CPU去處理這個中斷類型代碼相對應的中斷處理程序,處理完中斷後返回。內存

這條指令看起來也太智能了吧,僅僅一條指令就能幹那麼多事情,其實,這麼理解徹底錯了,咱們要了解一個道理,對於每個彙編指令,就如int 0這個指令,雖然僅僅一句話,可是當彙編成機械語言時,可不單單就一句話了,只不過彙編器幫咱們作了不少事,對於這條指令,彙編器碰到這條指令會產生以下代碼:asm


這裏又得說一箇中斷向量表的概念:程序

咱們通常約定俗成的在內存0X000處創建一箇中斷向量表,這個中斷向量表每4個字節的儲存一箇中斷類型的中斷處理程序地址。就是這麼個意思:im

從內存地址0開始,前兩個字節存放與中斷類型代碼0相應的中斷處理程序地址的ip偏移地址,而後後兩個字節存放中斷處理程序地址CS段地址,其後依次是中斷類型1,2,.....的中斷中斷處理程序地址。cpu

這樣,咱們就能夠經過中斷類型代碼,中斷向量表找到此中斷類型的處理程序了。img

至於中斷處理程序,通常是這樣的一個流程:語言

iret指令至關於:錯誤

pop IP; pop CS; popf;

 

 

下面咱們講下內中斷:

cpu內部中斷上面幾個,第一個,當除法錯誤時產生一箇中斷,中斷類型爲0,後面的單步執行這個是幹嗎的呢?每當CPU執行完一跳指令後,檢測到標誌寄存器的TF位爲1,那麼就會產生一個單步中斷,中斷類型碼爲1,因此咱們纔有如上所示,當處理中斷時,要將TF置0。

像int n,就是表明執行中斷類型代碼爲n的中斷。

相關文章
相關標籤/搜索