微型計算機:第7章 中斷系統(tǒng)_第1頁
微型計算機:第7章 中斷系統(tǒng)_第2頁
微型計算機:第7章 中斷系統(tǒng)_第3頁
微型計算機:第7章 中斷系統(tǒng)_第4頁
微型計算機:第7章 中斷系統(tǒng)_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第7章中斷系統(tǒng)7.1中斷的基本概念7.28086的中斷結(jié)構(gòu)7.3可編程中斷控制器8259A7.4中斷調(diào)用7.1中斷的基本概念7.1.1中斷與中斷源1.中斷在CPU正常運行程序時,由于內(nèi)部事件、外部事件或由程序預先安排的事件所引起的CPU暫時停止正在運行的程序,而轉(zhuǎn)去執(zhí)行請求CPU服務(wù)的內(nèi)部/外部事件或預先安排事件的服務(wù)程序,待服務(wù)程序處理完畢后又返回去繼續(xù)執(zhí)行被暫停的程序2.中斷源發(fā)出中斷請求的外部設(shè)備或引起中斷的內(nèi)部原因稱為中斷源常見的中斷源有(1)故障中斷,如電源掉電、內(nèi)存奇偶錯等;(2)軟件中斷,如CPU執(zhí)行某些指令或操作引起的中斷等;(3)輸入輸出設(shè)備中斷,如打印機、CRT、磁盤等;(4)實時時鐘,如定時器提供的實時信號等。3.中斷識別即找出是哪一個中斷源發(fā)出的中斷請求中斷識別的目的是要形成該中斷源的中斷服務(wù)程序的入口地址,以便CPU將此地址置入CS:IP寄存器,從而實現(xiàn)程序的轉(zhuǎn)移7.1.2中斷系統(tǒng)的功能中斷系統(tǒng)是指實現(xiàn)中斷功能的軟硬件的統(tǒng)稱1.正確識別中斷請求,實現(xiàn)中斷響應(yīng)、中斷處理及中斷返回2.實現(xiàn)中斷優(yōu)先級排隊3.實現(xiàn)中斷嵌套7.1.3中斷處理過程一個完整的中斷處理過程包括中斷請求、中斷判優(yōu)、中斷響應(yīng)、中斷處理和中斷返回五個基本階段。圖7-1中斷處理過程判優(yōu)邏輯進行優(yōu)先排隊中斷源提出中斷請求CPU執(zhí)行完當前指令CPU取下一條指令中斷請求信號有效?CPU允許中斷否?CPU關(guān)閉中斷保護程序斷點找出中斷源,形成中斷服務(wù)程序入口地址,并轉(zhuǎn)向中斷服務(wù)程序保護現(xiàn)場

執(zhí)行中斷服務(wù)程序恢復現(xiàn)場CPU開放中斷

返回原程序斷點處中斷請求中斷判優(yōu)中斷響應(yīng)中斷處理中斷返回是是否否

1.中斷請求中斷請求是中斷過程的第一步。中斷源產(chǎn)生中斷請求的條件,因中斷源而異2.中斷判優(yōu)由于中斷產(chǎn)生的隨機性,可能出現(xiàn)兩個或兩個以上的中斷源同時提出中斷請求的情況。這時就必須要求設(shè)計者事先根據(jù)中斷源的輕重緩急,給每個中斷源確定一個中斷級別——優(yōu)先權(quán)。3.中斷響應(yīng)中斷優(yōu)先權(quán)確定后,發(fā)出中斷申請的中斷源中優(yōu)先權(quán)最高的中斷請求就被送到CPU的中斷請求引腳上。4.中斷處理中斷處理通常是由中斷服務(wù)程序完成的。中斷服務(wù)程序一般按下面模式設(shè)計(1)保護現(xiàn)場(2)執(zhí)行中斷服務(wù)程序(3)恢復現(xiàn)場5.中斷返回通常在中斷返回前,要求執(zhí)行一條開中斷指令,以便讓CPU能再次響應(yīng)中斷,然后執(zhí)行中斷返回指令,返回到原程序的中斷斷點處繼續(xù)原程序的執(zhí)行。7.1.4中斷判優(yōu)的方法1.軟件查詢判優(yōu)IRQ0IRQ1IRQ2IRQ3IRQ4IRQ5IRQ6IRQ7≥1并行輸入接口

INTRD0~D7

