版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章中斷調(diào)用和輸入輸出程序設(shè)計(jì)1/6/20231第6章中斷調(diào)用和輸入輸出程序設(shè)計(jì)1/6/20231第六章中斷和輸入輸出
程序設(shè)計(jì)
本章重點(diǎn):本章主要講述中斷類(lèi)型、向量表、優(yōu)先級(jí)、處理過(guò)程、中斷程序設(shè)計(jì)以及BIOS/DOS中斷調(diào)用。6.1中斷概念 本節(jié)重點(diǎn):本節(jié)對(duì)中斷中涉及到的基本概念進(jìn)行介紹,包括中斷的分類(lèi),中斷向量表的作用,中斷是如何處理的和各中斷的優(yōu)先級(jí)等。6.1.1中斷與中斷源1、中斷:當(dāng)一種特殊事件發(fā)生時(shí),CPU停止正在運(yùn)行的程序,而轉(zhuǎn)去執(zhí)行該事件的處理程序,處理完該事件后,再返回原程序繼續(xù)正確地執(zhí)行下去,這個(gè)過(guò)程就稱(chēng)為中斷。2、中斷源:引起中斷的事件。
1/6/20232第六章中斷和輸入輸出
程序設(shè)計(jì)本章重點(diǎn):本章主要講述非屏蔽中斷請(qǐng)求中斷邏輯INTn指令I(lǐng)NT0指令除法錯(cuò)誤單步TF=1
IR08259AIR1可編程IR2中斷IR3控制器IR4
(PIC)IR5IR6IR7INTRNMICPUn410系統(tǒng)定時(shí)器鍵盤(pán)彩色/圖形接口保留(通信)串行通信接口保留(ALT打印機(jī))軟盤(pán)保留(打印機(jī))圖6.18086/8088中斷源08090A0B0C0D0E0F
8086/8088的中斷源如圖8.1所示。80286以后使用兩片8259級(jí)連結(jié)構(gòu),可管理15級(jí)中斷。
1/6/20233非屏蔽中斷請(qǐng)求中斷邏輯INTnINT0除法單步6.1.2中斷分類(lèi)8086/8088的中斷可分為兩類(lèi);外部中斷和內(nèi)部中斷。1.外部中斷外部中斷又稱(chēng)為硬中斷。它來(lái)自處理機(jī)的外部條件,如I/O設(shè)備或其他處理機(jī)等,以完全隨機(jī)的方式中斷現(xiàn)行程序而轉(zhuǎn)向中斷處理程序。外部中斷分為:非屏蔽中斷NMI和可屏蔽中斷INTR。NMI中斷:直接連在CPU上,CPU不能禁止NMI線(xiàn)上的中斷請(qǐng)求,即如果系統(tǒng)中發(fā)生了非屏蔽中斷,CPU必須做出響應(yīng)。所以NMI中斷主要用于一些緊急的故障處理,如電源掉電等。INTR中斷:用于外部設(shè)備的中斷請(qǐng)求,這些外設(shè)通過(guò)8259A可編程控制器與CPU相連。如:硬盤(pán)、鍵盤(pán)、顯示器、打印機(jī)等。1/6/202346.1.2中斷分類(lèi)1/6/20234
可屏蔽中斷被CPU響應(yīng)的兩個(gè)條件:一是該外設(shè)的中斷請(qǐng)求是否被屏蔽。二是CPU是否允許響應(yīng)中斷。這兩個(gè)條件分別由8259A中的中斷屏蔽寄存器(IMR)和標(biāo)志寄存器(PSW)中的中斷允許位IF控制。在外部的中斷請(qǐng)求未被屏蔽的情況下,CPU是否響應(yīng)中斷與標(biāo)志寄存器中的IF位有關(guān)。若IF=0,CPU禁止響應(yīng)任何外設(shè)的中斷,若IF=1,CPU則響應(yīng)外設(shè)的中斷。可用指令STI和CLI來(lái)設(shè)置或清除IF位。2.內(nèi)部中斷
內(nèi)部中斷又稱(chēng)為軟件中斷,它通常有三種情況引起:(1)由中斷指令I(lǐng)NT引起的中斷。
(2)處理CPU某些錯(cuò)誤的中斷
(3)調(diào)試程序(DEBUG)設(shè)置的中斷
1/6/20235可屏蔽中斷被CPU響應(yīng)的兩個(gè)條件:1/6/202356.1.3中斷向量表
每個(gè)中斷源都對(duì)應(yīng)著一個(gè)中斷處理程序,中斷處理程序的起始地址稱(chēng)為中斷入口地址,系統(tǒng)將各種中斷處理程序的入口地址放在一起形成一個(gè)地址表,稱(chēng)為中斷向量表。如圖8.3。
表中每四個(gè)單元的內(nèi)容構(gòu)成一個(gè)中斷處理程序的入口地址(中斷向量),其中前兩個(gè)單元存放中斷處理程序的偏移地址IP的值,后兩個(gè)單元存放中斷處理程序的段地址CS值。系統(tǒng)共可處理256種不同的中斷。每種中斷對(duì)應(yīng)著一個(gè)編號(hào),稱(chēng)為中斷類(lèi)型號(hào),其編號(hào)范圍為0~0FFH。 硬中斷的類(lèi)型號(hào)由硬件產(chǎn)生,其他中斷的類(lèi)型號(hào)由軟件中斷指令I(lǐng)NTn中的操作數(shù)n指出,根據(jù)中斷類(lèi)型號(hào)可以很容易的得到中斷向量。8086/8088的中斷向量表的起始地址位于內(nèi)存絕對(duì)地址00000H到003FFH處,故每個(gè)中斷向量的地址可由中斷類(lèi)型號(hào)乘以4計(jì)算出來(lái)。
即:中斷向量地址=中斷類(lèi)型號(hào)*41/6/202366.1.3中斷向量表1/6/202366.1.4中斷過(guò)程
中斷發(fā)生時(shí),硬件自動(dòng)完成的動(dòng)作如下:
(1)取中斷類(lèi)型號(hào)n
(2)標(biāo)志寄存器(PSW)內(nèi)容壓棧
(3)當(dāng)前代碼段寄存器(CS)內(nèi)容壓棧
(4)當(dāng)前指令指針(IP)內(nèi)容壓棧
(5)禁止外部中斷和單步中斷(置IF=0,TF=0)
(6)從中斷向量表中取4×n地址的內(nèi)容送IP,取4×n+2地址中內(nèi)容送CS
(7)轉(zhuǎn)中斷處理程序 中斷處理程序返回時(shí)使用IRET指令。
1/6/202376.1.4中斷過(guò)程1/6/202376.1.5中斷優(yōu)先級(jí)1.中斷優(yōu)先級(jí)
當(dāng)系統(tǒng)中有多個(gè)中斷源同時(shí)向CPU請(qǐng)求中斷時(shí),CPU應(yīng)如何處理呢?8086~Pentium微處理機(jī)為各中斷類(lèi)型規(guī)定了一個(gè)中斷優(yōu)先級(jí)次序。當(dāng)多個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),CPU按優(yōu)先級(jí)從高到低的次序依次處理各中斷源的請(qǐng)求。
優(yōu)先級(jí)從高到低的次序?yàn)椋?/p>
優(yōu)先級(jí)高
非屏蔽中斷(NMI)
內(nèi)部中斷
可屏蔽中斷(INTR)
優(yōu)先級(jí)低
單步中斷
可屏蔽中斷的優(yōu)先級(jí)又分為八級(jí),在正常的優(yōu)先級(jí)方式下,優(yōu)先級(jí)次序是: IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7
1/6/202386.1.5中斷優(yōu)先級(jí)1/6/202382.中斷嵌套
正在運(yùn)行的中斷處理程序,又被其他中斷源中斷,這種情況叫做中斷嵌套。8086~Pentium沒(méi)有規(guī)定中斷嵌套的層數(shù),但在實(shí)際使用時(shí),多層中斷嵌套要受到堆棧容量的限制。6.1.6中斷指令外中斷是由外設(shè)發(fā)出中斷信號(hào)引起的,沒(méi)有中斷指令。1.軟中斷指令I(lǐng)NT指令格式:INTn
指令功能:轉(zhuǎn)到相應(yīng)中斷處理程序執(zhí)行,n為中斷類(lèi)型號(hào)。在轉(zhuǎn)移過(guò)程中,系統(tǒng)首先會(huì)保護(hù)現(xiàn)場(chǎng),將CS和IP內(nèi)容壓棧后從中斷向量表相應(yīng)單元取出中斷向量,送入CS和IP,完成轉(zhuǎn)移。1/6/202392.中斷嵌套1/6/202392.中斷返回指令I(lǐng)RET
指令格式:IRET
指令功能:從中斷服務(wù)程序返回主程序。主要是恢復(fù)中斷前的CS和IP的內(nèi)容。本節(jié)小結(jié):本節(jié)對(duì)中斷的來(lái)源和處理進(jìn)行了簡(jiǎn)要介紹,通過(guò)本節(jié)的學(xué)習(xí)應(yīng)該對(duì)中斷的處理有一個(gè)整體的認(rèn)識(shí)。
1/6/2023102.中斷返回指令I(lǐng)RET1/6/2023106.2中斷處理程序設(shè)計(jì)本節(jié)重點(diǎn):本節(jié)著重講述了如何利用中斷向量表中保留的中斷類(lèi)型號(hào)編寫(xiě)自己所需的中斷處理程序。
6.2.1中斷處理程序的編寫(xiě)
CPU響應(yīng)中斷后,自動(dòng)根據(jù)中斷類(lèi)型取中斷向量,并轉(zhuǎn)入中斷處理程序。具體的工作由中斷處理程序完成,外中斷和軟中斷程序設(shè)計(jì)不盡相同。1/6/2023116.2中斷處理程序設(shè)計(jì)1/6/2023111.外中斷處理程序
外設(shè)中斷是隨機(jī)發(fā)生的,在中斷處理程序設(shè)計(jì)時(shí)必須考慮這一點(diǎn)。外中斷處理程序的
主要步驟如下:
(1)保護(hù)現(xiàn)場(chǎng)。主要指各通用寄存器內(nèi)容和除CS外代碼段寄存器的內(nèi)容。保護(hù)方法一般是壓棧。
(2)盡快完成中斷處理,以免影響其他外設(shè)中斷請(qǐng)求。
(3)恢復(fù)現(xiàn)場(chǎng)。
(4)中斷返回。用IRET指令返回。
1/6/2023121.外中斷處理程序1/6/2023122.軟中斷處理程序
軟中斷處理程序的步驟如下:
(1)考慮切換堆棧。
(2)及時(shí)開(kāi)中斷。
(3)應(yīng)該保護(hù)現(xiàn)場(chǎng)。
(4)完成中斷處理。
(5)恢復(fù)現(xiàn)場(chǎng)。(6)堆棧切換。(7)一般利用IRET指令實(shí)現(xiàn)中斷返回。1/6/2023132.軟中斷處理程序1/6/2023136.2.2設(shè)置和獲取中斷向量
在系統(tǒng)程序或應(yīng)用程序由于某種需要而提供新的中斷處理程序時(shí),就要設(shè)置對(duì)應(yīng)的中斷向量,使其指向新的中斷處理程序。1.設(shè)置中斷向量
設(shè)置中斷向量一般有兩種方法:直接寫(xiě)入法和使用DOS調(diào)用法。方法1:直接寫(xiě)入法
用MOV指令將中斷向量直接寫(xiě)入中斷向量表,下面是一個(gè)直接寫(xiě)入法的例子。
例使用直接寫(xiě)入法設(shè)置中斷向量。
CLIMOVWORDPTR[BX],OFFSETINTHANDMOVWORDPTR[BX+2],SEGINTHAND STIMOVAX,0MOVDS,AXMOVBX,n*41/6/2023146.2.2設(shè)置和獲取中斷向量CLIMOVAX,01方法2:使用DOS功能調(diào)用法
使用25H號(hào)DOS功能調(diào)用可以設(shè)置中斷向量,出口參數(shù)如下:
預(yù)置:AH=25HAL=中斷類(lèi)型號(hào)DS∶DX=中斷向量
執(zhí)行:INT21H
功能:將指定的中斷向量寫(xiě)入中斷向量表。例使用DOS功能調(diào)用設(shè)置中斷向量。
INTHAND: MOVAX,SEGINTHANDMOVDS,AXMOVDX,OFFSETINTHANDMOVAH,25HMOVAL,nINT21H
1/6/202315方法2:使用DOS功能調(diào)用法使用25H號(hào)DOS功能調(diào)用可2.獲取中斷向量
獲取中斷向量也有兩種常用方法:直接讀取法和使用DOS功能調(diào)用法。方法1:直接讀取法
利用MOV指令直接讀取中斷向量。例利用直接讀取法讀取n號(hào)中斷向量,并保存在雙字變量OLDVECTOR中:XORAX,AXMOVES,AXMOVAX,ES∶[n*4]MOVWORDPTROLDVECTOR,AXMOVAX,ES∶[n*4+2]MOVWORDPTROLDVECTOR+2,AX1/6/2023162.獲取中斷向量1/6/202316方法2:使用DOS功能調(diào)用法
利用35H號(hào)DOS功能調(diào)用可以取得指定中斷號(hào)的中斷向量,其出入口參數(shù)如下:預(yù)置:AL=中斷類(lèi)型號(hào)執(zhí)行:INT21H功能:讀取指定中斷的中斷向量,其中:ES=中斷處理程序的段地址BX=中斷處理程序的偏移地址
例7-4使用DOS功能調(diào)用取得n號(hào)中斷的中斷向量 MOVAH,35HMOVAL,n INT21HMOVWORDPTROLDVECTOR,ESMOVWORDPTROLDVECTOR,BX1/6/202317方法2:使用DOS功能調(diào)用法利用35H號(hào)DOS功6.3BIOS中斷調(diào)用本節(jié)重點(diǎn):理解BIOS在計(jì)算機(jī)中的地位,會(huì)應(yīng)用BIOS中斷調(diào)用。6.3.1BIOS概述
BIOS(BasicInput/OutputSysterm)是固化在ROM中的程序,包含了主要I/O設(shè)備的處理程序和許多常用例行程序,它們一般以中斷處理程序的形式存在。
BIOS程序直接建立在硬件基礎(chǔ)上,磁盤(pán)操作系統(tǒng)(DOS)建立在BIOS基礎(chǔ)上。通常應(yīng)用程序可以調(diào)用DOS提供的系統(tǒng)功能完成輸入輸出或其他操作,這樣做用戶(hù)可以少考慮硬件,實(shí)現(xiàn)起來(lái)容易。
1/6/2023186.3BIOS中斷調(diào)用1/6/202318 BIOS中斷程序處于DOS功能調(diào)用和硬件環(huán)境之間,和DOS功能調(diào)用相比其優(yōu)點(diǎn)是效率高,缺點(diǎn)是編程相對(duì)復(fù)雜;和直接對(duì)硬件編程相比,優(yōu)點(diǎn)是實(shí)現(xiàn)相對(duì)容易,缺點(diǎn)是效率相對(duì)低。6.3.2BIOS中斷調(diào)用方法1.BIOS中斷調(diào)用方法BIOS調(diào)用方法很簡(jiǎn)單,基本步驟為:
⑴置入口參數(shù)
⑵使用中斷語(yǔ)句INTn,其中n為中斷號(hào)。
例如:MOVAH,0 INT1AH1/6/202319 BIOS中斷程序處于DOS功能調(diào)用和硬件環(huán)境之間,和DOS例:BIOS鍵盤(pán)中斷(INT16H)AH功能返回參數(shù)
0從鍵盤(pán)讀一字符AL=字符碼,AH=掃描碼1讀鍵盤(pán)緩沖區(qū)的字符如ZF=0,AL=字符碼,AH=掃描碼如ZF=1,緩沖區(qū)空2取鍵盤(pán)狀態(tài)字節(jié)AL=鍵盤(pán)狀態(tài)字節(jié)字符數(shù)字鍵字符碼為ASCII碼功能鍵、控制鍵字符碼為0對(duì)應(yīng)一個(gè)掃描碼本節(jié)小結(jié):概括的介紹了BIOS及其中斷調(diào)用方法,要求掌握BIOS中斷的使用。1/6/202320例:BIOS鍵盤(pán)中斷(INT16H)AH6.4DOS功能調(diào)用
本節(jié)重點(diǎn):DOS基本I/O功能調(diào)用。6.4.1DOS功能調(diào)用概述1.什么是DOS功能調(diào)用
DOS系統(tǒng)內(nèi)包含了許多涉及設(shè)備驅(qū)動(dòng)和文件管理等方面的子程序,DOS的各種命令就是通過(guò)適當(dāng)?shù)卣{(diào)用這些子程序?qū)崿F(xiàn)的。為了方便程序員使用,把這些子程序編寫(xiě)成相對(duì)獨(dú)立的程序模塊而且編上號(hào)。這些編了號(hào)的可由程序員調(diào)用的子程序就稱(chēng)為DOS的功能調(diào)用或稱(chēng)為系統(tǒng)調(diào)用。
DOS功能調(diào)用主要包括三方面的子程序:設(shè)備驅(qū)動(dòng)(基本I/O)、文件管理和其他(包括內(nèi)存管理、置取時(shí)間、置取終端向量、終止程序等)。
1/6/2023216.4DOS功能調(diào)用 1/6/2023212.調(diào)用方法可按如下方法調(diào)用DOS功能調(diào)用:(1)設(shè)置入口參數(shù)。有部分功能調(diào)用是不需要入口參數(shù)的,但大部分功能調(diào)用需要入口參數(shù),在調(diào)用前應(yīng)按要求準(zhǔn)備好入口參數(shù)。(2)功能調(diào)用號(hào)送AH寄存器。(3)發(fā)軟中斷指令“INT21H”。1/6/2023222.調(diào)用方法1/6/2023226.4.2基本I/O功能調(diào)用1.帶回顯鍵盤(pán)輸入(1號(hào)功能調(diào)用)
功
能:從標(biāo)準(zhǔn)輸入設(shè)備上讀入一字符,并將該字符回顯在標(biāo)準(zhǔn)輸出設(shè)備上。通常情況下,標(biāo)準(zhǔn)輸入設(shè)備就是鍵盤(pán),標(biāo)準(zhǔn)輸出設(shè)備就是顯示器。如果鍵盤(pán)無(wú)字符可讀,則一直等待到有字符可讀(即按鍵)。入口參數(shù):無(wú)。出口參數(shù):AL=讀到字符的ASCII碼。1/6/2023236.4.2基本I/O功能調(diào)用1/6/2023232.顯示輸出(2號(hào)功能調(diào)用)功
能:向標(biāo)準(zhǔn)輸出設(shè)備寫(xiě)一字符。通常情況下,標(biāo)準(zhǔn)輸出設(shè)備就是屏幕。入口參數(shù):DL=要輸出字符的ASCII碼。出口參數(shù):無(wú)。
3.顯示字符串(9號(hào)功能調(diào)用)功
能:在標(biāo)準(zhǔn)輸出上顯示一個(gè)字符串。通常情況下,標(biāo)準(zhǔn)輸出就是屏幕。入口參數(shù):DS:DX=需要輸出字符串的首地址,字符串以字符‘$’為結(jié)束標(biāo)志。出口參數(shù):無(wú)。
1/6/2023242.顯示輸出(2號(hào)功能調(diào)用)1/6/2023244.輸入字符串(0AH號(hào)功能調(diào)用)功
能:從標(biāo)準(zhǔn)輸入上讀一個(gè)字符串。通常情況下,標(biāo)準(zhǔn)輸入就是鍵盤(pán)。入口參數(shù):DS:DX=輸入緩沖區(qū)首地址。出口參數(shù):接收到的輸入字符串在緩沖區(qū)中。
本節(jié)小結(jié):本節(jié)簡(jiǎn)要介紹了DOS功能介紹和基本I/O功能調(diào)用,要求掌握這些基本功能調(diào)用。1/6/2023254.輸入字符串(0AH號(hào)功能調(diào)用)1/6/202325
本章小結(jié):本章先對(duì)中斷進(jìn)行了簡(jiǎn)要介紹,包括中斷的類(lèi)型、處理過(guò)程、優(yōu)先級(jí)和中斷向量表等。然后,介紹了中斷程序設(shè)計(jì)和中斷向量的設(shè)置和獲得。最后,具體講述了DIOS和DOS中斷功能調(diào)用。
本章重點(diǎn)要熟悉中斷的處理過(guò)程,在此基礎(chǔ)上能編寫(xiě)自己的中斷程序并設(shè)置中斷向量,能熟練使用BIOS和DOS中斷功能調(diào)用。
1/6/202326 1/6/202326第6章中斷調(diào)用和輸入輸出程序設(shè)計(jì)1/6/202327第6章中斷調(diào)用和輸入輸出程序設(shè)計(jì)1/6/20231第六章中斷和輸入輸出
程序設(shè)計(jì)
本章重點(diǎn):本章主要講述中斷類(lèi)型、向量表、優(yōu)先級(jí)、處理過(guò)程、中斷程序設(shè)計(jì)以及BIOS/DOS中斷調(diào)用。6.1中斷概念 本節(jié)重點(diǎn):本節(jié)對(duì)中斷中涉及到的基本概念進(jìn)行介紹,包括中斷的分類(lèi),中斷向量表的作用,中斷是如何處理的和各中斷的優(yōu)先級(jí)等。6.1.1中斷與中斷源1、中斷:當(dāng)一種特殊事件發(fā)生時(shí),CPU停止正在運(yùn)行的程序,而轉(zhuǎn)去執(zhí)行該事件的處理程序,處理完該事件后,再返回原程序繼續(xù)正確地執(zhí)行下去,這個(gè)過(guò)程就稱(chēng)為中斷。2、中斷源:引起中斷的事件。
1/6/202328第六章中斷和輸入輸出
程序設(shè)計(jì)本章重點(diǎn):本章主要講述非屏蔽中斷請(qǐng)求中斷邏輯INTn指令I(lǐng)NT0指令除法錯(cuò)誤單步TF=1
IR08259AIR1可編程IR2中斷IR3控制器IR4
(PIC)IR5IR6IR7INTRNMICPUn410系統(tǒng)定時(shí)器鍵盤(pán)彩色/圖形接口保留(通信)串行通信接口保留(ALT打印機(jī))軟盤(pán)保留(打印機(jī))圖6.18086/8088中斷源08090A0B0C0D0E0F
8086/8088的中斷源如圖8.1所示。80286以后使用兩片8259級(jí)連結(jié)構(gòu),可管理15級(jí)中斷。
1/6/202329非屏蔽中斷請(qǐng)求中斷邏輯INTnINT0除法單步6.1.2中斷分類(lèi)8086/8088的中斷可分為兩類(lèi);外部中斷和內(nèi)部中斷。1.外部中斷外部中斷又稱(chēng)為硬中斷。它來(lái)自處理機(jī)的外部條件,如I/O設(shè)備或其他處理機(jī)等,以完全隨機(jī)的方式中斷現(xiàn)行程序而轉(zhuǎn)向中斷處理程序。外部中斷分為:非屏蔽中斷NMI和可屏蔽中斷INTR。NMI中斷:直接連在CPU上,CPU不能禁止NMI線(xiàn)上的中斷請(qǐng)求,即如果系統(tǒng)中發(fā)生了非屏蔽中斷,CPU必須做出響應(yīng)。所以NMI中斷主要用于一些緊急的故障處理,如電源掉電等。INTR中斷:用于外部設(shè)備的中斷請(qǐng)求,這些外設(shè)通過(guò)8259A可編程控制器與CPU相連。如:硬盤(pán)、鍵盤(pán)、顯示器、打印機(jī)等。1/6/2023306.1.2中斷分類(lèi)1/6/20234
可屏蔽中斷被CPU響應(yīng)的兩個(gè)條件:一是該外設(shè)的中斷請(qǐng)求是否被屏蔽。二是CPU是否允許響應(yīng)中斷。這兩個(gè)條件分別由8259A中的中斷屏蔽寄存器(IMR)和標(biāo)志寄存器(PSW)中的中斷允許位IF控制。在外部的中斷請(qǐng)求未被屏蔽的情況下,CPU是否響應(yīng)中斷與標(biāo)志寄存器中的IF位有關(guān)。若IF=0,CPU禁止響應(yīng)任何外設(shè)的中斷,若IF=1,CPU則響應(yīng)外設(shè)的中斷。可用指令STI和CLI來(lái)設(shè)置或清除IF位。2.內(nèi)部中斷
內(nèi)部中斷又稱(chēng)為軟件中斷,它通常有三種情況引起:(1)由中斷指令I(lǐng)NT引起的中斷。
(2)處理CPU某些錯(cuò)誤的中斷
(3)調(diào)試程序(DEBUG)設(shè)置的中斷
1/6/202331可屏蔽中斷被CPU響應(yīng)的兩個(gè)條件:1/6/202356.1.3中斷向量表
每個(gè)中斷源都對(duì)應(yīng)著一個(gè)中斷處理程序,中斷處理程序的起始地址稱(chēng)為中斷入口地址,系統(tǒng)將各種中斷處理程序的入口地址放在一起形成一個(gè)地址表,稱(chēng)為中斷向量表。如圖8.3。
表中每四個(gè)單元的內(nèi)容構(gòu)成一個(gè)中斷處理程序的入口地址(中斷向量),其中前兩個(gè)單元存放中斷處理程序的偏移地址IP的值,后兩個(gè)單元存放中斷處理程序的段地址CS值。系統(tǒng)共可處理256種不同的中斷。每種中斷對(duì)應(yīng)著一個(gè)編號(hào),稱(chēng)為中斷類(lèi)型號(hào),其編號(hào)范圍為0~0FFH。 硬中斷的類(lèi)型號(hào)由硬件產(chǎn)生,其他中斷的類(lèi)型號(hào)由軟件中斷指令I(lǐng)NTn中的操作數(shù)n指出,根據(jù)中斷類(lèi)型號(hào)可以很容易的得到中斷向量。8086/8088的中斷向量表的起始地址位于內(nèi)存絕對(duì)地址00000H到003FFH處,故每個(gè)中斷向量的地址可由中斷類(lèi)型號(hào)乘以4計(jì)算出來(lái)。
即:中斷向量地址=中斷類(lèi)型號(hào)*41/6/2023326.1.3中斷向量表1/6/202366.1.4中斷過(guò)程
中斷發(fā)生時(shí),硬件自動(dòng)完成的動(dòng)作如下:
(1)取中斷類(lèi)型號(hào)n
(2)標(biāo)志寄存器(PSW)內(nèi)容壓棧
(3)當(dāng)前代碼段寄存器(CS)內(nèi)容壓棧
(4)當(dāng)前指令指針(IP)內(nèi)容壓棧
(5)禁止外部中斷和單步中斷(置IF=0,TF=0)
(6)從中斷向量表中取4×n地址的內(nèi)容送IP,取4×n+2地址中內(nèi)容送CS
(7)轉(zhuǎn)中斷處理程序 中斷處理程序返回時(shí)使用IRET指令。
1/6/2023336.1.4中斷過(guò)程1/6/202376.1.5中斷優(yōu)先級(jí)1.中斷優(yōu)先級(jí)
當(dāng)系統(tǒng)中有多個(gè)中斷源同時(shí)向CPU請(qǐng)求中斷時(shí),CPU應(yīng)如何處理呢?8086~Pentium微處理機(jī)為各中斷類(lèi)型規(guī)定了一個(gè)中斷優(yōu)先級(jí)次序。當(dāng)多個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),CPU按優(yōu)先級(jí)從高到低的次序依次處理各中斷源的請(qǐng)求。
優(yōu)先級(jí)從高到低的次序?yàn)椋?/p>
優(yōu)先級(jí)高
非屏蔽中斷(NMI)
內(nèi)部中斷
可屏蔽中斷(INTR)
優(yōu)先級(jí)低
單步中斷
可屏蔽中斷的優(yōu)先級(jí)又分為八級(jí),在正常的優(yōu)先級(jí)方式下,優(yōu)先級(jí)次序是: IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7
1/6/2023346.1.5中斷優(yōu)先級(jí)1/6/202382.中斷嵌套
正在運(yùn)行的中斷處理程序,又被其他中斷源中斷,這種情況叫做中斷嵌套。8086~Pentium沒(méi)有規(guī)定中斷嵌套的層數(shù),但在實(shí)際使用時(shí),多層中斷嵌套要受到堆棧容量的限制。6.1.6中斷指令外中斷是由外設(shè)發(fā)出中斷信號(hào)引起的,沒(méi)有中斷指令。1.軟中斷指令I(lǐng)NT指令格式:INTn
指令功能:轉(zhuǎn)到相應(yīng)中斷處理程序執(zhí)行,n為中斷類(lèi)型號(hào)。在轉(zhuǎn)移過(guò)程中,系統(tǒng)首先會(huì)保護(hù)現(xiàn)場(chǎng),將CS和IP內(nèi)容壓棧后從中斷向量表相應(yīng)單元取出中斷向量,送入CS和IP,完成轉(zhuǎn)移。1/6/2023352.中斷嵌套1/6/202392.中斷返回指令I(lǐng)RET
指令格式:IRET
指令功能:從中斷服務(wù)程序返回主程序。主要是恢復(fù)中斷前的CS和IP的內(nèi)容。本節(jié)小結(jié):本節(jié)對(duì)中斷的來(lái)源和處理進(jìn)行了簡(jiǎn)要介紹,通過(guò)本節(jié)的學(xué)習(xí)應(yīng)該對(duì)中斷的處理有一個(gè)整體的認(rèn)識(shí)。
1/6/2023362.中斷返回指令I(lǐng)RET1/6/2023106.2中斷處理程序設(shè)計(jì)本節(jié)重點(diǎn):本節(jié)著重講述了如何利用中斷向量表中保留的中斷類(lèi)型號(hào)編寫(xiě)自己所需的中斷處理程序。
6.2.1中斷處理程序的編寫(xiě)
CPU響應(yīng)中斷后,自動(dòng)根據(jù)中斷類(lèi)型取中斷向量,并轉(zhuǎn)入中斷處理程序。具體的工作由中斷處理程序完成,外中斷和軟中斷程序設(shè)計(jì)不盡相同。1/6/2023376.2中斷處理程序設(shè)計(jì)1/6/2023111.外中斷處理程序
外設(shè)中斷是隨機(jī)發(fā)生的,在中斷處理程序設(shè)計(jì)時(shí)必須考慮這一點(diǎn)。外中斷處理程序的
主要步驟如下:
(1)保護(hù)現(xiàn)場(chǎng)。主要指各通用寄存器內(nèi)容和除CS外代碼段寄存器的內(nèi)容。保護(hù)方法一般是壓棧。
(2)盡快完成中斷處理,以免影響其他外設(shè)中斷請(qǐng)求。
(3)恢復(fù)現(xiàn)場(chǎng)。
(4)中斷返回。用IRET指令返回。
1/6/2023381.外中斷處理程序1/6/2023122.軟中斷處理程序
軟中斷處理程序的步驟如下:
(1)考慮切換堆棧。
(2)及時(shí)開(kāi)中斷。
(3)應(yīng)該保護(hù)現(xiàn)場(chǎng)。
(4)完成中斷處理。
(5)恢復(fù)現(xiàn)場(chǎng)。(6)堆棧切換。(7)一般利用IRET指令實(shí)現(xiàn)中斷返回。1/6/2023392.軟中斷處理程序1/6/2023136.2.2設(shè)置和獲取中斷向量
在系統(tǒng)程序或應(yīng)用程序由于某種需要而提供新的中斷處理程序時(shí),就要設(shè)置對(duì)應(yīng)的中斷向量,使其指向新的中斷處理程序。1.設(shè)置中斷向量
設(shè)置中斷向量一般有兩種方法:直接寫(xiě)入法和使用DOS調(diào)用法。方法1:直接寫(xiě)入法
用MOV指令將中斷向量直接寫(xiě)入中斷向量表,下面是一個(gè)直接寫(xiě)入法的例子。
例使用直接寫(xiě)入法設(shè)置中斷向量。
CLIMOVWORDPTR[BX],OFFSETINTHANDMOVWORDPTR[BX+2],SEGINTHAND STIMOVAX,0MOVDS,AXMOVBX,n*41/6/2023406.2.2設(shè)置和獲取中斷向量CLIMOVAX,01方法2:使用DOS功能調(diào)用法
使用25H號(hào)DOS功能調(diào)用可以設(shè)置中斷向量,出口參數(shù)如下:
預(yù)置:AH=25HAL=中斷類(lèi)型號(hào)DS∶DX=中斷向量
執(zhí)行:INT21H
功能:將指定的中斷向量寫(xiě)入中斷向量表。例使用DOS功能調(diào)用設(shè)置中斷向量。
INTHAND: MOVAX,SEGINTHANDMOVDS,AXMOVDX,OFFSETINTHANDMOVAH,25HMOVAL,nINT21H
1/6/202341方法2:使用DOS功能調(diào)用法使用25H號(hào)DOS功能調(diào)用可2.獲取中斷向量
獲取中斷向量也有兩種常用方法:直接讀取法和使用DOS功能調(diào)用法。方法1:直接讀取法
利用MOV指令直接讀取中斷向量。例利用直接讀取法讀取n號(hào)中斷向量,并保存在雙字變量OLDVECTOR中:XORAX,AXMOVES,AXMOVAX,ES∶[n*4]MOVWORDPTROLDVECTOR,AXMOVAX,ES∶[n*4+2]MOVWORDPTROLDVECTOR+2,AX1/6/2023422.獲取中斷向量1/6/202316方法2:使用DOS功能調(diào)用法
利用35H號(hào)DOS功能調(diào)用可以取得指定中斷號(hào)的中斷向量,其出入口參數(shù)如下:預(yù)置:AL=中斷類(lèi)型號(hào)執(zhí)行:INT21H功能:讀取指定中斷的中斷向量,其中:ES=中斷處理程序的段地址BX=中斷處理程序的偏移地址
例7-4使用DOS功能調(diào)用取得n號(hào)中斷的中斷向量 MOVAH,35HMOVAL,n INT21HMOVWORDPTROLDVECTOR,ESMOVWORDPTROLDVECTOR,BX1/6/202343方法2:使用DOS功能調(diào)用法利用35H號(hào)DOS功6.3BIOS中斷調(diào)用本節(jié)重點(diǎn):理解BIOS在計(jì)算機(jī)中的地位,會(huì)應(yīng)用BIOS中斷調(diào)用。6.3.1BIOS概述
BIOS(BasicInput/OutputSysterm)是固化在ROM中的程序,包含了主要I/O設(shè)備的處理程序和許多常用例行程序,它們一般以中斷處理程序的形式存在。
BIOS程序直接建立在硬件基礎(chǔ)上,磁盤(pán)操作系統(tǒng)(DOS)建立在BIOS基礎(chǔ)上。通常應(yīng)用程序可以調(diào)用DOS提供的系統(tǒng)功能完成輸入輸出或其他操作,這樣做用戶(hù)可以少考慮硬件,實(shí)現(xiàn)起來(lái)容易。
1/6/2023446.3BIOS中斷調(diào)用1/6/202318 BIOS中斷程序處于DOS功能調(diào)用和硬件環(huán)境之間,和DOS功能調(diào)用相比其優(yōu)點(diǎn)是效率高,缺點(diǎn)是編程相對(duì)復(fù)雜;和直接對(duì)硬件編程相比,優(yōu)點(diǎn)是實(shí)現(xiàn)相對(duì)容易,缺點(diǎn)是效率相對(duì)低。6.3.2BIOS中斷調(diào)用方法1.BIOS中斷調(diào)用方法BIOS調(diào)用方法很簡(jiǎn)單,基本步驟為:
⑴置入口參數(shù)
⑵使用中斷語(yǔ)句INTn,其中n為中斷號(hào)。
例如:MOVAH,0 INT1AH1/6/202345 BIOS中斷程序處于DOS功能調(diào)用和硬件環(huán)境之間,和DOS例:BIOS鍵盤(pán)中斷(INT16H)AH功能返回參數(shù)
0從鍵盤(pán)讀一字符AL=字符碼,AH=掃描碼1讀鍵盤(pán)緩沖區(qū)的字符如ZF=0,AL=字符碼,AH=掃描碼如ZF=1,緩沖區(qū)空2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 應(yīng)急預(yù)案快遞公司(3篇)
- 剛性填埋場(chǎng)施工方案(3篇)
- 應(yīng)急預(yù)案云平臺(tái)(3篇)
- 展臺(tái)應(yīng)急預(yù)案范文(3篇)
- 2025年社區(qū)養(yǎng)老服務(wù)信息化平臺(tái)與智能安防系統(tǒng)融合可行性研究報(bào)告
- 焊條安裝施工方案(3篇)
- 眼布施工方案(3篇)
- 社交空間活動(dòng)策劃方案(3篇)
- 立春藝術(shù)活動(dòng)方案策劃(3篇)
- 蘇格蘭跨年活動(dòng)方案策劃(3篇)
- 2026廣東廣州開(kāi)發(fā)區(qū)統(tǒng)計(jì)局(廣州市黃埔區(qū)統(tǒng)計(jì)局)招聘市商業(yè)調(diào)查隊(duì)隊(duì)員1人考試備考試題及答案解析
- 餐飲服務(wù)儀容儀表及禮貌培訓(xùn)
- 惠州市惠陽(yáng)區(qū)(2025年)社工崗位考試題目及答案
- 2026年遼寧現(xiàn)代服務(wù)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能筆試參考題庫(kù)帶答案解析
- (2025年)病理學(xué)試題及答案
- 貴州省貴陽(yáng)市普通中學(xué)2024-2025學(xué)年高二上學(xué)期語(yǔ)文期末試卷(含答案)
- 廣西醫(yī)療機(jī)構(gòu)病歷書(shū)寫(xiě)規(guī)范與治理規(guī)定(第三版)
- 雨課堂在線(xiàn)學(xué)堂《項(xiàng)目管理概論》作業(yè)單元考核答案
- GB/T 96.2-2002大墊圈C級(jí)
- 第九章-第一節(jié)-美洲概述
- GB/T 13004-2016鋼質(zhì)無(wú)縫氣瓶定期檢驗(yàn)與評(píng)定
評(píng)論
0/150
提交評(píng)論