在中斷和異常的處理過程中,很重要的一件事是如何識別中斷源,獲取中斷服務子程式的入口位址。在80486 cpu系統中,因為cpu的工作模式不同而獲取中斷向量的方式有所不同,本節討論cpu工作在實位址模式下是如何獲取中斷向量而轉入中斷處理的。
在實位址模式下,80486 cpu的中斷響應是根據中斷源提供的中斷型別號,查詢中斷向量表,獲取中斷向量,繼而轉去執行中斷處理。為了支援多工操作和虛擬儲存管理,80486 cpu可以工作於保護模式。在保護模式下,為每乙個中斷和異常定義了乙個中斷描述符,來說明中斷和異常服務程式的入口位址的屬性,所有的中斷描述符都集中存放在中斷描述符表(idt)中,由中斷描述符表取代實位址模式下的中斷向量表。中斷向量表位於記憶體底端的1kb ram區,位址範圍為0000h~03ffh,如圖6.5所示。256種中斷型別由中斷型別號0~255(00h~ffh)表示。中斷型別號n與其對應中斷向量表的位址v的關係是:v=4n。約定4n+0和4n+1單元存放中斷服務子程式的偏移位址ip的值,4n+2和4n+3單元存放中斷服務子程式的段基址cs的值。cpu響應中斷請求後,由中斷源自動給出中斷型別號n送入cpu,由cpu自動完成向量表位址4n的運算,從向量表中取出中斷服務子程式的入口位址送入cs和ip中,將執行的流程控制轉移到中斷服務子程式。
內部中斷的向量位址由系統負責裝入,使用者不能隨意修改。使用者中斷的向量位址在初始化程式設計時裝入
圖6.5 中斷向量
使用者在應用系統中使用中斷時,需要在初始化程式中將中斷服務子程式的入口位址裝入中斷向量表指定的儲存單元中,以便在cpu響應中斷請求後,由中斷向量自動引導到中斷服務子程式。中斷向量的設定,既可以使用傳送指令直接裝入指定單元,也可以使用dos系統功能呼叫 int 21h中的25h號功能呼叫裝入。
(1)用傳送指令直接裝入
採用這種方法設定中斷向量,就是將中斷服務子程式的入口位址,通過資料傳送指令直接送入中斷向量表指定的單元中,即可完成中斷向量的設定。例如,設某中斷源的中斷型別號n為40h,中斷服務子程式的入口位址為int-p,設定中斷向量的程式段如下:
cli ; if=0, 關中斷
mov ax, 0 ; es指向0段
mov es, ax
mov bx, 40h×4 ; 向量表位址送bx
mov ax, offset int-p ; 中斷服務子程式的偏移位址送ax
mov es:word ptr[bx], ax ; 中斷服務子程式的偏移位址寫入向量表
mov ax, seg int-p ; 中斷服務子程式的段基址送ax
mov es:word ptr[bx+2],ax ; 中斷服務子程式的段基址寫入向量表
sti ; if=1,開中斷
…int-p: … ; 中斷服務子程式
…iret ; 中斷返回
(2)用dos系統功能呼叫裝入
在dos int 21h系統功能呼叫中,用25h號功能可設定中斷向量,用35h號功能可獲取中斷向量。
25h號功能呼叫的入口引數是:
(ah) = 25h
(al) = 中斷型別號
(ds:dx) = 中斷服務子程式的入口位址
例如,設某中斷的中斷型別號n為40h,中斷服務子程式的入口位址為int-p,呼叫25h號功能裝入中斷向量的程式段如下:
cli ; if=0,關中斷
mov al, 40h ; 中斷型別號40h送al
mov dx, seg int-p ; 中斷服務子程式的段基址送ds
mov ds, dx
mov dx, offset int-p ; 中斷服務子程式的偏移位址送dx
mov ah,25h ; 25h功能呼叫
int 21h
sti ; if=1,開中斷
…int-p: … ; 中斷服務子程式
…iret ; 中斷返回
35h號功能呼叫的入口引數是:
(ah) = 35h
(al) = 中斷型別號
例如,若從中斷型別號為40h對應的向量表中取出中斷向量,程式段如下。
mov ah, 35h
mov al, 40h
int 21h
該程式段執行之後,從向量表中獲取的中斷向量存放在es和bx中,es中存放段基址,bx中存放偏移位址。
在實際應用中,為了不破壞向量表中的原始設定,通常在裝入新的中斷向量之前,先將原有的中斷向量取出儲存,待中斷處理完畢,再將原中斷向量恢復。
3.中斷處理
當cpu工作在實位址模式下時,可以響應和處理外部中斷nmi和intr,內部中斷型別0, 1, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16,共12種異常。
按任務輕重緩急程度,系統規定中斷處理的優先順序是:內部中斷優先權最高(型別1單步除外),其次為nmi,再次是intr,單步中斷優先權最低。
實位址模式下的中斷處理流程如圖6.6所示。
圖6.6 實位址模式下的中斷處理流程
cpu在當前指令執行完畢後,按中斷源的優先順序去檢測和查詢是否有中斷請求,當查詢到有內部中斷發生時,中斷型別號n由cpu內部形成或由指令本身(int n)提供;當查詢到有nmi請求時,自動轉入中斷型別2進行處理;當查詢到有intr請求時,響應的條件是中斷標誌位if=1,其中斷型別號n由請求裝置在中斷響應週期自動給出;當查詢到單步請求tf=1時,並且在if=1時自動轉入中斷型別1進行處理。對於intr請求引起的中斷,cpu要連續產生兩個低電平有效的中斷響應週期
為了實現中斷服務子程式與主程式之間的跳轉與返回,cpu在響應中斷請求後,執行中斷處理前,由硬體自動地完成如下操作:
① 獲取中斷型別號n,生成中斷向量表位址4n。
② 標誌暫存器fr的內容壓入堆疊儲存。
③ 先將if的值儲存在temp中,然後將tf和if清除,在中斷響應過程中,禁止單步執行功能和再次響應新的intr請求。
④ 斷點cs:ip壓入堆疊儲存。
⑤ 從中斷向量表位址為4n的儲存單元中取出中斷向量送入cs和ip,繼而轉去執行中斷服務子程式。斷點和標誌位的出棧,是在中斷服務子程式結束後由中斷返回指令iret來完成的。
1.中斷描述符與中斷描述符表中斷描述符又稱中斷門,它用於描述中斷和異常處理程式的屬性。
與實位址模式下的中斷向量一樣,保護模式下的中斷描述符也充當引導程式到服務程式初始點執行的指標。不同之處在於,在保護模式下,中斷描述符要佔據連續的8個位元組單元。
中斷描述符如圖6.7所示:
圖6.7 中斷描述符
圖6.7中低位址的0和1兩個位元組是中斷**的偏移量a15~a0;
高位址的6和7兩個位元組是中斷**的偏移量a31~a16;
2和3兩個位元組是段選擇符,段選擇符和偏移量用來形成中斷服務子程式的入口位址;
4和5兩個位元組稱為訪問許可權位元組,它標識該中斷描述符是否有效、服務程式的特權級和描述符的型別等資訊。
具體描述如下:
p(present):表示中斷描述符的有效性。p=1,中斷描述符有效;p=0,中斷描述符無效。
dpl(descriptor privilege level):表示中斷優先順序,是系統描述符被訪問的特權級,dpl占用2位,有4種編碼:00, 01, 10和11,共4級特權級,0級優先順序最高。
type:指示中斷描述符的不同型別,占用4位,在中斷描述符表中有3種型別的描述符:任務門、中斷門和自陷門。例如,1110指示32位中斷門,1111指示32位自陷門,0101指示32位任務門。
中斷描述符表相當於實位址模式下的中斷向量表,用於存放中斷描述符。表中最多可以包含256個中斷描述符,每個中斷描述符占用連續的8個位元組,因此idt共占用2kb儲存空間,可以放在80486 cpu實體地址空間的任何地方,該錶的位置和大小由中斷描述符表暫存器idtr的值確定。
idtr包含32位的基位址和16位段限,基位址定義中斷描述符表idt在儲存器中的起始點,段限定義中斷描述符表所佔的位元組個數。
2.中斷呼叫
保護模式下中斷呼叫過程如圖6.8所示。
當cpu響應外部中斷請求或執行某條指令產生異常時,根據中斷或異常的型別號n,從中斷描述符表(idt)中找到相應的中斷門,由中斷描述符中的段選擇符指向全域性描述符表(gdt)或區域性描述符表(ldt)中的目標段描述符,此目標段描述符內的段基址指向中斷服務子程式**段的基位址,由該基位址與中斷描述符中的偏移量之和形成中斷服務子程式的入口位址。
具體實現方法如下:
根據中斷型別號n,得到中斷門在idt中的起始位址,
由中斷門中的段選擇符,從gdt或ldt中取出段描述符。
根據段描述符中提供的段基址和中斷描述符中提供的偏移位址,合成中斷服務子程式的入口位址。
圖6.8 保護模式下中斷呼叫過程
實模式與保護模式的位址變換
實模式下的位址變換 邏輯位址 實體地址 一 實模式下的位址變換 16位系統中,資料匯流排為16位,位址匯流排為20位,可定址1m位址空間。由於暫存器只有16位,而位址匯流排是20位,如果只使用乙個暫存器存放位址,則定址範圍小於1m。為了充分利用位址空間,採用 段基址 段偏移 的方式,對20位的位址空...
實模式與保護模式
實模式與保護模式 1.實模式,又叫實位址模式,cpu完全按照8086的實際定址方法訪問從00000h fffffh 1mb大小 的位址範圍的記憶體,在這種模式下,cpu只能做單任務執行 定址公式為 實體地址 左移4位的段位址 偏移位址,即 實體地址是由16位的段位址和16位的段內偏移位址組成的。2....
實模式與保護模式
實模式 即實位址訪問模式 它是intel公司80286及以後的x86 80386,80486和80586等 相容處理器 cpu 的一種操作模式。實模式被特殊定義為20位位址記憶體可訪問空間上,這就意味著它的容量是2的20次冪 1m 的可訪問記憶體空間 物理記憶體和bios rom 軟體可通過這些位址...