CPU圖7-2軟件查詢判優(yōu)電路中斷請求寄存器斷點保護IRQ0?IRQ1?IRQ7?中斷返回中斷源0的中斷服務(wù)程序中斷源1的中斷服務(wù)程序中斷源7的中斷服務(wù)程序NNNYYY圖7-3軟件查詢程序流程圖2.鏈式電路判優(yōu)鏈式判優(yōu)的基本思想是將所有的中斷源構(gòu)成一個鏈(稱為菊花鏈),各中斷源在鏈中的前后順序是根據(jù)中斷源優(yōu)先級別的高低來排列的,排在鏈前面高優(yōu)先級別的中斷會自動封鎖低優(yōu)先級別的中斷CPUINTAINTR≥1A≥1B1#I/O7#I/O接口接口≥1≥1≥1≥11≥111圖7-4鏈式優(yōu)先權(quán)排隊電路0#I/O接口3.專用硬件方式在微型機中普遍使用一種可編程的中斷控制器(如Intel8259A)實現(xiàn)中斷優(yōu)先級的管理。4.中斷的多級嵌套一個中斷請求尚未處理完,又轉(zhuǎn)而處理新的中斷請求,稱為中斷的多級嵌套或稱為多級中斷請求中斷響應(yīng)中斷響應(yīng)請求中斷返回中斷返回低級中斷服務(wù)程序高級中斷服務(wù)程序圖7-5兩級中斷嵌套的示意圖實現(xiàn)多級中斷需要注意的兩個問題:(1)實現(xiàn)多重中斷的重要條件是在中斷服務(wù)執(zhí)行過程中必須開放中斷。(2)必須加入屏蔽本級和較低級的中斷請求的環(huán)節(jié),保證只有高級中斷源才能中斷低級的中斷處理。7.28086的中斷結(jié)構(gòu)7.2.18086的中斷類型8086具有強有力的中斷系統(tǒng),可以處理256種不同的中斷。如果將這些中斷進行分類,則可以分為兩大類:外部中斷和內(nèi)部中斷。INTn指令中斷邏輯INT3INTO指令除數(shù)為指令指令中斷0中斷NMIINTR非屏蔽中斷請求可屏蔽中斷請求中斷控制器(8259A)軟件中斷硬件中斷圖7-68086的中斷源類型1.外部中斷(1)非屏蔽中斷NMI。用戶不能用軟件屏蔽的中斷。(2)可屏蔽中斷INTR。8086的INTR中斷請求信號來自中斷控制器8259A,是電平觸發(fā)方式,高電平有效。2.內(nèi)部中斷(1)專用中斷。在中斷向量表中,類型號0~4中除了類型號2的NMI非屏蔽中斷外,其余均為專用的軟件中斷,它們通常是由某個標志位引起的中斷。①0型中斷——除法出錯中斷。②1型中斷——單步中斷。③3型中斷——斷點中斷(INT)。④4型中斷——溢出中斷(INTO指令)(2)指令中斷——INTn指令,其類型號就是給定的n。

類型0中斷入口(除法出錯)類型1中斷入口(單步中斷)類型2中斷入口(NMI)類型3中斷入口(斷點中斷)類型4中斷入口(溢出中斷)類型5中斷入口類型31中斷入口類型32中斷入口類型255中斷入口IPCSIPCSIPCS00000400800C01001407C0803FC專用中斷系統(tǒng)備用供用戶使用圖7-7中斷向量表7.2.2中斷向量和中斷向量表2011年11月9日星期三7.2.3中斷向量的裝入下面介紹幾種填寫中斷向量表的方法例7-1用MOV指令寫入中斷向量。假設(shè)中斷向量號為60H,中斷服務(wù)程序的段基址是SEG_INTR,偏移地址是OFFSET_INTR,則填寫中斷向量表的程序段為:

┇CLI

;關(guān)中斷CLD

;內(nèi)存地址加1MOVAX,0MOVES,AX;給ES賦值為0MOVDI,60H*4;中斷向量指針→DIMOVAX,OFFSET_INTR;中斷服務(wù)程序偏移值→AXSTOSW;AX→[DI][DI+1]中,然后DI+2MOVAX,SEG_INTR;中斷服務(wù)程序的段基址→AXSTOSW;AX→[DI+2][DI+3]STI;關(guān)中斷

┇例7-2將中斷服務(wù)程序的入口地址直接寫入中斷向量表。

MOVAX,00HMOVES,AX

MOVBX,60H*4;中斷號×4→BXMOVAX,OFFSET_INTR

;中斷服務(wù)程序偏移值→AX

MOVES:[BX],AX;裝入偏移地址

MOVAX,SEG_INTR;中斷服務(wù)程序的段基址→AXMOVES:[BX+2],AX;裝入段基址

