中斷調(diào)用和輸入輸出程序設(shè)計(jì)概要課件_第1頁(yè)
中斷調(diào)用和輸入輸出程序設(shè)計(jì)概要課件_第2頁(yè)
中斷調(diào)用和輸入輸出程序設(shè)計(jì)概要課件_第3頁(yè)
中斷調(diào)用和輸入輸出程序設(shè)計(jì)概要課件_第4頁(yè)
中斷調(diào)用和輸入輸出程序設(shè)計(jì)概要課件_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論