




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第7章中斷技術(shù)7.1中斷技術(shù)概述7.280X86CPU的異常處理功能7.3保護(hù)虛擬地址方式下的中斷管理7.4可編程中斷控制器8259A7.1.1中斷的提出
CPU在運行過程中經(jīng)常需要輸入一些數(shù)據(jù),或及時輸出一些結(jié)果,但輸入輸出設(shè)備都少不了機(jī)械動作,所以輸入輸出的速度遠(yuǎn)遠(yuǎn)慢于CPU執(zhí)行程序的速度。隨著當(dāng)代微機(jī)新技術(shù)的發(fā)展,CPU高速與I/O設(shè)備低速之間的矛盾日益突出,如果不采用中斷技術(shù),則勢必要求CPU花大量的時間去等待輸入輸出過程。例如,從鍵盤上擊入一個字符,因鍵的機(jī)械運動最快也得0.1s,而CPU從鍵閉合到存放好一個字符,處理速度最慢也僅要10μs,因此CPU將在(0.1s-10μs)/0.1s=99.99%的時間內(nèi)處于等待狀態(tài)。7.1中斷技術(shù)概述毫無疑問,“不斷地提高CPU的工作速度”在輸入輸出環(huán)節(jié)中沒有任何意義?!爸袛唷闭墙鉀QCPU和I/O設(shè)備速度不匹配所提出的一種新的理念。中斷所需的硬件電路和中斷管理機(jī)制構(gòu)成了中斷系統(tǒng)。在中斷系統(tǒng)的管理之下,主機(jī)和外設(shè)就可以同時做各自的工作,相互之間不必等待。外設(shè)需要輸入輸出操作時就向CPU發(fā)出中斷申請,在一定條件下,CPU響應(yīng)中斷請求,去為外設(shè)服務(wù)。這樣一來,計算機(jī)的工作效率得到明顯的提高。整個中斷過程如圖7-1所示。
中斷技術(shù)至少能在如下幾個方面展現(xiàn)出它的優(yōu)勢:中斷技術(shù)能及時處理隨機(jī)出現(xiàn)的各種輸入輸出信息,使微機(jī)實時控制成為現(xiàn)實。在復(fù)雜的工業(yè)生產(chǎn)過程中,被控參數(shù)因干擾的影響經(jīng)常會偏離給定值,甚至越限報警,而CPU采用中斷技術(shù)對生產(chǎn)過程周期性地進(jìn)行檢測,能及時對擾動進(jìn)行校正,使系統(tǒng)最終趨于穩(wěn)定。圖7-1中斷申請和返回
中斷技術(shù)能夠使一臺計算機(jī)“同時”執(zhí)行多道程序,“同時”解幾個題目,“同時”進(jìn)行多個運算。例如程序A執(zhí)行到某一步時要輸入新的數(shù)據(jù)或輸出中間結(jié)果,或者是因內(nèi)部軟件出錯等諸多原因要暫停,中斷系統(tǒng)就能讓CPU轉(zhuǎn)去執(zhí)行其它程序。待程序A斷點處的問題解決以后,CPU就可以返回到程序A繼續(xù)執(zhí)行。有了中斷,使CPU通過接口連接多個I/O外部設(shè)備成為可能。多個I/O設(shè)備能通過中斷系統(tǒng)的管理同時進(jìn)行工作,接受CPU的分時處理服務(wù)。面對微機(jī)運行過程中隨時可能出現(xiàn)的一些情況,如電源掉電、運算溢出等等,中斷系統(tǒng)能夠隨時對它們進(jìn)行故障處理,有效地提高了運行可靠性。中斷技術(shù)要想在CPU管理層內(nèi)正確發(fā)揮作用,有一系列問題需要解決。歸納起來,主要有如下幾個問題:CPU和申請中斷的外部設(shè)備之間通常使用兩根控制線完成它們之間的連接。一根線為中斷申請線,信號流向為從I/O設(shè)備指向CPU。如果該線為高電平表示有中斷申請信號,那么低電平則為無中斷申請出現(xiàn),這就要求I/O接口芯片有專門用于中斷申請的引腳,而CPU也有專門接收中斷申請的引腳,如8086/8088CPU的INTR。CPU在每一個指令周期中最后一個機(jī)器周期的最后一個T狀態(tài)時,會采樣INTR引腳,從而獲知是否有中斷申請出現(xiàn)。另一根控制線為中斷響應(yīng)線,如8086/8088CPU的,信號流向為從CPU指向I/O設(shè)備。當(dāng)CPU決定響應(yīng)時,I/O接口芯片就會收到有效的低電平信號。連接CPU與I/O之間的數(shù)據(jù)線承擔(dān)起傳送I/O數(shù)據(jù)的任務(wù)。圖7-2多個中斷申請
圖7-2(b)的方法不可取,因為如果每一個I/O設(shè)備的中斷申請都占CPU的1個引腳,勢必造成CPU設(shè)計與制造上的困難。圖7-2(a)的方法可行,多個I/O設(shè)備共用1根INTR線,但與此同時必須要解決3個問題:①尋找中斷源:所謂中斷源是指發(fā)出中斷申請的來源。以3個中斷源為例,當(dāng)INTR上由CPU檢測到有中斷申請信號出現(xiàn)時,CPU必須判斷是哪個中斷源發(fā)出的中斷申請。②確定中斷優(yōu)先權(quán):在多個中斷申請中,如果有兩個或多個中斷源同時提出申請,則CPU響應(yīng)哪一個中斷申請必須事先約定。為此在微機(jī)系統(tǒng)設(shè)計階段或編程時就把各個中斷源的優(yōu)先次序排好。一旦有多個中斷源同時申請,中斷管理系統(tǒng)就能判斷出優(yōu)先級別高的中斷源并優(yōu)先響應(yīng)。在處理完高級別優(yōu)先權(quán)的中斷申請后,再去響應(yīng)其它較低級別的中斷申請。③能夠?qū)崿F(xiàn)中斷嵌套:在CPU正在為某一個中斷源服務(wù)時,如果服務(wù)未完又有優(yōu)先級別較高的中斷申請出現(xiàn),那么中斷管理系統(tǒng)能中斷正在進(jìn)行的中斷服務(wù),先去響應(yīng)高優(yōu)先級的中斷申請。當(dāng)高級中斷處理完畢后再返回來繼續(xù)被中斷了的中斷服務(wù)。圖7-3畫出了有3個中斷源出現(xiàn)中斷嵌套時的程序執(zhí)行示意圖,其中中斷3的優(yōu)先級別最高,中斷1的優(yōu)先級別最低。圖7-3中斷嵌套7.1.2中斷源和中斷優(yōu)先權(quán)1.中斷源一般微機(jī)系統(tǒng)常見的中斷源有如下幾種:常用的輸入/輸出設(shè)備,如鍵盤、打印機(jī)、CRT、穿孔機(jī)等;數(shù)據(jù)通道,如磁盤、光盤等;故障信號,如電源掉電、運算結(jié)果溢出、存盤出錯等;實時時鐘,如定時時鐘信號等;軟件中斷,如調(diào)試程序中設(shè)置的中斷等。尋找中斷源的方法有兩種:查詢法和向量法。
查詢法是用軟件查詢哪一個中斷源提出了中斷。查詢前的硬件電路圖如圖7-4所示,該硬件電路以外接3個I/O中斷申請為例。查詢時,查詢程序依次從I/O端口讀入每一個中斷狀態(tài)位(使用IN指令實現(xiàn)),檢測該位狀態(tài)判斷對應(yīng)I/O設(shè)備是否有中斷申請。如果有,就轉(zhuǎn)入為該設(shè)備服務(wù)的中斷服務(wù)程序入口地址處,如果無,則測試下一個中斷狀態(tài)位。如果3個中斷狀態(tài)位都無申請,表明中斷輸入信號由出錯產(chǎn)生,程序相應(yīng)轉(zhuǎn)入出錯出口。假設(shè)用于中斷申請的I/O端口地址為40H,則一個典型的查詢中斷源程序段如下:圖7-4查詢中斷源
查詢中斷源的優(yōu)點是查詢的同時解決了不同中斷源的優(yōu)先權(quán)問題,先查詢的中斷源優(yōu)先級別高,后查詢的優(yōu)先級別低。而查詢程序是由編程人員編制的,所以尋找中斷源和確定優(yōu)先權(quán)的主動權(quán)全部掌握在編程人員手上。與此同時,其相應(yīng)硬件電路簡單,不需要有判斷和確定優(yōu)先權(quán)的硬件電路。缺點是中斷源較多時,查詢時間過長。
向量法是用中斷向量代表中斷源,預(yù)先讓每一個中斷源固定使用一個中斷向量。當(dāng)CPU響應(yīng)一個中斷源的申請時,響應(yīng)信號發(fā)出以后,該中斷源通過接口向CPU提供本中斷源專用的中斷向量,CPU根據(jù)接收到的中斷向量自動轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序入口地址。這種方法不需要用程序查詢中斷源,中斷向量由硬件電路提供。8086/8088中斷管理系統(tǒng)使用中斷向量結(jié)構(gòu),其中斷源如圖7-5所示。中斷向量又稱為中斷類型碼,用8位二進(jìn)制數(shù)表示,編號為00H~FFH(0~255),因此8086/8088CPU能處理256個不同類型的中斷源。相應(yīng)地,中斷服務(wù)程序的入口地址也有256個,每個入口占內(nèi)存4個字節(jié),提供2個16位地址值,其中高位字表示代碼段CS的值;低位字表示存放于指令指針I(yè)P的地址偏移量。所有中斷向量的集合稱為中斷向量表,共占內(nèi)存256×4B=1KB,在8086/80881MB內(nèi)存中位于00000H~003FFH單元內(nèi)。圖7-58086/8088CPU中斷源2.中斷優(yōu)先權(quán)微機(jī)中確定中斷優(yōu)先權(quán)的方法有軟件查詢和硬件設(shè)置兩種。
1)軟件查詢確定中斷優(yōu)先權(quán)使用軟件查詢中斷源的同時就已經(jīng)確定了它們各自的優(yōu)先級別。在3個中斷申請源中,如果想使中斷2申請的級別最高,中斷1申請的最低,只需用以下程序:圖7-6查詢中斷源和中斷優(yōu)先權(quán)2)硬件設(shè)置優(yōu)先權(quán)電路
(1)中斷優(yōu)先權(quán)排隊電路:該電路用編碼器和比較器等組成,結(jié)構(gòu)如圖7-7所示。以8個中斷源為例,當(dāng)任何一個中斷源有中斷申請?zhí)岢鰰r,或門都會有中斷信號輸出,但它能否送至CPU的INTR引腳,還要看與門1和與門2的另一個輸入端是否為1。與門1的另一個輸入端是比較器A>B的輸出端,只有當(dāng)A>B時,與門1才能開啟,使中斷申請信號送到CPU。如果A≤B,則比較器輸出低電平,與門1關(guān)閉,中斷申請信號不能送出。對CPU而言,沒有中斷申請信號出現(xiàn)。8個中斷信號接在8∶3優(yōu)先權(quán)編碼器上,經(jīng)過編碼器將產(chǎn)生3位二進(jìn)制編碼A2A1A0,編碼器輸出優(yōu)先權(quán)最高的編碼為111,優(yōu)先權(quán)最低的編碼為000。
如果有多個中斷源同時申請,則8∶3優(yōu)先權(quán)編碼器只識別并輸出優(yōu)先權(quán)最高的編碼。與此同時,使用程序?qū)⒄谔幚淼闹袛嗌暾垉?yōu)先權(quán)編碼,經(jīng)CPU數(shù)據(jù)總線送至優(yōu)先權(quán)寄存器進(jìn)入比較器的B2B1B0。比較器用于比較A2A1A0和B2B1B0的大小。如果A>B,則表明CPU正在處理中斷時,有更高優(yōu)先級的中斷申請從A2A1A0進(jìn)入,于是比較器輸出“1”,與門1開啟,將高優(yōu)先級的中斷申請信號送達(dá)CPU,CPU將中斷正在處理的中斷服務(wù)程序,去響應(yīng)更高級別的中斷,使中斷嵌套得以實現(xiàn)。如果A≤B,則表明CPU正在處理中斷時,有同級或低優(yōu)先級的中斷申請出現(xiàn),優(yōu)先級排隊電路將它們屏蔽掉,比較器輸出“0”,與門1關(guān)閉。
當(dāng)CPU執(zhí)行主程序沒有理睬中斷申請時,此時的優(yōu)先級失效信號為高電平,使與門2開啟,如果有中斷申請信號,則將通過與門2送到CPU的INTR引腳。當(dāng)I/O設(shè)備的個數(shù)小于等于8時,它們共用一個中斷向量產(chǎn)生電路,該電路由三態(tài)緩沖器和譯碼器構(gòu)成,由8∶3優(yōu)先權(quán)編碼器輸出A2A1A0作輸入端,經(jīng)譯碼形成8位中斷向量,不同的編碼將進(jìn)入不同的中斷服務(wù)程序入口地址。圖7-7中斷優(yōu)先權(quán)排隊電路(2)中斷鏈優(yōu)先權(quán)排隊電路:典型的中斷鏈排隊電路如圖7-8所示,由中斷觸發(fā)器和控制門電路組成,圖中以4個I/O設(shè)備為例。當(dāng)A~D中有多個中斷申請發(fā)生時,相應(yīng)多個中斷觸發(fā)器輸出高電平,經(jīng)“或”門產(chǎn)生向CPU申請中斷的INTR信號。如果CPU相應(yīng)中斷申請,按圖中的接法,只能是先從設(shè)備A開始,逐個地往下傳送。圖7-8中斷鏈?zhǔn)絻?yōu)先權(quán)排隊電路
如果設(shè)備A有中斷申請,則中斷觸發(fā)器QA輸出高電平,將與門A1開啟,中斷響應(yīng)經(jīng)A1通過,啟動相應(yīng)的控制電路轉(zhuǎn)入為A設(shè)備服務(wù)的中斷服務(wù)程序;與此同時將與門A2關(guān)閉,A2輸出低電平關(guān)閉與門B1、B2,即使設(shè)備B有中斷申請,也被B1、B2屏蔽。如果設(shè)備A沒有中斷申請,則中斷觸發(fā)器QA輸出低電平,將與門A1關(guān)閉,不能通過A1,為設(shè)備A服務(wù)的中斷服務(wù)程序也不能啟動;與此同時,與門A2開啟,經(jīng)A2送至與門B1、B2的入口處。這時要看設(shè)備B有無中斷申請。如果設(shè)備B有中斷申請,則將經(jīng)與門B1啟動為設(shè)備B服務(wù)的中斷服務(wù)程序,設(shè)備C和D被屏蔽;如果設(shè)備B沒有中斷申請,則B2開,送至C1、C2。這一過程將繼續(xù),直至查出哪個設(shè)備有申請為止。在這種排隊電路中,只要上級的輸出信號Qi為高電平,當(dāng)本級有中斷申請時,就啟動本級的中斷服務(wù)程序,屏蔽所有下級的中斷申請;當(dāng)本級無中斷申請時則允許下一級中斷。如果上級的輸出信號Qi為低電平,則CPU的中斷響應(yīng)信號直接進(jìn)入下一級允許下一級中斷。從上到下優(yōu)先級別依次為A、B、C、D,排在鏈?zhǔn)角懊娴膬?yōu)先權(quán)最高。7.1.3中斷分類按照中斷源所處的位置劃分,中斷可以分成外部中斷和內(nèi)部中斷兩種。外部中斷又可稱為硬中斷。內(nèi)部中斷指CPU內(nèi)部提出的中斷,又可稱為軟中斷。按照中斷源的中斷申請情況,中斷分為可屏蔽中斷和不可屏蔽中斷兩種不同類型。有些中斷申請如果還沒有CPU正在執(zhí)行的主程序重要和急迫,CPU就會暫時置之不理,這一類中斷就是可屏蔽中斷,大多數(shù)I/O設(shè)備的中斷申請都屬于這一類。還有一些中斷,CPU如果不理睬,則會影響到整個系統(tǒng)的正常運行,這一類中斷稱為不可屏蔽中斷。為此在中斷系統(tǒng)設(shè)計中,規(guī)定產(chǎn)生在CPU內(nèi)部的中斷除了用于調(diào)試程序而設(shè)置的單步中斷外,所有內(nèi)部中斷都不能被屏蔽,或者說“異常不能被屏蔽”。
對于由I/O外設(shè)提出的中斷申請,CPU能夠屏蔽哪些中斷申請、不能屏蔽哪些中斷申請,由微機(jī)系統(tǒng)硬件電路設(shè)計人員決定。在所有的不可屏蔽中斷申請中,掉電毫無疑問是最優(yōu)先的。一旦失去電源,電子計算機(jī)將無法工作。失電時,微機(jī)將啟動緊急處理程序,將鍵入的尚未存盤的內(nèi)容備份保存,以便重新接通電源后恢復(fù)斷電前狀態(tài),避免了大量鍵入的程序、文字、字符消失。7.280X86CPU的異常處理功能7.2.1異常的3個層次
1)故障(Fault)
可由程序自行克服恢復(fù)正常運行的異常,稱為故障。故障處理具有兩個特征:一是對故障的檢測既可以在引起故障的指令之前進(jìn)行,也可以在引起故障的指令消除之后進(jìn)行;二是故障處理過程是執(zhí)行故障服務(wù)程序,該程序是中斷服務(wù)程序的一種,在執(zhí)行“引起故障的指令”時自動轉(zhuǎn)入,以IRET結(jié)束,執(zhí)行完畢意味著消除“引起故障的指令”。2)陷阱(Trap)
可由程序自行克服但不能恢復(fù)原主程序正常運行的異常,稱為陷阱。陷阱發(fā)生在執(zhí)行“能產(chǎn)生陷阱的指令”之后。陷阱處理也有兩個特征:一是陷阱發(fā)生前程序渾然不知,只有發(fā)生后程序才能覺察;二是陷阱發(fā)生后CPU自動轉(zhuǎn)入執(zhí)行“陷阱處理服務(wù)程序”,讓CPU“擺脫”陷阱,但服務(wù)程序執(zhí)行完,不能返回到主程序斷點處的下一條指令,只能轉(zhuǎn)移到下一條應(yīng)當(dāng)執(zhí)行的指令。例如執(zhí)行一條轉(zhuǎn)移指令產(chǎn)生陷阱,服務(wù)程序執(zhí)行完后程序?qū)⑥D(zhuǎn)到要轉(zhuǎn)移的地址,而不是返回到轉(zhuǎn)移指令的下一條指令。3)失敗(Abort)
系統(tǒng)產(chǎn)生硬件故障或軟件嚴(yán)重錯誤時的異常,稱為“失敗”。出現(xiàn)失敗的原因可能是隨機(jī)的,死機(jī)就是一種失敗。沒有為失敗服務(wù)的程序存在??朔〉姆椒ㄖ皇侵匦聠印?.2.280X86CPU的異常類型表7-180X86CPU保護(hù)方式下的異常類型
表中列出了各種異常所屬層次、有無出錯碼以及產(chǎn)生條件。當(dāng)異常出現(xiàn)時,CPU將向服務(wù)程序的堆棧推入一個出錯碼。部分異常出錯碼為32位二進(jìn)制數(shù),如下所示:
其中高16位予以保留,低16位分別由13位段選擇子和3位出錯屬性占用。選擇子作索引,指向全局描述符表GDT或局部描述符表LDT中以段基址為起始地址的那一項。表指示器TI(TableIndicator)用作指示選擇子選的是哪個表,TI=0選擇GDT,TI=1選擇LDT。IDT屬性指示選擇子的歸屬,IDT=0表示13位選擇子與TI連用,形成14位指針,指向GDT或LDT,IDT=1表示選擇子使用中斷描述符(InterruptDescriptor)中的門描述符。EXT屬性提示錯誤的原因,EXT=0表明出錯因程序而引起,EXT=1表明出錯是非程序因素導(dǎo)致,例如硬件電路發(fā)生故障。除上述格式外,還有部分異常出錯碼為0,或者說無出錯碼出現(xiàn)。頁交換異常(異常14)有自己獨有的出錯碼,如下所示:其中高27位予以保留,低3位是出錯屬性。U/S表示CPU處于哪種運行方式下發(fā)生了故障,運行于管理方式發(fā)生故障時U/S=0,運行于用戶方式發(fā)生故障時U/S=1。R/W用于表示讀/寫故障,讀時產(chǎn)生故障R/W=0,寫時產(chǎn)生故障R/W=1。P是頁故障指示位,故障由頁不存在引起時P=0,故障由頁級保護(hù)沖突引起時P=1。
存放出錯碼的堆棧位于事先定義的某一段中。異常0產(chǎn)生時將除法指令第1字節(jié)推入堆棧中,除數(shù)、被除數(shù)依然是除法指令執(zhí)行之前的值。一旦故障處理程序執(zhí)行完畢,程序重新啟動。異常1常為程序調(diào)試而人為設(shè)置,其中的單步方式屬陷阱。也有故障型的,CPU中的調(diào)試狀態(tài)寄存器DR6用來反映異常類型及斷點狀態(tài),處于PL0的排錯處理程序通過對DR6的訪問處置異常1。異常3、4由執(zhí)行中斷指令引起,處理特征是推入堆棧的CS、EIP值是中斷指令下一條指令的地址,便于擺脫陷阱后程序繼續(xù)進(jìn)行。由于故障能自行克服,因此異常5的處理特征是推入堆棧的CS、EIP值就指向產(chǎn)生異常的BOUND指令。從異常6至異常255的各類異常中,凡因執(zhí)行指令引起而又位于故障層次的,大體都有這一特征。
異常8、9和18屬于失敗。異常8中推入堆棧的CS、EIP值不是引起失敗的指令地址,指令的重新啟動也不能支持雙重故障,處理過程是暫停執(zhí)行指令、進(jìn)入關(guān)機(jī)方式,CPU空轉(zhuǎn),不響應(yīng)INTR中斷,如同程序中有一條HLT指令,直至NMI中斷發(fā)生或重新啟動。異常9是程序失敗,不是系統(tǒng)失敗。異常18因錯誤代碼引起,只能關(guān)機(jī)。7.3保護(hù)虛擬地址方式下的中斷管理圖7-9中斷描述符表IDT7.3.1中斷描述符表IDT圖7-10中斷描述符
在IDT中,中斷向量不再叫中斷向量,而稱為“門”,由8字節(jié)共64位的中斷描述符予以描述,圖中的每一個中斷描述符對應(yīng)一個中斷類型,IDT最多可容納28=256個中斷類型,類型碼編號0~255,因此IDT最大長度占內(nèi)存256×64位=2KB。IDT的起始地址不固定為0H,長度也不固定為2KB,而是由48位中斷描述符表寄存器IDTR給出。IDTR中的基址(80286為24位,80386/80486為32位)給出起始地址,16位限量給出長度,并且IDTR的內(nèi)容可以用LIDT指令和SIDT指令訪問,前一條指令用于加載IDTR,后一條用于存儲IDTR。IDT中的每一個門指向了一個中斷類型的服務(wù)程序入口地址。事實上它們可能是中斷門、陷阱門和任務(wù)門這3個門中的任何一個。每個門占有8個存儲單元,其最低地址就是門的尋址地址,因此有一個門描述符的尋址地址=中斷類型碼×8。例如中斷類型1的入口地址(門描述符尋址地址)偏移量為00000008H。7.3.2中斷門和陷阱門的轉(zhuǎn)移功能中斷門、陷阱門和任務(wù)門的功能都是給中斷響應(yīng)提供中斷服務(wù)程序的入口地址,但它們的轉(zhuǎn)移條件和轉(zhuǎn)移方法是不同的。CPU在響應(yīng)中斷后,將接收到的中斷類型碼乘以8,會從IDT中找到8字節(jié)的中斷描述符。如果該描述符是一個中斷門或陷阱門,則表示異常處理程序和當(dāng)前主程序處于同一任務(wù)中;如果該描述符是一個任務(wù)門,則表示異常處理程序和當(dāng)前主程序不在同一任務(wù)中。因此,中斷門和陷阱門提供的是同一任務(wù)段內(nèi)的程序轉(zhuǎn)移;任務(wù)門提供的是不同任務(wù)段之間的程序轉(zhuǎn)移,即任務(wù)切換,從主程序到異常處理程序需要一次任務(wù)切換,從異常處理程序返回到主程序又面臨一次任務(wù)切換。
1.異常處理服務(wù)程序的入口地址使用中斷門或陷阱門實現(xiàn)程序轉(zhuǎn)移時,異常處理程序的入口地址由64位中斷描述符提供。描述符中給出了16位代碼段選擇子,由此選擇子可以從全局描述符表GDT或局部描述符表LDT中尋找到線性地址空間32位基址。而中斷描述符還給出了32位偏移量。由基址和偏移址相加后獲得32位入口地址,如圖7-11所示。圖7-11異常處理程序入口地址
2.同級轉(zhuǎn)移和向內(nèi)層轉(zhuǎn)移中斷描述符中的DPL給出了描述符特權(quán)級,用于指明異常處理程序和主程序是在同一特權(quán)級內(nèi),還是在不同特權(quán)級上。在80X86的中斷管理中,對異常的處理既可以從主程序轉(zhuǎn)移到當(dāng)前特權(quán)級的異常服務(wù)程序,又可以轉(zhuǎn)移到位于內(nèi)層特權(quán)級的異常服務(wù)程序。下列兩種情況可使程序轉(zhuǎn)移位于同一特權(quán)級內(nèi):
(1)中斷描述符中16位選擇子經(jīng)GDT或LDT指出的線性空間存儲段是個一致的代碼段,且該存儲段描述符中的DPL與當(dāng)前執(zhí)行程序的特權(quán)級CPL同級或處于更內(nèi)層;(2)中斷描述符中16位選擇子經(jīng)GDT或LDT指出的線性空間存儲段是個非一致的代碼段,且該存儲段描述符中的DPL與當(dāng)前執(zhí)行程序的特權(quán)級CPL同級。下列情況可使程序?qū)崿F(xiàn)向內(nèi)層特權(quán)級的轉(zhuǎn)移:如果16位選擇子所處存儲段是非一致的代碼段,且DPL處于內(nèi)層,CPL處于外層。這種情況同于通過調(diào)用門執(zhí)行CALL指令。中斷描述符中DPL的功能為:給出了描述符特權(quán)級;在執(zhí)行中斷指令I(lǐng)NTn和溢出指令I(lǐng)NTO時被查驗,要求DPL等于或低于CPL,否則發(fā)生保護(hù)異常;對外部中斷或除中斷2以外的其它異常,不查驗DPL。
3.從異常處理程序返回異常處理程序的最后一條指令是IRET,可完成返回到主程序。返回過程與從主程序轉(zhuǎn)入異常處理的過程正好相反:由于通過中斷門或陷阱門是同一任務(wù)內(nèi)的程序轉(zhuǎn)移,因此返回也屬于同一任務(wù)內(nèi)的返回;由于從主程序到異常處理程序的轉(zhuǎn)移是同級轉(zhuǎn)移或向更內(nèi)層特權(quán)級的轉(zhuǎn)移,因此返回也是同級返回或向更外層的返回。轉(zhuǎn)入操作如下:EFLAGS入棧,且將嵌套任務(wù)標(biāo)志NT和陷阱標(biāo)志TF置0;斷點處主程序CS、EIP入棧;中斷描述符中的RPL置入CPL,16位選擇子置入CS,偏移量置入EIP;視需要將中斷出錯碼推入新棧。
上述操作中嵌套任務(wù)標(biāo)志NT=0意味著無嵌套任務(wù),中斷或執(zhí)行調(diào)用指令時不發(fā)生任務(wù)切換,返回操作是同一任務(wù)內(nèi)的返回;返回指令完成常規(guī)的中斷處理。陷阱標(biāo)志TF=0意味著異常處理程序不允許單步執(zhí)行。相應(yīng)的返回操作如下:將可能有的中斷出錯碼彈出;將斷點處的CS、EIP彈出,恢復(fù)斷點地址;檢查彈出的CS選擇子中的RPL,將其與異常處理程序的CPL比較,若相同則不改變特權(quán)級,若不同則改變特權(quán)級,改變方向與轉(zhuǎn)入時相反,為向更外層返回;彈出EFLAGS。轉(zhuǎn)入操作由中斷響應(yīng)INTR或不可屏蔽中斷申請引起,由CPU自動完成;返回操作由執(zhí)行IRET指令引起,由CPU自動完成。
4.中斷門轉(zhuǎn)移和陷阱門轉(zhuǎn)移的區(qū)別使用中斷門轉(zhuǎn)移,在轉(zhuǎn)入異常處理操作中還會將中斷標(biāo)志IF清0,因此執(zhí)行異常處理程序中將屏蔽“可屏蔽中斷申請”。為了實現(xiàn)中斷嵌套或允許INTR,應(yīng)當(dāng)在異常處理程序中適應(yīng)位置或IRET前,使用開中斷指令。使用陷阱門轉(zhuǎn)移,不會對IF操作,IF將保持不變。由此可見,中斷門適合處理中斷,陷阱門適合處理異常。7.3.3任務(wù)門的轉(zhuǎn)移功能一個任務(wù)門在IDT中占了8個字節(jié)共64位,但只用了24位:16位TSS段選擇子和8位描述域。使用任務(wù)門的轉(zhuǎn)移過程為:16位TSS段選擇子指向一個能夠處理異常任務(wù)的TSS段;實現(xiàn)任務(wù)切換;轉(zhuǎn)入過程除使NT置成1,其余同中斷門或陷阱門的轉(zhuǎn)移。與CALL指令通過任務(wù)門引起任務(wù)切換相比較,中斷或異常通過任務(wù)門引起的任務(wù)切換將給程序轉(zhuǎn)移提供中斷出錯碼。由于嵌套任務(wù)標(biāo)志NT=1,執(zhí)行IRET指令將返回到一個嵌套的任務(wù)。
通過以上的分析能夠看到,中斷申請或異常發(fā)生后,CPU既可以通過中斷門或陷阱門進(jìn)行響應(yīng),也可以通過任務(wù)門進(jìn)行響應(yīng)。通過中斷門或陷阱門的響應(yīng)在當(dāng)前任務(wù)內(nèi)進(jìn)行,不需要任務(wù)切換;通過任務(wù)門的響應(yīng)要轉(zhuǎn)移到另一個任務(wù)內(nèi)進(jìn)行,需要任務(wù)切換。當(dāng)前任務(wù)內(nèi)的程序轉(zhuǎn)移速度快;需要任務(wù)切換轉(zhuǎn)移時,CPU運行速度慢。異常處理過程和中斷處理過程一樣,需要4步完成,但有無任務(wù)切換時每步的工作內(nèi)容不同。中斷門、陷阱門和任務(wù)門的功能是提供異常處理程序的入口地址。對于“無效TSS異?!?異常10),必須由任務(wù)門轉(zhuǎn)移,因此可以在另一個任務(wù)段尋找到一個有效的TSS段;其它異常則是通過陷阱門轉(zhuǎn)入能為各個任務(wù)共享的服務(wù)程序。對于外部中斷,采用任務(wù)門轉(zhuǎn)移為好,因為外部中斷與CPU正在執(zhí)行的任務(wù)沒有任何關(guān)系,使執(zhí)行任務(wù)與中斷服務(wù)相互隔離、互不干擾。外部中斷也可以使用中斷門轉(zhuǎn)移,這樣響應(yīng)速度快。7.4可編程中斷控制器8259A7.4.18259A的內(nèi)部結(jié)構(gòu)和端口地址
1.內(nèi)部結(jié)構(gòu)和引腳圖7-128259A的內(nèi)部結(jié)構(gòu)
中斷請求寄存器IRR:接受I/O外設(shè)來的8個中斷請求,它有“正跳變”邊沿觸發(fā)和“高電平”電平觸發(fā)兩種觸發(fā)方式。無論哪種觸發(fā)方式,中斷申請信號必須持續(xù)到CPU來的INTA響應(yīng)有效之后,否則中斷不能受理。優(yōu)先權(quán)分析器PR:8位,接收并分析IRR來的中斷申請并分析它們的優(yōu)先權(quán)。分析過程指如下內(nèi)容:按照CPU送來的控制命令字定義或修改IR0~I(xiàn)R7的優(yōu)先權(quán);判斷多個中斷申請誰最優(yōu)先;判斷是否需要中斷嵌套,保證高優(yōu)先級的中斷申請能中斷低優(yōu)先級的中斷服務(wù)程序;在中斷響應(yīng)作用下,使中斷服務(wù)寄存器ISR相應(yīng)位為1。
中斷屏蔽寄存器IMR:8位,存放CPU送來的屏蔽信號。若IMR的第i位(i=0~7)為1,則表明CPU屏蔽IRi的中斷申請??刂七壿嫞合駽PU發(fā)送由PR選定的中斷申請信號INT,高電平有效,可與8086/8088CPU的INTR直接相連;接收CPU送來的響應(yīng)信號,并將ISR相應(yīng)位置位,表示CPU正在提供中斷服務(wù);釋放中斷類型碼進(jìn)入數(shù)據(jù)總線;清除中斷申請。數(shù)據(jù)總線緩沖器:8位,傳送從CPU來的命令字;向CPU送去中斷類型碼。讀/寫邏輯:用于端口地址操作和讀、寫控制。級聯(lián)比較/緩沖器:實現(xiàn)多片8259A的級聯(lián),用于擴(kuò)展中斷源。8259A是28腳雙列直插式封裝集成芯片,其引腳如圖7-13所示,分成3部分:與CPU相連的引線(與地址總線相連的有2條,與數(shù)據(jù)總線相連的有8條,與控制總線相連的有4條),與I/O中斷源和其它8259A之間的連線,電源線。圖7-138259A的引腳圖7-148259A與CPU相連2.端口地址和控制命令字表7-2端口地址和命令字8259A的端口地址有兩個,由和A0的接法決定。兩個I/O端口都是控制端口,既不是數(shù)據(jù)端口,也不是中斷端口。兩個端口的功能是使用OUT指令寫入控制命令字。控制命令字是規(guī)定8259A工作方式和工作狀態(tài)的命令。這些命令有的在初始化階段就要寫入,有的是在工作程序中視需要寫入。哪個命令字使用哪個端口寫入,由該命令字的標(biāo)志決定。規(guī)定8259A操作的控制命令字有7個,分成兩類:初始化命令字ICW,有4個,分別稱為ICW1、ICW2、ICW3、ICW4;操作命令字OCW,有3個,分別稱為OCW1、OCW2、OCW3?!纠?-1】在圖7-19電路中,8259A的接7∶128地址譯碼器的,計算8259A的端口地址。若初始化命令字ICW1=12H,ICW2=08H,試編制初始化程序。解因A7~A1=33=0100001B,則地址為
A7~A0=0100001A0B01000010BA0=0,為偶地址
01000011BA0=1,為奇地址=端口地址為42H和43H。初始化程序為:7.4.28259A對中斷的管理
1.中斷申請和響應(yīng)過程
8259A中斷申請和響應(yīng)過程步驟如下:一個或多個I/O中斷源通過IR7~I(xiàn)R0向8259A發(fā)出中斷申請,把中斷請求寄存器IRR相應(yīng)位置位。IRR相應(yīng)位置位后,與IMR相應(yīng)屏蔽位比較,若兩位相同,則屏蔽該中斷申請;若兩位不同,則中斷申請送至PR。PR決定優(yōu)先級,把當(dāng)前未屏蔽的最高優(yōu)先級中斷申請經(jīng)INT送至CPUINTR引腳。若CPU已開中斷,則在當(dāng)前指令執(zhí)行完發(fā)出中斷響應(yīng)信號。8259A收到中斷響應(yīng)信號第一個負(fù)脈沖后將IRR相應(yīng)位復(fù)位,同時使ISR中優(yōu)先級最高的那一位置“1”。在此中斷周期內(nèi),8259A不向數(shù)據(jù)總線送任何數(shù)據(jù)。8259A收到中斷響應(yīng)信號第二個負(fù)脈沖后,將被響應(yīng)中斷源的中斷向量送至數(shù)據(jù)總線,CPU讀入中斷向量并從入口進(jìn)行中斷服務(wù)程序。8259A送出的中斷向量為1個字節(jié),組成如下:
向量字節(jié)中的T7~T3由ICW2用程序設(shè)定。中斷服務(wù)有兩種結(jié)束方式:自動結(jié)束中斷AEOI方式和非自動結(jié)束中斷EOI方式。兩種方式的區(qū)別是:自動結(jié)束方式下,在中斷響應(yīng)信號第二個負(fù)脈沖結(jié)束處,8259A將被置“1”的ISR某位復(fù)位成“0”;非自動結(jié)束方式下,在被置“1”的ISR某位一直保持高電平到中斷結(jié)束,必須要由CPU發(fā)出EOI命令才能復(fù)位成“0”。由此畫出8259A中斷申請及響應(yīng)流程圖,如圖7-15所示。圖7-15中斷響應(yīng)流程圖
2.中斷申請觸發(fā)方式中斷源向8259A的IR7~I(xiàn)R0提出中斷申請,允許兩種觸發(fā)方式輸入申請信號。
1)電平觸發(fā)方式電平觸發(fā)方式的中斷申請由IRi輸入端為高電平提出,高電平持續(xù)時間要持續(xù)到第一個中斷響應(yīng)信號到達(dá)8259A之前。這種觸發(fā)方式主要用于要求連續(xù)執(zhí)行中斷服務(wù)程序,直至中斷申請無效為止,并且能將所有中斷源申請線相“或”后從同一IRi端送入,另行使用軟件從“或”輸入中尋找中斷源。2)邊沿觸發(fā)方式邊沿觸發(fā)方式的中斷申請由IRi輸入端信號上升沿來提出。上升沿后IRi允許維持高電平不變,不會產(chǎn)生第二次中斷,脈沖信號的下降沿為下一次中斷申請做準(zhǔn)備。通常使用有正高電平的負(fù)脈沖作觸發(fā)信號,而高電平應(yīng)持續(xù)到中斷響應(yīng)發(fā)生之后。這種觸發(fā)方式主要用于不需要重復(fù)申請中斷、中斷源能方便提供負(fù)脈沖的場合,并且能與自動結(jié)束中斷EOI方式配合使用。
3.中斷優(yōu)先權(quán)管理方式
8259A對中斷優(yōu)先權(quán)的判斷有5種管理方式。
1)軟件查詢方式由CPU用軟件查詢8259A的8個中斷申請優(yōu)先級,通過操作命令字向8259A發(fā)出查詢命令,隨后用輸入命令讀取IRR寄存器狀態(tài),看哪些位已被中斷申請置位并識別優(yōu)先級最高的中斷申請。在整個操作過程前后,8259A的中斷申請并未經(jīng)INT輸出到CPU,或者CPU已關(guān)中斷。2)完全嵌套方式這種方式的8個中斷源優(yōu)先級是固定的,IR0的優(yōu)先級最高,IR1的其次,……,IR7的最低。其操作特點是CPU正在響應(yīng)中斷時,不再產(chǎn)生相同優(yōu)先級或較低優(yōu)先級的中斷申請,但允許較高優(yōu)先級的中斷申請產(chǎn)生。如果初始化程序未預(yù)先設(shè)置優(yōu)先級,則8259A自動處于這種方式。完全嵌套方式分為一般的和特殊的兩種。前者用于單片,后者用于級聯(lián)。級聯(lián)連接工作時,主片8259A不僅能將一個從片8259A的一個中斷申請送到CPU,而且還允許同一從片其它7個中斷源更高優(yōu)先級的中斷,每個從片自身形成一個嵌套結(jié)構(gòu)。不僅如此,其它從片所接中斷源提出的中斷申請,只要優(yōu)先級別高于主片正在服務(wù)的中斷源,主片8259A都能識別出。圖7-16自動輪換方式3)自動輪換方式在這種方式中,中斷源的優(yōu)先級將隨著中斷響應(yīng)結(jié)束而發(fā)生改變。改變過程遵循“平等優(yōu)先權(quán)”原則,即一個中斷源如果被響應(yīng),那么所有其它中斷源應(yīng)該在被響應(yīng)過的中斷源再次享受中斷服務(wù)之前有機(jī)會被響應(yīng)。按照這一原則,一個中斷源的中斷服務(wù)結(jié)束之后,它的優(yōu)先權(quán)自動降為最低。設(shè)IR7~I(xiàn)R0的優(yōu)先級別為IR0的最高,IR7最低,如圖7-16(a)所示,目前有IR4和IR6正在服務(wù)中。因IR4的優(yōu)先級高,故CPU正在為IR4服務(wù),IR6因嵌套還在等待,各位的ISR狀態(tài)已畫在圖中。當(dāng)IR4的中斷服務(wù)程序執(zhí)行完畢后,其返回指令將使IR4的ISR位復(fù)位,正在服務(wù)的中斷源只剩下IR6;IR4的中斷優(yōu)先級將變?yōu)樽畹?,按平等?yōu)先原則,IR5的優(yōu)先權(quán)最高,如圖7-16(b)所示。接著CPU執(zhí)行IR6的中斷服務(wù)程序(這時雖然IR5的優(yōu)先級高于IR6,但僅有IR6有中斷申請)。服務(wù)程序執(zhí)行完,IR6的ISR位復(fù)位,其中斷優(yōu)先級又自動變?yōu)樽畹停鄳?yīng)中斷優(yōu)先級如圖7-16(c)所示。4)指定優(yōu)先權(quán)方式在這種方式中,使用特殊操作命令指定某個中斷源的優(yōu)先級為最低,其它中斷源的優(yōu)先級跟著循環(huán)。例如,設(shè)IR7~I(xiàn)R0的優(yōu)先級別為IR0的最高,IR7最低。CPU正在為IR3和IR5服務(wù),如果在IR3的中斷服務(wù)程序中寫入一條使IR1為最低優(yōu)先權(quán)的命令,則IR7~I(xiàn)R0的優(yōu)先級變化將如圖7-17所示。圖7-17指定優(yōu)先權(quán)方式執(zhí)行IR3中斷服務(wù)程序優(yōu)先級順序;(b)IR3服務(wù)程序中有一條使IR1成為最低優(yōu)先權(quán)的命令5)特殊屏蔽方式這種方式是在中斷服務(wù)程序中用中斷屏蔽命令來屏蔽當(dāng)前中斷源的優(yōu)先級別,并使相應(yīng)ISS位復(fù)位。由于正在接受中斷服務(wù)的本級中斷源被屏蔽,因此優(yōu)先權(quán)低于本級的中斷申請也能被接受。表7-3中斷方式的產(chǎn)生條件7.4.38259A的命令字和編程
1.初始化編程
8259A在使用之前,必須給它規(guī)定相應(yīng)的工作方式、觸發(fā)方式、中斷管理和結(jié)束方式,為此要進(jìn)行初始化編程。所謂初始化編程就是使用OUT指令,通過控制端口向8259A寫入4個初始化命令字,這4個字是ICW1~I(xiàn)CW4,其中ICW1、ICW2必須寫入,ICW3、ICW4視需要而定。4個字寫入的順序是ICW1、ICW2、ICW3、ICW4,不能顛倒。圖7-18畫出了初始化編程的流程圖。圖7-18初始化流程圖2.初始化命令字圖7-19ICW編程格式(1)?ICW1字:ICW1的功能是規(guī)定IRi上的中斷申請采用哪種觸發(fā)方式,8259A是單片使用還是多片使用,是否需要ICW4。ICW1的標(biāo)志是D4=1,從A0=0的端口寫入。當(dāng)程序?qū)懭隝CW1字后,初始化過程開始啟動,隨后8259A發(fā)生如下事件:邊沿敏感電路復(fù)位,中斷申請輸入線必須由低變高才能申請;中斷屏蔽寄存器IMR清零;IR7賦予最低優(yōu)先權(quán);特殊屏蔽方式清除。若IC4=0,則后面無ICW4字。
(2)?ICW2字:ICW2字的功能是設(shè)置可屏蔽中斷的類型碼高5位T7~T3,低3位的值任意,可填入000。在ICW2字寫入后,低3位的值將由微機(jī)自動填入IR7~I(xiàn)R0中i的編碼。(3)?ICW3字:當(dāng)ICW1字中的D1位取“0”時,需要在寫入ICW2字后寫入ICW3字。ICW3只適用于級聯(lián),主片和從片分別有各自的ICW3。主片的ICW3指出了主片的IR7~I(xiàn)R0中哪幾個接有從片;從片的ICW3指出了從片INT接在主片IR7~I(xiàn)R0中哪一個輸入線上。
(4)?ICW4字:當(dāng)ICW1字中的D0位取“1”時,需要在寫入ICW3字后(無ICW3字時在ICW2字后)寫入ICW4字。ICW4用于設(shè)定優(yōu)先權(quán)管理、緩沖方式選擇、中斷結(jié)束方式選擇和主從片選擇?!纠?-2】單片工作時的初始化程序為:
3.操作命令字及其編程在使用輸出指令寫入初始化命令字后,8259A就能在正常工作程序中起到中斷控制作用,能接收并向CPU傳送中斷申請,按照命令字規(guī)定的中斷優(yōu)先方式裁定優(yōu)先權(quán),處于完全嵌套方向,按要求提供中斷類型碼。在工作程序執(zhí)行過程中,如果需要改變8259A的中斷優(yōu)先權(quán)管理方式或改變中斷響應(yīng)及結(jié)束方式,則可以使用輸出指令從控制口寫入操作命令字。操作命令字有3個:OCW1、OCW2、OCW3,編碼格式見圖7-20。(1)?OCW1:OCW1字用于設(shè)置屏蔽中斷源,其操作結(jié)果是將8259A的中斷屏蔽寄存器IMR各位直接置“0”或“1”。例如使中斷源IR5開放、其余全屏蔽的程序為:(2)?OCW2:OCW2字的功能是重新設(shè)置中斷優(yōu)先權(quán)管理方式和中斷結(jié)束方式,設(shè)置的方法是根據(jù)R、SL、EOI三位的取值,有三種不同的工作方式:①R、SL、EOI取值001、011時為中斷結(jié)束方式,內(nèi)含不指定用EOI結(jié)束和指定用EOI結(jié)束兩種情況。使用“不指定用EOI結(jié)束”方式能夠讓8259A獲悉中斷服務(wù)程序已經(jīng)執(zhí)行完畢,并且將ISR中正在接受服務(wù)的位復(fù)位,8259A自動確定它的優(yōu)先級別。
雖然沒有嚴(yán)格地確定它的優(yōu)先級,但通常是位于最高級別在接受服務(wù)。由此一來,如果中斷服務(wù)程序中安排有置位優(yōu)先權(quán)命令,或是8259A處于特殊屏蔽方式(此刻ISR位被IMR屏蔽,不能用EOI消除),則不宜選擇這種中斷結(jié)束方式。使用“指定EOI結(jié)束”方式除了能夠讓8259A獲悉中斷服務(wù)程序已經(jīng)執(zhí)行完畢外,還能指定由L2~L0表示的ISR位復(fù)位,如OCW2字01100011B的功能就是既指定EOI結(jié)束(又稱為非自動中斷結(jié)束),又能使ISR3復(fù)位。當(dāng)8259A工作于完全嵌套,且被服務(wù)中斷源有最高優(yōu)先級時,就要選用這種中斷結(jié)束方式。圖7-20OCW字②R、SL、EOI取值101、100時為自動輪換方式。前一種是不指定EOI上的輪換命令,特征是接受服務(wù)的最高優(yōu)先級ISR位被復(fù)位并設(shè)置成最低優(yōu)先級;后一種是每遇EOI一次,優(yōu)先級就左移輪換一次。③R、SL、EOI取值000、111、110時為特殊輪換方式,分別為清除、特殊輪換、置優(yōu)先權(quán)命令。取值00
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45869-2025鍋爐碳排放在線監(jiān)測技術(shù)指南
- 字母表示數(shù)-蘇科版新七年級數(shù)學(xué)小升初自學(xué)提升講義
- 2025地產(chǎn)項目七夕鵲橋花燈游園會(燈會良緣 鵲橋相會主題)活動策劃方案-36P
- 語篇理解之詞句猜測題-2023年中考英語一輪復(fù)習(xí)專練
- 魚我所欲也(原卷版)-2024年中考語文之文言文對比閱讀
- 山東省新能源機(jī)制電價競價見索即付履約保函(模板)
- 2025年保安證試題及答案初級
- 動畫產(chǎn)業(yè)投資策略考核試卷
- 玩具結(jié)構(gòu)設(shè)計考核試卷
- 丙綸纖維織造成本控制考核試卷
- 城市社會學(xué)課件
- 精益生產(chǎn)中的6S管理
- 全國各地濕球溫度表
- 會展合同范本
- 人教PEP版小學(xué)英語三至六年級單詞默寫表
- 礦山托管合同范本
- 咖啡吧招租招標(biāo)文件
- 女性導(dǎo)尿術(shù)課件
- 牙體解剖生理 牙的組成、分類及功能(口腔解剖生理學(xué)課件)
- a330飛機(jī)滑梯包更換jha模板
- GB/T 6739-2022色漆和清漆鉛筆法測定漆膜硬度
評論
0/150
提交評論