┇7.2.48086的中斷響應(yīng)過程1.內(nèi)部中斷響應(yīng)過程(1)將類型號乘4,計算出中斷向量的地址;(2)CPU的標志寄存器入棧,以保護各個標志位,此操作類似于PUSHF指令。(3)清除IF和TF標志,屏蔽新的INTR中斷和單步中斷(4)保存斷點,即把斷點處的IP和CS值壓入堆棧,先壓入CS值,再壓入IP值。(5)根據(jù)第一步計算出來的地址從中斷向量表中取出中斷服務(wù)程序的入口地址(段和偏移),分別送至CS和IP中。(6)轉(zhuǎn)入中斷服務(wù)程序執(zhí)行。內(nèi)部中斷具有如下一些特點:①中斷由CPU內(nèi)部引起,中斷類型號的獲得與外部無關(guān),CPU不需要執(zhí)行中斷響應(yīng)周期去獲得中斷類型號。②除單步中斷處,內(nèi)部中斷無法用軟件禁止,不受中斷允許標志IF的影響。③內(nèi)部中斷何時發(fā)生是可以預測的,這有點類似于子程序調(diào)用。2.外部中斷響應(yīng)過程(1)非屏蔽中斷響應(yīng)。(2)可屏蔽中斷響應(yīng)。CLKALELOCKINTAD7~D0T1T2T3T4T1T2T3T4

第一個總線周期INTA第二個總線周期INTA中斷類型號圖7-88086對INTR的中斷響應(yīng)時序IRET指令的操作取指令執(zhí)行指令執(zhí)行完畢?內(nèi)部中斷?NMI?INTR?TF=1?IF=1?NYYYYYYYNNNNNNN類型號=0~255類型號=2中斷響應(yīng)讀取類型號類型號=1保護FLAGSTEMP←TFTF=IF=0CS、IP入棧計算向量表地址低字→IP高字→CSNMI?轉(zhuǎn)入中斷服務(wù)程序TEMP=1?執(zhí)行中斷服務(wù)程序恢復CS和IP恢復FLAGS返回被中斷的程序圖7-9中斷響應(yīng)和中斷處理流程7.3可編程中斷控制器8259A7.3.18259A的內(nèi)部結(jié)構(gòu)和引腳特性1.8259A的內(nèi)部結(jié)構(gòu)讀/寫邏輯數(shù)據(jù)總線緩沖器數(shù)據(jù)總線緩沖器中斷服務(wù)寄存器ISR中斷請求寄存器IRR優(yōu)先權(quán)分析器PR中斷屏蔽寄存器IMR控制邏輯INTAINTIR0IR7圖5-98259A內(nèi)部結(jié)構(gòu)框圖D7~D0RDWRCAS0CAS1CAS2SP/ENA0CS2.8259A的引腳特性D7D6WRD5D4D3CSRDD2D1D0CAS0CAS1GNDINTIR2IR1IR0INTAVCCA0IR6IR5IR4IR3IR7SP/ENCAS2圖7-108259A引腳信號282726252423222120191817161512345678910111213147.3.28259A的工作過程1.中斷源通過IR0~IR7向8259A發(fā)中斷請求,使得8259A的中斷請求寄存器IRR的相應(yīng)位置1。2.IRR中經(jīng)中斷屏蔽寄存器IMR允許后的置位位進入優(yōu)先權(quán)判別器PR,PR將其中最高優(yōu)先權(quán)的中斷請求從INT輸出,送至CPU的INTR端。3.若CPU處于開中斷狀態(tài),則在當前指令執(zhí)行結(jié)束后,啟動中斷響應(yīng)總線操作,發(fā)出兩個負脈沖作為響應(yīng)信號。

4.8259A接收到第一個負脈沖,完成如下工作:(1)使ISR相應(yīng)位置1,表示CPU已為該中斷請求服務(wù)。(2)使IRR的相應(yīng)位清0。5.8259A接收到第二個負脈沖,將中斷類型號送上數(shù)據(jù)總線。中斷類型號由用戶編程和中斷請求引腳IRi的序號i共同決定(CPU讀取中斷類型號,經(jīng)響應(yīng)過程后,進入中斷服務(wù)程序,直到服務(wù)結(jié)束返回)。6.若8259A工作在自動結(jié)束中斷方式AEOI,則8259A清除ISR的相應(yīng)位,否則直至中斷服務(wù)結(jié)束,發(fā)出EOI命令,才能使ISR中的相應(yīng)位清0。7.3.38259A的工作方式8259A有多種工作方式,這些工作方式可以通過初始化命令字(ICW1~ICW4)和操作命令字(OCW1~OCW4)來設(shè)置。

