前言
老實話,不知道這個中斷有沒有寫的必要,因為網上有太多的優秀的文章。
但是最后看了好多篇前輩們的文章后,仿佛懂了,但是總感覺不得勁。最后發現前輩的大多數內容都是很局部的,這不是因為前輩們的能力,只是因為前輩想盡量用簡短的文字去描述一些知識。
于是這篇畢竟啰嗦的文章就產生了,之前恰好也搞了gic,于是這里x86和arm都會有所涉及,相信這篇文章會對你有所收獲。
1、從硬件看什么是中斷?
1、前言
所謂中斷,是指CPU在正常運行程序時,由程序預先安排好的事件,或者由內、外部事件引起CPU中斷正在運行的程序,而轉到為預先安排的事件或內、外部事件服務的程序中去。
??這些引起程序中斷的事件稱為中斷源。
??預先安排好的事件是指PC的中斷指令。
執行到此,立即轉到對應的服務程序去執行。
內部事件是指系統板上出現的一些事件信號,中斷指令也可看做內部事件。
外部事件是指某些接口設備所發出的請求中斷程序執行的信號,這些信號稱為中斷請求信號。
中斷請求信號何時發生是不可預知的,然而,它們一旦請求中斷,就會向CPU發出電信號,因此這些信號CPU是可以測知的。這樣,CPU就無需花大量的時間去查詢這些信號。
例如,鍵盤何時有鍵按下是隨機的,因而CPU可以對鍵盤不加等待,而去執行其他程序,一旦有鍵按下,鍵盤馬上產生中斷信號,CPU得知這一信號后,就立即去執行為鍵盤服務的中斷程序,服務結束后,CPU又恢復執行被中斷了的程序。
??中斷服務程序執行完,返回原來執行程序的中斷處(稱為斷點)繼續往下執行,稱為中斷返回。
??有時中斷請求信號(即中斷源)可能有好幾個,因此CPU響應這些中斷就得有先后次序,這稱為中斷的優先級。
優先級高的中斷,CPU首先響應;優先級低的中斷暫不響應,稱為掛起。
??有些中斷源產生的中斷,可以用編程的方法,使CPU不予理睬,這叫做中斷的屏蔽。
CPU響應中斷轉去執行中斷服務程序前,需要把被中斷程序的現場信息保存起來,以便執行完中斷服務程序后,接著從被中斷程序的斷點處繼續往下執行。
現場信息包括程序計數器的內容、CPU的狀態信息、執行指令后的結果特征和一些通用寄存器的內容。
有些信息的保存,如程序計數器的內容等,由機器硬件預先安排完成,稱為中斷處理的隱操作;而有些信息的保存是在中斷服務程序中預先安排的。
CPU響應中斷,由中斷源提供地址信息,引導程序轉移并執行中斷服務程序,這個地址信息稱為中斷向量,它一般是和中斷源相對應的。PC采用類型碼來標識中斷源。
在數據采集或實時控制中,CPU對接口設備的控制或交換信息,可采用查詢、中斷、DMA等方式,而中斷方式以其執行速度快,可實時處理,不占用CPU過多的時間等優點,在接口技術中較多地被采用。
2、中斷概述
1-中斷的必要性
如上所述,CPU在與外設交換信息時,若用查詢的方式,則CPU就要浪費很多時間去等待外設。
這樣就存在一個快速的CPU與慢速的外設之間的矛盾,這也是計算機在發展過程中遇到的嚴重問題之一。為解決這個問題,一方面要提高外設的工作速度;另一方面發展了中斷的概念。中斷有以下好處。
??1.同步操作
有了中斷功能,就可以使CPU和外設同時工作。?CPU在啟動外設工作后,就繼續執行主程序,同時外設也在工作;當外設把數據準備好后,發出中斷申請,請求CPU中斷它的程序,執行輸入或輸出(中斷處理);處理完以后,CPU恢復執行主程序,外設也繼續工作。而且有了中斷功能,CPU可命令多個外設同時工作,這樣就大大提高了CPU的利用率,也提高了輸入、輸出的速度。
? 2.實現實時處理 當計算機用于實時控制時,中斷是一個十分重要的功能。現場的各種參數、信息,需要的話可在任何時間發出中斷申請,要求CPU處理;CPU可以馬上響應(若中斷是開放的話)并加以處理。這樣的及時處理在查詢工作方式下是做不到的。
? 3.故障處理 計算機在運行過程中,往往會出現事先預料不到的情況,或出現一些故障,如電源突跳、存儲器出錯、運算溢出等,計算機可以利用中斷系統自行處理,不必停機或報告工作人員。
2 中斷源
引起中斷的原因,或能發出中斷申請的來源,稱為中斷源。通常中斷源有以下幾種。
? 1.一般的輸入/輸出設備 如鍵盤、紙帶讀入機、打印機等。
? 2.數據通道中斷源 如磁盤、磁帶等。3.實時時鐘
? 3.實時時鐘 在控制中,常遇到時間控制問題等,若用CPU執行一段程序來實現延時的方法,則在這段時間內,CPU不能干別的工作,降低了CPU的利用率。所以,常采用外部時鐘電路,當需要定時時,CPU發出命令,令時鐘電路(電路的定時時間通常是可編程的,即可用程序來確定和改變)開始工作,待規定的時間到了后,時鐘電路發出中斷申請,由CPU加以處理。(看門狗)
? 4.故障源 例如,電源掉電時,需要把正在執行的程序的狀態——PC(或IP)、各個寄存器的內容和標志位的狀態保留下來,以便重新供電后能從斷點處繼續運行。另外,目前絕大部分微型計算機中,RAM為半導體存儲器,電源掉電后,必須接入備用電源(電池)供電,以保護存儲器中的信息。所以,在直流電源上并上大電容,使其因掉電或電壓下降到一定值時就發出中斷申請,由計算機的中斷系統執行上述的各項操作。
? 5.為調試程序而設置的中斷源 一個新程序編制好以后,必須經過反復調試才能可靠地工作。在程序調試時,為了檢查結果,或為了尋找毛病所在,往往要求在程序中設置斷點,或進行單步工作(一次只執行一條指令),這要由中斷系統來實現。?(斷點竟然是中斷)
3 中斷系統的功能
為了滿足上述各種情況下的中斷要求,中斷系統應具有如下功能。
? 1.實現中斷及返回 當某一中斷源發出中斷申請時,CPU能決定是否響應這個中斷請求(當CPU在執行更緊急、更重要的工作時,可以暫不響應中斷)。若允許響應這個中斷請求,CPU必須在現行的指令執行完后,把斷點處的IP和CS的值(即下一條應執行指令的地址)、各個寄存器的內容和標志位的狀態,推入堆棧保留下來──保護斷點和現場。然后才能轉到需要處理的中斷源的服務程序(Interrupt Service Routine)的入口,同時清除中斷請求觸發器。當中斷處理完后,恢復被保留下來的各個寄存器和標志位的狀態(稱為恢復現場),并恢復IP和CS的值(稱為恢復斷點),使CPU返回斷點,繼續執行主程序。
? 2.能實現優先排隊 通常,在系統中有多個中斷源,會出現兩個或更多個中斷源同時提出中斷請求的情況,這樣就必須要求設計者事先根據輕重緩急,給每個中斷源確定一個中斷級別──優先權。當多個中斷源同時發出中斷申請時,CPU能找到優先權級別最高的中斷源,響應它的中斷請求;在優先權級別最高的中斷源處理完以后,再響應級別較低的中斷源。
? 3.高級中斷源能中斷低級的中斷處理 當CPU響應某一中斷源的請求,在進行中斷處理時,若有優先權級別更高的中斷源發出中斷申請,則CPU要能中斷正在進行的中斷服務程序,保留這個程序的斷點和現場(類似于子程序嵌套),響應高級中斷,在高級中斷處理完以后,再繼續執行被中斷的中斷服務程序。當發出新的中斷申請的中斷源的優先級別與正在處理的中斷源為同級或更低時,CPU就先不響應這個中斷申請,直至正在處理的中斷服務程序執行完以后才去處理新的中斷申請。
3、CPU響應中斷的條件和過程
由于引腳的限制,CPU的中斷請求線的數量是有限的。例如,8088只有一條可屏蔽硬件中斷請求線(INTR)。最簡單的情況當然是只有一個中斷源,我們就從這個最簡單的情況分析。
1 CPU響應中斷的條件
??1.設置中斷請求觸發器
每一個中斷源,要能發出中斷請求信號,且這個信號能一直保持到CPU響應這個中斷請求后,才可清除中斷請求。故要求每一個中斷源有一個中斷源請求觸發器A,如圖所示。
圖1 設置中斷請求的電路
? 2.設置中斷屏蔽觸發器 在實際系統中,往往有多個中斷源。為了增強控制的靈活性,需要在每一個外設的接口電路中增加一個中斷屏蔽觸發器B,只有當此觸發器的輸出為“1”時,外設的中斷請求才能被送至CPU,如圖2所示。可把8個外設的中斷屏蔽觸發器組成一個端口,用輸出指令來控制它們的狀態。
圖2 具有中斷屏蔽的接口電路
2 CPU對中斷的響應
??3.中斷是開放的
在CPU內部有一個中斷允許觸發器。只有當其為“1”時(即中斷開放時),CPU才能響應中斷;若其為“0”(即中斷是關閉的),則即使INTR線上有中斷請求,CPU也不響應。
這個觸發器的狀態可由STI和CLI指令改變。+?當CPU復位時,中斷允許觸發器的輸出為“0”,即關中斷,所以必須用STI指令開中斷。+?當中斷響應后,CPU自動關中斷,所以必須在中斷服務程序中用STI指令開中斷。
??4.CPU在現行指令結束后響應中斷
CPU在現行指令運行到最后一個機器周期的最后一個T狀態時,才采樣INTR線。
若發現有中斷請求,則把內部的中斷鎖存器置“1”,下一個機器周期不進入取指周期,而進入中斷周期。其時序流程如圖3所示。
圖3 中斷時序流程圖
當滿足上述條件后,CPU響應中斷,轉入中斷周期,CPU做以下幾件事。
??1.關中斷
8088在CPU響應中斷后,發出中斷響應信號INTA的同時,內部自動地實現關中斷。
??2.保留斷點
CPU響應中斷,封鎖IP+1,且把IP和CS推入堆棧保留,以備中斷處理完畢后,能返回主程序。
??3.保護現場
為了使中斷處理程序不影響主程序的運行,故要把斷點處有關的各個寄存器的內容和標志位的狀態,推入堆棧保護起來。8088通過軟件(即在中斷服務程序中)把要用到的寄存器的內容用PUSH指令推入堆棧。
??4.給出中斷入口,轉入相應的中斷服務程序
8088由中斷源提供的中斷矢量形成中斷入口地址(即中斷服務程序的起始地址)。在中斷服務程序完成后,還要做下述的5、6兩步工作。
? 5.恢復現場 把所保存的各個內部寄存器的內容和標志位的狀態,從堆棧彈出,送回CPU中的原來位置。這個操作在8088中也是通過服務程序中的POP指令來完成的。
??6.開中斷與返回
在中斷服務程序的最后,要開中斷(以便CPU能響應新的中斷請求)和安排一條返回指令,將堆棧內保存的IP和CS的值彈出,程序恢復到主程序中運行。
上述過程可用如圖4所示的流程圖表示。
圖4 中斷響應、服務及返回流程圖
4、中斷優先權及多重中斷
1 中斷優先權
如前所述,實際的系統中,是有多個中斷源的,但是,由于CPU引腳的限制,往往只有一條中斷請求線。于是,當有多個外中斷源同時請求時,CPU就要識別出哪些中斷源有中斷請求,辨別和比較它們的優先權(Priority),先響應優先權級別最高的中斷請求。另外,當CPU處理中斷時,也要能響應更高級的中斷請求,而屏蔽掉同級或較低級的中斷請求。
要判別和確定各個中斷源的優先權可以用軟件和硬件兩種方法。
1.用軟件確定中斷優先權
軟件采用查詢技術。當CPU響應中斷后,就用軟件查詢以確定是哪些外設申請了中斷,并判斷它們的優先權。
把8個外設的中斷請求觸發器組合起來,作為一個端口,并賦以設備號,如圖5所示,把各個外設的中斷請求信號相“或”后,作為INTR信號,故任一外設有中斷請求,都可向CPU送出INTR信號。
當CPU響應中斷后,把中斷寄存器的狀態,作為一個外設讀入CPU,逐位檢測它們的狀態,若有中斷請求就轉到相應的服務程序的入口。其流程如圖6所示。
查詢程序有兩種實現方式
??(1)屏蔽法IN ???? AL,[20H]????;輸入中斷請求觸發器的狀態
TEST ?? AL,80H ?????;檢查最高位
JNE ??? PWF ?????????;外設A中斷服務程序
TEST ?? AL,40H ?????;檢查次高位
JNE ??? DISS ????????;外設B中斷服務程序
TEST????AL,20H
JNE ??? MT ??????????;外設C中斷服務程序
??(2)移位法XOR?????AL,AL
IN ???? AL ,[20H]???;輸入中斷請求觸發器的狀態
RCL?????AL,1
JC ???? PWF ?????????;?外設A中斷服務程序
RCL?????AL,1
JC ???? DISS ????????;?外設B中斷服務程序
……查詢技術的優點是:
??① 詢問的次序,即是優先權的次序。顯然,最先詢問的,優先權的級別最高。
??② 省硬件。不需要有判斷與確定優先權的硬件排隊電路。
缺點是:由詢問轉至相應的服務程序入口的時間長,尤其是在中斷源較多的情況下。
2.硬件優先權排隊電路
??(1)中斷優先權編碼電路
圖7 編碼器和比較器的優先權排隊電路
若有8個中斷源,當任意一個有中斷請求時,通過或門,即可有一個中斷請求信號產生,能否送至CPU的中斷請求線,還要受比較器的控制(若優先權失效信號為低電平,則與門2關閉)。
8條中斷輸入線的任一條,經過編碼器可以產生三位二進制優先權編碼A2A1A0,優先權最高的線的編碼為111,優先權最低的線的編碼為000。而且若有多個輸入線同時輸入,則編碼器只輸出優先權最高的編碼。
正在進行中斷處理的外設的優先權編碼,通過CPU的數據總線,送至優先權寄存器,然后輸出編碼B2B1B0至比較器,以上過程是由軟件實現的。
比較器比較編碼A2A1A0與B2B1B0的大小,若AB”端輸出低電平,封鎖與門1,就不向CPU發出新的中斷申請(即當CPU正在處理中斷時,當有同級或低級的中斷源申請中斷時,優先權排隊電路就屏蔽掉它們的請求);只有當A>B時,比較器輸出端才為高電平,打開與門1,將中斷請求信號送至CPU的INTR輸入端,CPU就中斷正在進行的中斷處理程序,轉去響應更高級的中斷。
若CPU不再進行中斷處理時(即在執行主程序),則優先權失效信號為高電平,當有任一種中斷源請求中斷時,都能通過與門2發出INTR信號。這樣的優先權電路,如何才能轉入優先權最高的外設的服務程序的入口呢?當外設的個數小于等于8時,則它們公用一個產生中斷矢量的電路,根據比較器的編碼A2A1A0,就能做到不同的編碼轉入不同的入口地址。
??(2)雛菊花環(Daisy Chain)式或稱為鏈式優先權排隊電路
當多個輸入有中斷請求時,則由中斷輸入信號的“或”電路產生INTR信號,送至CPU。CPU執行完現行指令后,響應中斷,發出中斷響應信號。但究竟響應哪一個中斷呢?或CPU是轉向哪一個中斷服務程序的入口呢?這要由圖8所示的鏈式優先權排隊電路確定。
當中斷響應為高電平時,若F/F A有中斷請求,則它的輸出為高電平,于是與門A1輸出為高電平,由它控制轉至中斷1的服務程序的入口,且門A2輸出為低電平,因而使門B1、B2、C1、C2…所有下面各級門的輸入和輸出全為低電平,即屏蔽了以下的各級。
若第一級沒有中斷請求,即F/F A=0,則中斷輸出為低電平,但門A2的輸出卻為高電平,即把中斷響應傳遞至中斷請求2。若此時F/F B=1,則與門B1輸出為高電平,控制轉去執行中斷2的服務程序;此時與門B2的輸出為低電平,因而屏蔽了以下各級。而若F/F B=0,則與門B1輸出為低電平,而與門B2輸出為高電平,把中斷響應傳遞至中斷請求3……
圖8 鏈式優先權排隊電路
綜上所述,在鏈式優先權排隊電路中,
??若上級的輸出信號為“0”,則屏蔽了本級和所有的低級中斷;
??若上級輸入為“1”,在本級有中斷請求時,則轉去執行本級的處理程序,且使本級至下級的輸出為“0”,屏蔽所有低級中斷;
??若本級沒有中斷請求,則本級至下級的輸出為“1”,允許下一級中斷,故在鏈的最前面的優先權最高。
2 多級中斷的概念
多級中斷系統是指計算機系統中有相當多的中斷源,根據各中斷事件的輕重緩急而分成若干級別,每一中斷級分配一個優先權。
一般來說,優先權高的中斷級可以打斷優先權低的中斷服務程序,以程序嵌套方式進行工作。
如圖9(a)所示,三級中斷優先權高于二級,而二級中斷優先權高于一級。
根據系統的配置不同,多級中斷又可分為一維多級中斷和二維多級中斷,如圖9(b)所示。
一維多級中斷是指每一中斷中只有一個中斷源,而二維多級中斷是指每一級中斷中又有多個中斷源。
圖中虛線左邊結構為一維多級中斷,如果取掉虛線則成為二維多級中斷結構。
對于多級中斷,我們著重說明如下幾點:
??第一,一個系統若有n級中斷,在CPU中就有n個中斷請求觸發器,總稱為中斷請求寄存器;與之對應的有n級中斷屏蔽觸發器,總稱為中斷屏蔽寄存器。
??與單級中斷不同,在多級中斷中,中斷屏蔽寄存器的內容是一個很重要的程序現場,因此在響應中斷時,需要把中斷屏蔽寄存器的內容保存起來,并設置新的中斷屏蔽狀態。
??一般在某一級中斷被響應后,要置“0”(關閉)本級和優先權低于本級的中斷屏蔽觸發器,置“1”(開放)更高級的中斷屏蔽觸發器,以此來實現正常的中斷嵌套。
??第二,多級中斷中的每一級可以只有一個中斷源,也可以有多個中斷源。在多級中斷之間可以實現中斷嵌套,但是同一級內的不同中斷源的中斷是不能嵌套的,必須是處理完一個中斷后再響應和處理同一級內的其他中斷源。
??第三,設置多級中斷的系統一般都希望有較快的中斷響應時間,因此首先響應哪一級中斷和哪個中斷源,由硬件邏輯實現,而不是由程序實現。
??圖9(b)中的中斷優先排隊電路,就是用于決定優先響應中斷級的硬件邏輯。另外,在二維中斷結構中,除了由中斷優先級排隊電路確定優先響應中斷級外,還要確定優先響應的中斷源,一般通過鏈式查詢的硬件邏輯來實現。
??顯然,這是用獨立請求方式與鏈式查詢方式相結合的方法來決定首先響應哪個中斷源。
??第四,和單級中斷情況類似,在多級中斷中也使用中斷堆棧保存現場信息。使用堆棧保存現場的好處是:
??① 控制邏輯簡單,保存和恢復現場的過程按先進后出順序進行。
??②?每一級中斷不必單獨設置現場保護區,各級中斷現場可按其順序放在同一棧里。
5、 8088的中斷方式
8088有兩種類型的中斷:由執行某些指令引起的軟中斷和設備引起的硬中斷,這兩類中斷均有中斷類型碼相對應。
1.軟中斷
執行下述指令時,將產生或可能產生中斷。
??(1)DIV(除)或IDIV(整除)指令
當執行這些除法指令時,若除數為0或商溢出,則產生中斷,稱為0型中斷。
??(2)INT指令
當執行中斷指令INT n時,則產生n型中斷。
??(3)INTO指令
若在指令序列執行過程中,上條指令執行的結果使溢出標志位O=1,接著若執行的是INTO指令,則引起內部中斷,稱為4型中斷;若溢出標志位O=0,該指令將不起作用。
??(4)單步執行
當標志位T=1時,每執行一條指令,則引起一次中斷,即指令為單步執行方式,這種方式常用于程序的調試。單步執行為1型中斷。
2.硬中斷
8088有兩種中斷請求線:
非屏蔽中斷NMI線和可屏蔽中斷INTR線,在這兩條線上產生中斷請求信號而引起的中斷稱為硬中斷。
??(1)可屏蔽中斷
出現在INTR線上的請求信號是電平觸發的,它的出現是異步的,在CPU內部由CLK的上升沿來同步。在該線上的中斷請求信號(高電平有效)必須保持到當前指令的結束。
在這條線上出現的中斷請求,CPU是否響應要取決于標志位I的狀態, + 若I=1,則CPU就響應,可以認為此時CPU處于中斷狀態;+ 若I=0,則CPU就不響應。
I位的狀態,可以用指令STI使其置位(即開中斷);也可用CLI指令使其復位(即關中斷)。?要注意:+ 在系統復位以后,標志位I=0;此外任一種中斷(內部中斷、NMI、INTR)被響應后,I=0。所以必須在一定的時候用STI來開放中斷。+ CPU是在當前指令周期的最后一個T狀態采樣中斷請求信號的,?若發現有可屏蔽中斷請求,且中斷允許(I=1),則CPU進入中斷響應周期。
(時鐘周期,又稱節拍周期,是處理器的最基本單位,晶振頻率的倒數,也稱T狀態)
??(2)非屏蔽中斷
當NMI線上出現一個由低向高上跳的高電平中斷請求信號后(持續時間大于兩個時鐘周期),不管標志寄存器I位的狀態如何,當前指令執行完成后,8088馬上轉入中斷處理。
此種類型的中斷有三種來源:+ 電源故障, + 系統板上隨機存儲器奇偶校驗錯, + 8087(協處理器)中斷請求和I/O通道檢查錯。非屏蔽中斷的優先權高于可屏蔽中斷。
3.中斷向量表
8088中有一個簡單而又多功能的中斷系統。上述的任何一種中斷,CPU響應以后,都要保護現場(主要是標志位)和保護斷點(現行的碼段寄存器CS和指令指針IP),然后轉入各自的中斷服務程序。在8088中各種中斷如何轉入各自的中斷服務程序呢?
8088在內存的前1KB(地址為00000H~003FFH)建立了一個中斷向量表,可以容納256個中斷向量(或256個中斷類型),每個中斷向量占用4B。(這個應該是)
在這4B中,包含著這個中斷向量(或這個中斷類型)的服務程序的入口地址——前兩個字節為服務程序的IP,后兩個字節為服務程序的CS,如圖10所示。(CS:IP)
其中前5個中斷向量(或中斷類型)由Intel專用,系統又保留了若干個中斷向量,余下的就可以由用戶自己使用,作為中斷源的向量。
4.8088中的中斷響應和處理過程
8088中各種中斷的響應和處理過程是不相同的,但主要區別在于如何獲取相應的中斷類型碼(向量號)。
對于硬件(外部)中斷,CPU在當前指令周期的T狀態采樣中斷請求信號,
??如果有可屏蔽中斷請求,且CPU處在開中斷狀態(I標志為1),則CPU轉入兩個連續的中斷響應周期,在第二個中斷周期的T4狀態前沿,采樣數據線獲取由外設輸入的類型碼;
C.PU在T1、T2、T3、T4這四個狀態完成一個總線周期。 在T1狀態,把地址信息從地址線A19~A16,A15~A8和AD7~AD0上輸出,且立即發出地址鎖存信號ALE,把在A19~A16上出現的高4位地址和在AD15~AD0(8088則是AD7~AD0)上出現的地址,在外部地址鎖存器上鎖存。 在T2狀態,CPU發送讀寫等控制命令。 在T3、T4狀態,CPU發送或接收數據,并在T4狀態結束此總線周期。 當外部存儲器或I/O端口的時序不能與CPU的時序相配合時,就需要插入TW周期。 **因此,在CPU中設計了一條準備就緒READY輸入線,即存儲器或I/O端口輸給CPU的狀態線。** CPU在T3采樣READY線,若為高電平,則在T3狀態后進入T4狀態。 若存儲器或I/O端口來不及在T4狀態的前沿把數據準備好,則當CPU在T3狀態采樣時應使READY線為低電平,并在T3狀態后插入一個等待狀態TW。
??若是采樣到非屏蔽中斷請求,則CPU不經過上述的兩個中斷響應周期,而在內部自動產生中斷類型碼2。
對于軟件中斷,中斷類型碼也是自動形成的。對于INT n指令,則類型碼即為指令中給定的n。8088在取得了類型碼后的處理過程是一樣的,其順序為:
??① 將類型碼乘4,作為中斷向量表的指針;
??② 把CPU的標志寄存器入棧,保護各個標志位,此操作類似于PUSH F指令;
??③ 復制追蹤標志T的狀態,接著清除I和T標志,屏蔽新的INTR中斷和單步中斷;
??④ 保存主程序中的斷點,即把主程序斷點處的IP和CS的值推入堆棧保護,先推入CS的值,再推入IP的值;
??⑤ 從中斷向量表中取中斷服務程序的入口地址,分別送至CS和IP中,先取CS的值;
??⑥ 按新地址執行中斷服務程序。
在中斷服務程序中,通常要保護CPU內部寄存器的值(保護現場)及開中斷(若允許中斷嵌套的話)。
在中斷服務程序執行完后,要恢復現狀,最后執行中斷返回指令IRET。
IRET指令按次序恢復斷點處的IP和CS的值,恢復標志寄存器(相當于POP F)。
于是程序就恢復到斷點處繼續執行。8088的中斷響應和處理過程可用如圖11所示的流程圖來表示。
6、IBM PC/XT的中斷方式
1.IBM PC/XT的中斷類型
在IBM PC/XT中有三種類型的中斷。
??(1)內部中斷即軟中斷
包括被0除、單步執行、溢出和中斷指令(包括斷點中斷)等。這是由8088執行指令產生的中斷。
??(2)非屏蔽中斷NMI
在IBM PC/XT中若存儲器的讀/寫奇偶校驗錯,或者是由8087(協處理器)的異常所產生的中斷,都送至8088的NMI輸入端要求處理。
??(3)可屏蔽中斷INTR
在IBM PC/XT系統中,可能有多個外部設備中斷請求信號,而8088 CPU的可屏蔽中斷輸入信號只有一個INTR。
為此,在IBM PC/XT系統中,采用中斷控制器(8259)將外部設備中斷請求信號擴充到8個。
IBM PC/XT系統中可屏蔽的中斷源及其相應的類型碼如表1所示。
表1 可屏蔽的中斷源及其相應的類型碼
2.IBM PC/XT中系統保留的中斷
8088 CPU最多能處理256種不同的中斷,其中有5個保留為CPU專用;又有相當一部分是由磁盤操作系統DOS保留為系統用的。
所有已經保留的中斷類型,用戶就不能再使用了,但可使用的仍然有近200個中斷,這對于絕大部分用戶來說已經是足夠了。
IBM PC/XT中保留的中斷(所用的DOS的版本號不同會有一些不同)中,前5個中斷類型是8088規定的專用中斷。BIOS的中斷類型號為0~1F,其功能如表2所示:
表2 IBM PC/XT中保留的BIOS中斷
?
在這些類型的中斷中,
??類型號8~F就是上述通過8259的八級硬件中斷;
??類型號5和10~1A是基本外部設備的輸入/輸出驅動程序和BIOS中調用的有關程序;
??類型號1B和1C由用戶設定,1D~1F指向3個數據區域。
中斷類型號20~3F由DOS操作系統使用,用戶程序也可以調用其中的20~27號中斷。
這些中斷功能安排如表3所示。
表3 IBM PC/XT中保留的DOS中斷
40號以后的中斷類型可由用戶程序安排使用。
本章我們借助8088這個基礎的中斷控制器,讓我們對中斷的硬件電路有了基礎的認知,這里我們來看兩個當下非常常用和流行的中斷控制管理器8259A、APIC。
當然ARM的GIC肯定也是會有的哦。
審核編輯:黃飛
?
評論
查看更多