計算機經常會遇到異常,會產生中斷,發出中斷請求。中斷分為內中斷和外中斷。下面主要介紹的是內中斷。
內中斷,cpu什么時候會發出中斷信號呢?一般有一下四種情況:
·除法指令
·單步執行
·int 0指令
·int n指令
產生中斷信號的情況又被稱為中斷源。cpu接收到中斷信號以后,要根據中斷信號來確定中斷情況。所以,中斷信息里面應該包括中斷的來源以及中斷的情況。因此,CPU將定義一個變量來存儲辨別中斷信息,稱為中斷字節碼(8位變量)可以用中斷字節碼表示256種情況。
每種中斷情況都對應一種中斷處理程序,但是CPU又如何確定相應中斷處理程序在內存中的地址呢?如何確定相應中斷處理程序的入口地址?so,中斷向量應運而生。中斷向量就是中斷處理程序的入口地址。不同的中斷情況對應不同的中斷處理程序,又對應不同的中斷向量,為了高效的處理中斷,我們又定義了中斷向量表,顧名思義,中斷向量表用來存儲中斷向量,就是中斷處理程序的入口地址。一條中斷向量有占用多少內存地址呢?中斷向量用來存儲中斷處理程序的入口地址,包括段地址和偏移地址,所以占用兩個字的存儲單元,高地址字段用來存儲段地址,低地址字段用來存儲偏移地址。
CPU知道了相應中斷處理程序的入口地址后,計算機處理中斷,中斷過程。用中斷字節碼找到中斷向量,來設置CS和IP,這個過程由計算機硬件來完成,這個過程叫做中斷過程。 以8086CPU為例,在接收到中斷信息后,要執行的操作:
1.(從中斷信息中)找到中斷字節碼
2.標志寄存器的值入堆棧
3.設置標志寄存器的第8位TF和第9位IF值為0
4.CS 值入棧
5.IP值入棧
6.從內存地址為 終端類型碼4 和 中斷類型碼4+2的兩個字單元讀取中斷處理程序的入口地址,設置CS IP
中斷處理程序
由於cpu隨時都有可能檢測到中斷信息,也就是說cpu隨時都要執行中斷處理程序,所以,中斷處理程序必須一致存儲在內存某段空間中。
中斷處理程序的步驟:
1.保存用到的寄存器
2.處理中斷
3.恢復用到的寄存器
4.用iret指令返回
cpu執行完中斷處理程序以后,必須返回到原來的地址繼續執行后面的內容,所以,在執行中斷處理程序之前必須記錄下原來執行指令的地址,便於中斷處理完以后返回。