1.中斷屏蔽方式

(1)普通屏蔽方式。利用操作命令字OCW1,使屏蔽寄存器IMR中的一位或數(shù)位置1來屏蔽一個或數(shù)個中斷源的中斷請求。若要開放某一個中斷源的中斷請求,則將IMR中相應(yīng)的位置0。

(2)特殊屏蔽方式。在某些場合,執(zhí)行某一個中斷服務(wù)程序時,要求允許另一個優(yōu)先級比它低的中斷請求被響應(yīng),此時可采用特殊屏蔽方式可通過OCW3的D6D5=11來設(shè)定。

2.中斷嵌套方式

(1)全嵌套方式。

在此種方式下,中斷優(yōu)先級按IR0~IR7順序進行排隊,并且只允許中斷級別高的中斷源去中斷級別低的中斷服務(wù)程序,但不能相反。這是8259A最常用的方式。在對8259A進行初始化以后,沒有設(shè)置其他優(yōu)先級方式,則自動按此方式工作。

(2)特殊全嵌套方式。

與全嵌套方式基本相同,所不同的是在特殊全嵌套方式下,當執(zhí)行某一級中斷服務(wù)程序時,可響應(yīng)同級的中斷請求,從而實現(xiàn)對同級中斷請求的特殊嵌套(8259A級聯(lián)使用時,某從片的8個中斷源對主片來說,可以認為是同級的)。

特殊全嵌套方式用于多片級聯(lián)。3.優(yōu)先級控制方式

(1)優(yōu)先級自動循環(huán)方式。在這種方式下,優(yōu)先級順序不是固定不變的,一個設(shè)備得到中斷服務(wù)后,其優(yōu)先級自動降為最低。其初始的優(yōu)先級順序規(guī)定為IR0,IR1,IR2,…,IR7

該方式用于系統(tǒng)中多個中斷源優(yōu)先級相等的場合

(2)優(yōu)先級特殊循環(huán)方式。這種方式與優(yōu)先級自動循環(huán)方式惟一的區(qū)別是,其初始的優(yōu)先級不是固定IR0為最高,然后開始循環(huán),而是由程序指定IR0~IR7中任意一個為最高優(yōu)先級,然后再按順序自動循環(huán),決定優(yōu)先級。

4.中斷結(jié)束方式

(1)自動中斷結(jié)束方式。在中斷服務(wù)程序中,中斷返回之前,不需要發(fā)出中斷結(jié)束命令就會自動清除該中斷源所對應(yīng)的ISR位(實際上在CPU發(fā)出第二個INTA信號時,8259即自動清除ISR中的對應(yīng)位)。這種方式用在多個中斷不會嵌套的系統(tǒng)中。

(2)非自動中斷結(jié)束方式。在中斷服務(wù)程序返回之前,必須發(fā)中斷結(jié)束命令才能使ISR中的當前服務(wù)位清除。7.3.48259A的級聯(lián)電路因一塊8259A最多只能管理8級中斷,在多于8級中斷的系統(tǒng)中,必須將多塊8259A級聯(lián)使用,如圖7-12地址總線數(shù)據(jù)總線地址總線D7~D0SP/ENINTA0CSD7~D0CAS0CAS1CAS2從片8259AIR7IR0IR1圖7-12參與8259A組成的級聯(lián)中斷系統(tǒng)圖地址譯碼8086/8088CPUINTR地址譯碼INTAWRRD接總線驅(qū)動器的OE端接數(shù)據(jù)總線IOWCMCE/PDENIORC8288總線驅(qū)動器SP/ENCAS0CAS1CAS2主片8259A地址IR0IR1A0IR7驅(qū)動器INTA連接其他芯片來自其他從片外設(shè)的中斷申請7.3.58259A的編程命令1.初始化命令字ICW寫在奇地址中NNYY寫ICW1寫ICW2寫ICW3要ICW4?寫ICW4級聯(lián)?初始化完寫在偶地址中圖7-128259A初始化流程與處理器接口

A0RD*WR*CS*功能

