| 1.什么是I/O端口? CPU使用什么指令與外設進(jìn)行數據交換? 答:CPU與I/O設備通過(guò)硬件接口或控制器相連接,這些接口或控制器都有數量不等的端口,這些端口有統一的地址編碼,CPU通過(guò)這些端口使用輸入輸出指令I(lǐng)N、OUT與外設進(jìn)行數據交換。 2.CPU為什么不能用MOV指令進(jìn)行I/O數據傳輸? 答:在80x86微機系統中,I/O端口編址在一個(gè)獨立的地址空間中,它和存儲器是完全分離的。因此,對于存儲器的存取操作使用MOV指令,而與端口進(jìn)行信息交換的操作使用專(zhuān)門(mén)的I/O指令,二者不能混淆。 3.使用查詢(xún)方式進(jìn)行輸入輸出的優(yōu)缺點(diǎn)是什么? 答:使用查詢(xún)方式編程可直接在端口級上輸入輸出信息,數據的傳送速度和吞吐量比較高,另外在控制多個(gè)設備的I/O時(shí),可在程序中安排它們的優(yōu)先級,最先查詢(xún)的設備,其工作的優(yōu)先級也最高。修改程序中的查詢(xún)次序,實(shí)際上也就修改了設備的優(yōu)先級,這樣以最簡(jiǎn)便的方法實(shí)現了對設備優(yōu)先級的控制。查詢(xún)方式的缺點(diǎn)主要是在查詢(xún)過(guò)程中,要反復的查詢(xún)等待,浪費了CPU原本可執行大量指令的時(shí)間,而且由詢(xún)問(wèn)轉向相應的處理程序的時(shí)間較長(cháng),尤其在設備比較多的情況下。 4.什么是中斷? 答:計算機在執行程序過(guò)程中,遇到需要處理的事件時(shí),暫停當前正在運行的程序,轉去執行有關(guān)的服務(wù)程序,處理完后自動(dòng)返回原程序,這個(gè)過(guò)程稱(chēng)為中斷(interrupt)。中斷在現代計算機系統中是一種非常重要的技術(shù),輸入輸出設備和主機交換數據、分時(shí)操作、實(shí)時(shí)系統、多處理機系統、計算機網(wǎng)絡(luò )和分布式計算機系統都要用到這種技術(shù)。 5.中斷分為幾類(lèi)? 答:中斷可分為內中斷和外中斷。內中斷是由計算機內部原因引起的中斷,內中斷又稱(chēng)為軟中斷,它通常由三種情況引起: (1) 由中斷指令I(lǐng)NT引起; (2) 由于CPU的某些錯誤而引起,如溢出中斷、除法錯中斷等; (3) 為調試程序(DEBUG)設置的中斷,如單步中斷、斷點(diǎn)中斷;外中斷指由外部事件引起的中斷,又稱(chēng)為硬中斷。 硬件中斷主要有兩種來(lái)源: (1) 非屏蔽中斷(NMI),如電源故障中斷、實(shí)時(shí)鐘中斷等。 (2) 可屏蔽中斷,一般是由于各種外部設備請求CPU提供服務(wù)所引起的中斷。 6.什么是中斷類(lèi)型? 答:80x86中斷系統能處理256種中斷,每種中斷都安排一個(gè)編號,稱(chēng)之為中斷類(lèi)型。256種中斷類(lèi)型號排列為00~0FFH。 7.中斷向量表的作用是什么? 答:為了提高響應中斷的速度,通常把所有中斷處理程序的入口地址(或稱(chēng)為中斷向量)匯集在中斷向量表中,當CPU響應中斷時(shí),根據中斷源的中斷類(lèi)型號,直接從中斷向量表中得到相應的入口地址,并從該地址開(kāi)始執行中斷處理程序。
8.中斷向量表一般安排在存儲器的什么位置? 答:存儲器最低的1K字節,地址從00000 ~ 03FFH存放中斷向量。中斷向量表中的256項中斷向量對應256種中斷類(lèi)型,每項占用四個(gè)字節,其中兩個(gè)字節存放中斷處理程序的段地址(16位),另兩個(gè)字節存放偏移地址(16位)。 9.某外設能否得到CPU的中斷服務(wù)取決于什么控制條件? 答:從外設發(fā)出中斷請求到CPU響應中斷,有兩個(gè)控制條件是起決定性作用的: (1) 該外設的中斷請求是否被屏蔽,這個(gè)條件由8259A的中斷屏蔽寄存器(端口地址為21H)控制; (2) CPU是否允許響應中斷,這由標志寄存器(FLAG)中的中斷允許位IF控制。但CPU不能禁止非屏蔽中斷,對于非屏蔽中斷CPU總會(huì )響應。 10.什么是開(kāi)中斷和關(guān)中斷?如何控制開(kāi)中斷和關(guān)中斷? 答:允許CPU響應外設的中斷請求叫做開(kāi)中斷,此時(shí)IF=1;不允許CPU響應外設的中斷請求叫做關(guān)中斷,此時(shí)IF=0。有兩條指令能控制開(kāi)、關(guān)中斷:STI 開(kāi)中斷(IF=1)CLI 關(guān)中斷(IF=0) 11.CPU響應中斷的過(guò)程是怎樣的? 答:(1)取中斷類(lèi)型號N ?。?)寄存器(FLAG)內容入棧 ?。?)當前代碼段寄存器(CS)內容入棧 ?。?)當前指令計數器(IP)內容入棧 ?。?)禁止硬件中斷和單步中斷(IF=0, TF=0) ?。?)從中斷向量表中取4?N的字節內容送IP,取4?N+2中的字節內容送CS ?。?)轉中斷處理程序 12.為什么產(chǎn)生中斷后,要清除IF和TF位? 答:在中斷發(fā)生時(shí),CPU自動(dòng)清除了IF位和TF位,這樣設計的目的是使CPU轉入中斷處理程序后,不允許再產(chǎn)生新的中斷,包括單步執行。如果在執行中斷處理程序的過(guò)程中,還允許外部的中斷,可通過(guò)STI指令再把IF置為1。 13.當多個(gè)中斷源同時(shí)向CPU請求中斷時(shí),CPU應如何處理? 答:各種中斷源事先安排有中斷優(yōu)先級,當多個(gè)中斷源同時(shí)申請中斷時(shí),CPU先比較他們的優(yōu)先級,,然后從優(yōu)先級高到優(yōu)先級低的次序來(lái)依次處理各個(gè)中斷源的中斷請求。 14.在中斷處理程序中,如何發(fā)出EOI命令? 答:EOI命令即中斷結束命令,用兩條指令完成: MOV AL,20H ;EOI位為1的命令碼 OUT 20H,AL ;命令碼送中斷命令寄存器(端口地址為20H) 15.中斷程序的編寫(xiě)方法是什么? 答:在主程序中要為中斷做如下準備工作: ?。?)設置中斷向量(使用INT 21H的25H功能) ?。?)設置中斷設備的屏蔽位(I/O端口21H) ?。?)開(kāi)中斷(STI) 中斷處理程序的編寫(xiě)步驟: ?。?)保存工作寄存器的內容 ?。?)如允許中斷嵌套,則開(kāi)中斷(STI) ?。?)中斷處理功能 ?。?)關(guān)中斷 (CLI) ?。?)送中斷結束命令(EOI)給中斷命令寄存器(I/O端口20H) ?。?)恢復工作寄存器內容 ?。?)返回被中斷的程序(RET) 16.什么是中斷嵌套?處理中斷嵌套時(shí)應注意什么? 答:中斷嵌套是指正在運行的中斷處理程序,又被其它中斷源中斷的情況。一個(gè)正在執行的中斷處理程序,在開(kāi)中斷(IF=1)的情況下,能被優(yōu)先級高于它的中斷源中斷,但如果要被同級或低級的中斷源中斷,則必須發(fā)出EOI命令,清除正在執行的中斷請求,才能響應同級或低級的中斷。80X86沒(méi)有規定中斷嵌套的深度(中斷程序又被中斷的層次),但在實(shí)際使用時(shí),多重的中斷嵌套要受到堆棧容量的限制,所以在編寫(xiě)中斷程序時(shí),一定要考慮有足夠的堆棧單元來(lái)保存多次中斷的斷點(diǎn)及各寄存器的內容。 17.什么情況下中斷處理子程序需要結束中斷(EOI)? 結束中斷指令起什么作用? 答:在外中斷處理程序之中或在結束之前,發(fā)出中斷結束命令EOI能清除當前正在處理的中斷請求,以便能夠在該處理程序的過(guò)程中或結束之后,再響應同級或低級的中斷。 18.系統提供的INT 1CH的中斷處理程序是怎樣的?為什么? 答:系統提供的INT 1CH的中斷處理程序中只有一條指令:IRET。實(shí)際上這是系統為用戶(hù)設置的一個(gè)中斷類(lèi)型號,用戶(hù)可以用自己設計的中斷處理代碼來(lái)代替原1CH程序。如果用戶(hù)有某種定時(shí)周期性的工作需要完成,就可以利用系統定時(shí)器的中斷間隔(約每秒中斷18.2次),嵌套調用1CH的中斷處理程序,并用計數的方法控制時(shí)間周期。如,需要10秒鐘的周期,則將計數值設置為182。定時(shí)器中斷程序每調用一次INT 1CH,計數值減1,當計數值為0時(shí),說(shuō)明已到10秒。 |