0100110000101010×110×××1寫入ICW1、OCW2和OCW3寫入ICW2~ICW4和OCW1讀出IRR、ISR和查詢字讀出IMR數(shù)據(jù)總線高阻狀態(tài)數(shù)據(jù)總線高阻狀態(tài)如何進一步區(qū)分各個端口地址?ICW1(A0=0

)×××1LTIM0SNGLIC4D7D6D5D4D3D2D1D0×——表示可以任意為1為0都可以(建議為0)1——只能為1,作為標志中斷觸發(fā)方式:LTIM=1,電平觸發(fā)方式LTIM=0,邊沿觸發(fā)方式規(guī)定單片或級連方式:SNGL=1,單片方式SNGL=0,級連方式是否寫入ICW4IC4=1,要寫入ICW4IC4=0,不寫入ICW4,即ICW4規(guī)定的位全為0ICW2(A0=1

)T7T6T5T4T3×××D7D6D5D4D3D2D1D0設(shè)置中斷向量號T7~T3為中斷向量號的高5位低3位由8259A自動確定:IR0為000、IR1為001、……、IR7為111ICW3(A0=1

)S7S6S5S4S3S2/ID2S1/ID1S0/ID0D7D6D5D4D3D2D1D0級連命令字主片8259A:Si=1對應(yīng)IRi接有從片;否則IRi沒有連接從片從片8259A:ID0~ID2編碼說明從片INT引腳接到主片哪個IR引腳(3)ICW3的格式和含義如是主片,格式如下:

如是從片,則ICW3的格式如下:

如何判斷誰是主片?ICW4(A0=1

)000SFNMBUFM/SAEOIμPMD7D6D5D4D3D2D1D0嵌套方式:特殊全嵌套方式(SFNM=1),主片采用的方式普通全嵌套方式(SFNM=0)數(shù)據(jù)線的緩沖方式:緩沖方式(BUF=1),M/S定主從。非緩沖方式(BUF=0),引腳決定主片/從片選擇(緩沖方式,由軟件選擇)主片(M/S=1)從片(M/S=0)中斷結(jié)束方式:自動中斷結(jié)束(AEOI=1)非自動中斷結(jié)束(AEOI=0),8086發(fā)EOI命令給8259微處理器類型:16位80x86(PM=1)8位8080/8085(PM=0)2.

操作命令字OCW8259A工作期間,可以隨時接受操作命令字OCWOCW共有3個:OCW1~OCW3寫入時沒有順序要求,需要哪個OCW就寫入那個OCWD7D6D5D4D3D2D1D0

OCW1(A0=1

)M7M6M5M4M3M2M1M0D7D6D5D4D3D2D1D0屏蔽命令字內(nèi)容寫入中斷屏蔽寄存器IMRDi=Mi對應(yīng)IRi,為1禁止IRi中斷;為0允許IRi中斷。各位互相獨立。利用順序與ICW2~ICW4區(qū)分開OCW2(A0=0

)(1)設(shè)置優(yōu)先級循環(huán)方式(2)組成兩類中斷結(jié)束命令: 一般的中斷結(jié)束命令 特殊的中斷結(jié)束命令RSLEOI00L2L1L0D7D6D5D4D3D2D1D0R、SL和EOI配合使用產(chǎn)生中斷結(jié)束EOI命令和改變優(yōu)先權(quán)順序L2~L0的3位編碼指定IR引腳利用D4/D3與ICW1~OCW3區(qū)分開OCW3(A0=0)

功能: (1)設(shè)置和撤銷特殊屏蔽方式 (2)設(shè)置中斷查詢方式 (3)設(shè)置對內(nèi)部寄存器的讀出命令(1)初始化命令字ICW1——芯片控制字(2)初始化命令字ICW2——中斷類型號命令字ADIA0D7

D6

D5

D4

D3

D2

D1

D00LTIM1SNGLICW4A0D7D6D5

D4

D3

D2

D1

D0T7T61T3T4T5(3)初始化命令字ICW3——主/從片初始化字主片ICW3的格式如下:

A0D7

D6

D5D4D3D2D1D01IR0從片ICW3的格式如下:

ID2

A0D7

D6

D5

D4D3

D2

D1

D0001000ID1ID0(4)初始化命令字ICW4——方式控制字M/SA0

D7

D6

D5

D4

D3

D2D1D0001

BUFBUSFNM0PMAEOI

A0D7D6D5D4D3D2D1D012.操作命令字OCW(1)操作命令字OCW1——屏蔽操作命令字

(2)操作命令字OCW2——中斷方式命令字

A0D7D6D5D4D3D2D1D0RSL1L0L1L200EOI(3)操作命令字OCW3——狀態(tài)操作命令字

A0D7D6D5D4D3D2D1D00ESMM0RISRRP10SMM7.3.68259A編程舉例例7-3以IBMPC/AT(80286)微機中的8259A為例說明其初始化編程方法(1)分析在286以上的PC機中,共使用了兩片8259A(新型的PC中已將中斷控制器集成到了芯片組中,但功能上與8259A完全兼容),兩片級聯(lián)使用,共可管理15級中斷。各級中斷的用途如表7-1所示。中斷向量地址指針

00020H 00024H 00028H 001C0H 001C4H 001C8H 001CCH 001D0H 001D4H 001D8H 001DCH 0002CH 00030H 00034H 00038H 0003CH8259A引腳 主片IR0

主片IR1

主片IR2

從片IR0

從片IR1

從片IR2

從片IR3

從片IR4

從片IR5

從片IR6

從片IR7

主片IR3

主片IR4

主片IR5

主片IR6

主片IR7中斷類型號08H09H0AH70H71H72H73H74H75H76H77H0BH0CH0DH0EH0FH優(yōu)先級

0(最高)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15(最低)中斷源定時器鍵盤從片8259A

時鐘/日歷鐘

IRQ9(保留)

IRQ10(保留)IRQ11(保留)IRQ12(保留)協(xié)處理器硬盤控制器IRQ15(保留)異步通信口(COM2)異步通信口(COM1)并行打印機2軟盤驅(qū)動器并行打印口1表7-1IBMPC/AT的中斷源和類型號(2)設(shè)計①8259A初始化編程;主片8259A的初始化

MOVAL,11H;寫入ICW1,設(shè)定邊沿觸發(fā),級聯(lián)方式

OUT20H,ALJMPINTR1;延時,等待8259A操作結(jié)束,下同INTR1:MOVAL,08H

;寫入ICW2,設(shè)定IRQ0的中斷類型號為08HOUT21H,ALJMPINTR2INTR2:MOVAL,04H;寫入ICW3,設(shè)定主片IRQ2級聯(lián)方式

OUT21H,ALJMPINTR3INTR3:MOVAL,11H;寫入ICW4,設(shè)定特殊全嵌套方式,一般EOI方式

OUT21H,AL┇;從片8259A的初始化

MOVAL,11H

;寫入ICW1,設(shè)定邊沿觸發(fā),級聯(lián)方式

OUT0A0H,ALJMPINTR5INTR5:MOVAL,70H

;寫入ICW2,設(shè)定從片IR0,即IRQ8的中斷類型號為70HOUT0A1H,ALJMPINTR6INTR6:MOVAL,02H

;寫入ICW3,設(shè)定從片級聯(lián)到主片的IRQ2OUT0A1H,ALJMPINTR7INTR7:MOVAL,01H

;寫入ICW4,設(shè)定普通全嵌套方式,一般EOI方式

OUT0A1H,AL┇②級聯(lián)工作編程;讀ISR的內(nèi)容

MOVAL,0BH;寫入OCW3,讀ISR命令

OUT0A0H,ALNOP;延時,等待8259A操作結(jié)束

INAL,0A0H;讀出ISR┇;向從片發(fā)EOI命令

MOVAL,20HOUT0A0H,AL;寫從片EOI命令

┇;向主片發(fā)EOI命令

MOVAL,20HOUT20H,AL;寫主片EOI命令

┇7.4中斷調(diào)用7.4.1DOS和BIOS中斷的調(diào)用方法1.將入口參數(shù)送入指定的調(diào)用寄存器,如果沒有入口參數(shù),就不需要這一步。2.將功能號送入AH寄存器,將子功能號送入AL寄存器,如果沒有子功能號,不需要送AL。3.產(chǎn)生一個軟中斷INTn,轉(zhuǎn)入子程序入口。4.通過CPU的返回寄存器返回中斷處理結(jié)果——出口參數(shù)。如果沒有返回值,也就不需要返回寄存器。例7-4使用INT21H的2BH系統(tǒng)功能設(shè)置日期為2004年5月1日。其程序段為:MOVDL,1;入口參數(shù)送入指定寄存器:把日子放入DL中MOVDH,5;把月份放入DH中MOVCX,2004

;把年份放入CX中,CX中的年份值是以1980為基準的偏移值SUBCX,1980;減去1980才為年份設(shè)定值MOVAH,2BH;設(shè)置日期功能號送入AH寄存器INT21H;執(zhí)行DOS調(diào)用CMPAL,0FFH;根據(jù)出口參數(shù)AL=00H,設(shè)置成功;AL=FFH,判斷失敗JEERROR;不成功,轉(zhuǎn)錯誤處理┇;成功,往下執(zhí)行ERROR:(略)7.4.2DOS系統(tǒng)功能調(diào)用1.字符設(shè)備I/O控制字符設(shè)備包括鍵盤、顯示器、打印機、串行通信接口等。通過DOS系統(tǒng)功能調(diào)用可以實現(xiàn)單個字符或字符串的輸入與輸出控制例7-5從鍵盤輸入一個字符,并同時在顯示屏上輸出,當鍵入字符‘$’時,則停止操作。

DON1:MOVAH,O1H;置單字符輸入

INT21HCMPAL,‘$’;是結(jié)束字符嗎

JZDON2;是,轉(zhuǎn)向DON2MOVDL,ALMOVAH,02H;顯示輸出字符

INT21HJMPDON1DON2:INT0;程序結(jié)束功能號功能入口參數(shù)出口參數(shù)Ctrl-c處理01H等待從鍵盤輸入一個字符并顯示它無AL=鍵入字符能02H顯示1個字符DL=要顯示字符的ACCII碼無能03H從COM1接收1個字符無AL=接收的字符能04H從COM1發(fā)送1個字符DL=發(fā)送字符的ASCII碼無能05H向打印機輸出1個字符DL=打印字符的ASCII碼無能06H立即從鍵盤輸入1個字符或向顯示器輸出1個字符DL=FFH為輸入;DL≠FFH為輸出,且DL=輸出字符DL=FFH,立即從鍵盤接收1個字符至AL;若無碼可讀,則返回ZF=1;DL≠FFH,無出口參數(shù)能07H等待從鍵盤輸入一個字符無AL=鍵入字符否08H等待從鍵盤輸入一個字符無AL=鍵入字符能09H顯示一個字符串DS:DX=顯示字符串的首地址無能0AH從鍵盤接收1個字符串存入緩沖區(qū),并顯示它DS:DX=輸入字符串緩沖區(qū)地址無能表7-2字符設(shè)備的系統(tǒng)功能例7-6從鍵盤輸入一串字符,并在顯示屏上顯示出來。注意09H功能顯示字符串時是以‘$’符號結(jié)束的,因此,要顯示的字符串一律以‘$’結(jié)尾DATASEGMENTBUFSIZEDB50;最多可鍵入50個字符ACTLENDB?;實際鍵入的字符數(shù)CHRASDB50DUP(20H);實際鍵入的字符從此開始存放

DB‘$’;為顯示而加的字符串結(jié)束符DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA┇MOVDX,OFFSETBUFSIZE;鍵入緩沖區(qū)起始偏移地址送DXMOVAH,0AH;字符串輸入功能

INT21H;輸入字符串并放入緩沖區(qū)┇

MOVDX,OFFSETCHARS;輸入的字符串起始地址送DXMOVAH,09H;字符串顯示功能

INT21H;顯示鍵入的字符串┇2.文件管理功能號功能入口參數(shù)出口參數(shù)3CH建立文件DS:DX=ASCIIZ字符串首地址CX=文件屬性AX=句柄(文件號)CF=0,成功;CF=1,出錯3DH打開文件DS:DX=ASCIIZ字符串首地址AL=訪問碼(0-讀,1-寫,2-讀寫)AX=句柄(文件號)CF=0,成功;CF=1,出錯3EH關(guān)閉文件BX=句柄(文件號)無3FH讀文件BX=句柄(文件號)CX=欲讀的字節(jié)數(shù)DS:DX=讀緩沖區(qū)首址AX=實際讀出的字節(jié)數(shù)CF=0,成功;CF=1,出錯40H寫文件BX=句柄(文件號)CX=欲寫的字節(jié)數(shù)DS:DX=寫緩沖區(qū)首址AX=實際寫入的字節(jié)數(shù)CF=0,成功;CF=1,出錯41H刪除文件BX=ASCIIZ字符串首地址無42H移動文件讀/寫指針BX=句柄(文件號)CX:DX=移動距離(字節(jié)數(shù))AL=移動方式碼(0-從頭移,1-從當前位置移,2-從尾移)DX:AX=新的指針位置(新位置距文件頭的距離)CF=0,成功;CF=1,出錯表7-3文件管理的DOS系統(tǒng)功能例7-7在磁盤中建立一個文件,并顯示完成的結(jié)果。假設(shè)BUF1中存放正常信息,BUF2中存放錯誤信息

LEADX,F(xiàn)ILEBUFMOVCX,0MOVAH,3CH;建立文件

INT21HJCERRORLEADX,BUF1;無錯,提示正常信息

MOVAH,09HINT21HJMPDONERROR:LEADX,BUF2;有錯,提示錯誤信息

MOVAH,09HINT21HDON:INT0;程序結(jié)束例7-8打開某文件,并向其中寫入內(nèi)容。LEADX,F(xiàn)ILENAMEMOVAL,1;置寫方式MOVAH,3DH;打開文件INT21HDON1:LEADX,F(xiàn)ILEBUF;字符串輸入MOVAH,0AHINT21HMOVCH,0MOVCL,F(xiàn)ILEBUF+1;實際輸入個數(shù)CMPCL,0JZDON2MOVBX,文件代碼號LEADX,F(xiàn)ILEBUF+2MOVAH,40H;寫入文件INT21HDON2:MOVAH,3EH;關(guān)閉文件MOVBX,文件代碼號INT21HDON3:INT0;程序結(jié)束3.定時系統(tǒng)功能號功能入口參數(shù)出口參數(shù)2AH取日期無CX=年(1980~2099),DH=月(1~12)DL=日(1~31),AL=星期(0~6)2BH置日期CX=年(1980~2099)DH=月(1~12)DL=日(1~31)AL=00H,設(shè)置成功AL=FFH,失敗2CH取時間無CH=小時(0~23),CL=分(0~59)DH=秒(0~59),DL=1%秒(0~99)2DH置時間CH=小時(0~23)CL=分(0~59)DH=秒(0~59)DL=1%秒(0~99)AL=00H,設(shè)置成功AL=FFH,失敗表7-4定時系統(tǒng)的DOS系統(tǒng)功能例7-9設(shè)置22:10:25時間MOVCH,22;小時值送入CHMOVCL,10;分值送入CLMOVDH,25;秒值送入DHMOVDL,00;1%秒值送入DLMOVAH,2DH;設(shè)置時間功能號INT21H;執(zhí)行DOS調(diào)用CMPAH,0FFH;設(shè)置成功否JEERROR;不成功,轉(zhuǎn)出錯處理┇;成功,繼續(xù)執(zhí)行ERROR:(略)4.中斷向量的修改中斷向量的修改步驟如下:(1)用35H號功能,獲取原中斷向量,并保存在字變量中。(2)用25H號功能,設(shè)置新中斷向量,取代原中斷向量,以便當中斷發(fā)生后,轉(zhuǎn)移到新的中斷服務(wù)程序中。(3)新中斷服務(wù)程序完畢后,利用25號功能恢復原中斷向量。功能號功能入口參數(shù)出口參數(shù)25H設(shè)置中斷向量DS:DX=所設(shè)置中斷向量的段基址:偏移量AL=欲設(shè)置中斷向量所對應(yīng)的中斷號無35H取中斷向量AL=欲取中斷向量所對應(yīng)的中斷類型號ES:BX=取得的中斷向量的段基址:偏移量表7-5中斷向量修改的DOS系統(tǒng)功能例7-10假設(shè)原中斷程序的中斷類型號為n,新中斷程序的入口地址的段基址為SEG_INTR,偏移地址為OFFSET_INTR中斷向量修改的程序段為:

MOVAH,35H;取原中斷向量

MOVAL,nINT21H

MOVOLD_OFF,BXMOVBX,ESMOVOLD_SEG,BX;保存原中斷向量(ES:BX)MOVAL,n;中斷類型號MOVAH,25H;設(shè)置新中斷向量(DS:DX)MOVDX,SEG_INTRMOVDS,DX;DS指向新中斷服務(wù)程序段基址MOVDX,OFFSET_INTR;DX指向新中斷服務(wù)程序偏移地址INT21H┇

MOVAH,25H;恢復原中斷向量

MOVAL,nMOVDX,OLD_SEGMOVDS,DXMOVDX,OLD_OFFINT21H7.4.3BIOS功能調(diào)用BIOS的基本功能是控制和驅(qū)動系統(tǒng)的外部設(shè)備,如磁盤驅(qū)動器、顯示器、鍵盤、打印機、異步串行通信接口等類型號功能類型號功能05H屏幕打印中斷13H磁盤I/O調(diào)用06H(保留)14H串口I/O調(diào)用07H(保留)15H磁帶I/O調(diào)用08H系統(tǒng)時鐘中斷(IRQ0)16H鍵盤I/O調(diào)用09H鍵盤中斷(IRQ1)17H打印機I/O調(diào)用0AHIRQ2的級聯(lián)輸入18H磁帶BASIC入口(熱啟動)0BH異步串口2中斷(IRQ3)19H系統(tǒng)重置(冷啟動)0CH異步串口1中斷(IRQ4)1AH讀/寫時鐘參數(shù)0DH并口2中斷(IRQ5)1BH鍵盤Ctrl-Break中斷入口0EH軟盤中斷(IRQ6)1CH間隔時鐘中斷處理0FH并口

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論