第八章-中斷及異常-4_第1頁
第八章-中斷及異常-4_第2頁
第八章-中斷及異常-4_第3頁
第八章-中斷及異常-4_第4頁
第八章-中斷及異常-4_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

中斷程序設計一、中斷向量的保存、設置和恢復二、軟中斷程序設計三、可屏蔽硬中斷程序設計四、問題討論一、中斷向量的保存、設置和恢復1.保存中斷向量(35H功能)入口參數(shù)AL=要保存向量的中斷類型號N功能號AH=35H類型號21H出口參數(shù)BX=(0:N×4)

ES=(0:N×4+2)實現(xiàn)功能將類型號N的中斷向量保存在ES、BX中方法一:用堆棧保存中斷向量MOVAL,09H;取中斷向量

MOVAH,35HINT21HPUSHES;用堆棧保存PUSHBX

例1保存09H類型的中斷向量 (如何保存(ES),(BX))方法二:用變量保存中斷向量save_csDW? ;定義變量save_ipDW?

MOVAX,SEGsave_csMOVDS,AXMOVAL,09H ;取中斷向量MOVAH,35HINT21HMOVsave_cs,ES ;用變量保存MOVsave_ip,BX

入口參數(shù)AL=要設置向量的中斷類型號NDS:DX=中斷子程的入口地址(中斷向量)功能號AH=25H類型號21H出口參數(shù)無

實現(xiàn)功能將類型N的中斷向量設置在向量表中,即(0:N×4)=類型N中斷子程入口地址的偏移值(0:N×4+2)=類型N中斷子程入口地址的段值2.設置中斷向量(25H功能)例2設置中斷子程Sound的中斷向量,類型號為60HcodeSEGMENTASSUMECS:codestart:MOVAX,SEGsoundMOVDS,AXMOVDX,OffsetsoundMOVAL,60HMOVAH,25HINT21H

MOVAH,4CHINT21H;中斷子程soundPROC

IRETsoundENDPcodeENDSENDstart二、軟中斷程序設計軟中斷子程與子程序的編寫類似,其不同點在于:1.子程用CALL指令調(diào)用;中斷子程用INT指令調(diào)用2.子程用RET指令返回;中斷子程用IRET指令返回3.CALL指令直接用過程名做操作數(shù),即由過程名提供子程的入口地址INT指令由類型號N到中斷向量表中固定的單元獲得中斷子程的入口地址

對比軟中斷程序與子程序的編寫其不同點在于:1.應在主程中將中斷子程的入口地址(中斷向量)放入中斷向量表中。(可用25H系統(tǒng)功能完成)2.主程中用INT指令調(diào)用中斷子程3.中斷子程應用IRET返回.例3:用子程編寫和用一個60H類型的中斷子程編寫,功能是將BX寄存器的內(nèi)容以16進制形式顯示出來。listPROC;子程

MOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,39HJLEprintADDDL,07Hprint:MOVAH,2HINT21HDECCHJNZnextRET;子程返回listENDPcodeENDSENDstartcodeSEGMENTASSUMECS:codestart:CALLlist;調(diào)用子程MOVAH,4CHINT21H;返回DOS若用子程編寫:codeSEGMENTASSUMECS:codestart:MOVAX,SEGlist;用25H功能MOVDS,AX;將中斷子程listLEADX,list;的入口地址MOVAL,60H;設置到MOVAH,25H;中斷向量表中INT21HINT60H;調(diào)用中斷子程MOVAH,4CHINT21H;返回DOS

listPROC;中斷子程listMOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,39HJLEprintADDDL,07Hprint:MOVAH,2HINT21HDECCHJNZnextIRET;中斷返回listENDPcodeENDSENDstart用INT60H中斷子程編寫:三、可屏蔽硬中斷程序設計分三大步驟:1.了解IBMPC/XT系統(tǒng)可屏蔽硬中斷的響應過程,據(jù)連線確定外設中斷申請對應的中斷類型號;2.主程中做好外設發(fā)出中斷申請,CPU能夠響應的準備工作;3.編寫可屏蔽硬中斷子程,完成中斷源請求的任務.1.了解IBMPC/XT系統(tǒng)可屏蔽硬中斷的響應過程,據(jù)連線確定外設中斷申請對應的中斷類型號。例接口的中斷申請連IRQ3類型號0BH接口的中斷申請連IRQ5類型號0DHIRQ2IRQ3IRQ4IRQ5IRQ6IRQ7CS8259AA0RDWRD0~D7SP/ENCA0CA1CA2GNDIR0IR1IR2IR3IR4IR5IR6IR7Vcc+5V用于多片8259A級連情況INTAINT數(shù)據(jù)線片選譯碼20~3FHIOWA0總線

IORA5~A9D0~D7INTA

INTR08H09H0AH0BH0CH0DH0EH0FH18.2Hz方波鍵盤PC/XT總線在主程序中應做的工作:①CPU關中斷(用CLI置IF=0)②保存原中斷向量(用35H系統(tǒng)功能)③設置中斷向量(用25H系統(tǒng)功能)④設置8259A的中斷屏蔽字,使21H端口對應位為0,允許中斷申請進入優(yōu)先級裁決器⑤CPU開中斷(用STI置IF=1)2.主程中做好外設發(fā)出中斷申請,CPU能夠響應的準備工作。準備工作做好后,此后若該級有中斷申請,則CPU響應中斷,執(zhí)行相應類型的中斷子程。主程在返回DOS前,應恢復原中斷向量。(用25H系統(tǒng)功能)8088INTR主板IF鍵盤18.2Hz方波8259AINT中斷屏蔽寄存器鍵盤中斷申請IR1IR2~IR7IR0當前中斷服務寄存器鍵盤接口IRQ2~IRQ7PC總線外設接口外設08h09h0Ah~0FhIBMPC/XT微機可屏蔽中斷響應過程示意圖①處理中斷源申請任務部分的編寫與普通子程類似②在中斷子程結束前,發(fā)中斷結束命令清除8259A中ISR的記錄;否則,響應一次中斷后,同級中斷和低級中斷將被優(yōu)先級裁決器屏蔽③用IRET中斷返回指令返回主程被中斷處3.編寫硬中斷子程,完成中斷源請求的任務返回DOSCLI關中斷保存原中斷向量設置新中斷向量設置8259A的中斷屏蔽字中斷子程有關量的初始化STI開中斷主程其它工作處理恢復原中斷向量開始主程序保護現(xiàn)場發(fā)中斷結束命令EOI完成中斷源申請的任務恢復現(xiàn)場IRET中斷返回開始中斷子程可屏蔽硬中斷程序流程圖例4利用連接在8259AIR0上的時鐘信號,編寫具有定時功能程序,要求每隔5秒在屏蔽上顯示一個字符’A’。8088INTR主板IF18.2Hz方波8259AINT中斷屏蔽寄存器IR0當前中斷服務寄存器08h時鐘信號連接在IR0上,申請的中斷類型號為08H。時鐘信號是一個頻率為18.2HZ的方波信號,即每秒向8259A發(fā)出18.2次的中斷申請。如果CPU響應該中斷申請,則以每秒18.2次的頻率執(zhí)行08H類型的中斷子程。分析80888259AINTR

IR018.2Hz方波信號INT中斷申請的任務是每5秒顯示一個字符’A’1秒執(zhí)行18.2次,則5秒執(zhí)行18.2×5=91次,只在執(zhí)行到第91次時顯示’A’,其它不顯示。在中斷子程中用一個量來計數(shù)中斷子程被執(zhí)行的次數(shù),即CPU響應IR0中斷申請的次數(shù)。當達到91次,則顯示’A’,并將計數(shù)值清0,重新計數(shù);其它情況只計數(shù),不顯示’A’。中斷子程的最后應發(fā)中斷結束命令EOI。主程序中斷子程CLI關中斷保存原08H中斷向量設置新08H中斷向量設置8259A的中斷屏蔽字,允許IR0中斷08H中斷子程執(zhí)行次數(shù)初值0STI開中斷主程其它工作處理恢復原08H中斷向量返回DOS開始CX發(fā)中斷結束命令EOI恢復現(xiàn)場IRET中斷返回保存現(xiàn)場開始中斷子程被執(zhí)行一次CX←CX+1NY調(diào)02HDOS功能顯示字符‘A’CX←0重新記數(shù)到91次,即5秒時間到?codeSEGMENTASSUMECS:codestart:CLI;關中斷MOVAL,08HMOVAH,35HINT21H;取系統(tǒng)08H類型中斷向量PUSHES;用堆棧保存PUSHBXPUSHDSMOVDX,OFFSETdisplay;設置08H類型中斷向量MOVAX,SEGdisplayMOVDS,AXMOVAL,08HMOVAH,25HINT21HPOPDS程序清單:INAL,21H;設置8259A中斷屏蔽字,

ANDAL,11111110B;允許IR0中斷OUT21H,ALMOVCX,0;置中斷子程計數(shù)器初值為0STI;CPU開中斷MOVSI,8000H;用雙重循環(huán)延時,w2:MOVDI,8000H;模擬CPU對其他任務的處理w1:DECDI;DI,SI的值可修改,控制主程執(zhí)行時間JNZw1DECSIJNZw2POPDX;恢復系統(tǒng)08H類型中斷向量

POPDSMOVAL,08HMOVAH,25HINT21HMOVAH,4CH;返回DOSINT21H

displayPROC;自編的08H類型中斷子程PUSHAX;保護現(xiàn)場INCCX;執(zhí)行中斷子程一次,計數(shù)值加1CMPCX,91JNZexit;到91次了嗎?未到跳轉(zhuǎn)至exitMOVDL,’A’;到,顯示‘A’MOVAH,02INT21HMOVCX,0;清計數(shù)值為0,重新計時exit:MOVAL,20H;發(fā)中斷結束命令EOIOUT20H,ALPOPAX;恢復現(xiàn)場IRET;中斷返回displayENDPcodeENDSENDstartsys08PROCMOVAX,0040HMOVDS,AXINT1CHMOVAL,20HOUT20H,ALIRETsys08ENDPDOS系統(tǒng)提供的08H類型中斷子程:sys1cPROCIRETsys1cENDPDOS系統(tǒng)提供的1CH類型中斷子程:系統(tǒng)08H類型中斷子程要點:①

進入子程后,修改了DS段寄存器的值;②程序中調(diào)用了1CH類型中斷子程,每執(zhí)行一次08H中斷子程,執(zhí)行一次1CH中斷子程;③程序最后發(fā)中斷結束命令EOIsys08PROCMOVAX,0040HMOVDS,AXINT1CHMOVAL,20HOUT20H,ALIRETsys08ENDP1CH類型是軟中斷,按編寫軟中斷子程方法編寫:①系統(tǒng)08H中斷子程改變DS值,故:1CH中斷子程用到定義的變量,須在子程中給DS賦值。②1CH類型是軟中斷,不需要發(fā)中斷結束命令。1CH類型是系統(tǒng)為用戶保留的定時中斷子程系統(tǒng)1CH中斷子程只有一條中斷返回語句,確保08H中斷子程調(diào)用后能返回。

用戶可通過編寫1CH中斷子程實現(xiàn)具有定時功能的任務sys1cPROCIRETsys1cENDP例5

編寫09H類型的鍵盤中斷子程鍵盤接口鍵盤鍵盤中斷申請8259AIR1INTAINT8088INTRINTA60H端口61H端口8255A應答信號掃描碼輔助電路主板IR018.2Hz方波說明:鍵盤接口通過8259A的IR1發(fā)中斷申請,類型號09H鍵盤接口對按下鍵和釋放鍵都向8259A發(fā)出中斷申請,即若CPU滿足響應條件,對鍵盤上的一個按鍵操作,CPU將執(zhí)行兩次09H類型的中斷子程:按下鍵一次,釋放鍵一次CPU可從60H端口讀取操作鍵的掃描碼, 每個鍵對應有一個掃描碼由掃描碼的D6~D0判斷操作的是哪一個鍵,由掃描碼的D7位判斷是按下鍵,還釋放鍵。D7=1,釋放鍵(斷碼);D7=0,按下鍵(通碼)鍵盤中斷子程中應發(fā)中斷結束命令在IBMPC/XT機上,

從60H端口讀取掃描碼后,應向鍵盤接口(61H)置應答信號,使鍵盤接口為接收下一個按鍵的掃描碼做好準備。不設應答信號,鍵盤接口不能正常工作。在286以上微機,讀取掃描碼后,可不置鍵盤應答。keyPROCINAL,60H;從60H端口讀入掃描碼PUSHAX;保存堆棧中INAL,61H;置鍵盤應答控制信號:ORAL,80H;先將61H端口的D7位置1OUT61H,ALANDAL,7FH;再將61H端口的D7位置0OUT61H,ALPOPAX;從堆棧中取出掃描碼TESTAL,80H;檢查掃描碼的D7位JNZexit;D7=1,表示釋放鍵操作,轉(zhuǎn)至出口

exit:MOVAL,20H;發(fā)中斷結束命令EOIOUT20H,ALIRET;中斷返回keyENDP

IBMPC/XT機上鍵盤中斷子程的編寫:keyPROCINAL,60H;從60H端口讀入掃描碼TESTAL,10000000B;檢查掃描碼的D7位JNZexit;D7=1,表示釋放鍵操作,轉(zhuǎn)至出口、、、、、、exit:MOVAL,20H;發(fā)中斷結束命令EOIOUT20H,ALIRET;中斷返回keyENDP

586機上鍵盤中斷子程的編寫:有關鍵盤①鍵盤通過鍵盤接口電路與計算機連接。②鍵盤上的鍵有三種類型:字符鍵A~Z,0~9等功能鍵F1~F12,PageUp等組合控制鍵Shift,Ctrl,Alt等③

鍵盤上的每個鍵都有一個掃描碼。 據(jù)掃描碼可確定操作的是哪個鍵、是按下鍵還是釋放鍵; 掃描碼用一個字節(jié)表示。低7位是掃描碼的數(shù)字編碼,與鍵盤上的鍵一一對應;最高位D7位表示鍵的操作狀態(tài):當按下鍵時,D7=0;當釋放鍵時,D7=1⑤

鍵盤中斷子程功能(09H類型中斷子程)從鍵盤接口讀取操作鍵的掃描碼;

將掃描碼轉(zhuǎn)換成字符碼;大部分鍵的字符碼為ASCII碼,無ASCII碼鍵(如組合鍵Shift、Ctrl等)的字符碼為0。將鍵的掃描碼、字符碼存放在鍵盤緩沖區(qū),供其它有關鍵盤的中斷子程應用。④鍵盤接口對按下鍵和釋放鍵均向計算機發(fā)出中斷申請,如果中斷響應條件滿足,CPU轉(zhuǎn)去執(zhí)行鍵盤中斷子程。鍵盤中斷子程類型號為09H。例6:編寫鍵盤中斷子程,完成每操作鍵盤上任意鍵,屏幕上顯示’HeLLo!’主程序鍵盤中斷子程CLI關中斷保存原09H中斷向量設置新09H中斷向量設置8259A的中斷屏蔽字,允許IR1中斷STI開中斷主程其它工作處理恢復原09H中斷向量返回DOS開始保存現(xiàn)場開始從60H端口讀入掃描碼N判斷是否是按下鍵?Y調(diào)09H功能顯示字符串’Hello!’發(fā)中斷結束命令EOI恢復現(xiàn)場IRET中斷返回dataSEGMENTstringDB‘Hello!‘,0ah.0dh,’$’dataENDScodeSEGMENTASSUMECS:code,DS:datastart:CLI;關中斷,IF=0MOVAL,09HMOVAH,35HINT21H;取系統(tǒng)09H類型中斷向量PUSHES;用堆棧保存

PUSHBXPUSHDS;設置09H類型中斷向量MOVDX,OFFSETdisplayMOVAX,SEGdisplayMOVDS,AXMOVAL,09HMOVAH,25HINT21HPOPDS程序清單

INAL,21H;設置8259A中斷屏蔽字ANDAL,11111101B;允許IR1鍵盤中斷OUT21H,ALSTI;開中斷,IF=1MOVSI,8000H;用雙重循環(huán)延時w2:MOVDI,8000H;模擬CPU對其他任務的處理w1:DECDI;DI,SI的值可修改,控制主程執(zhí)行時間JNZw1DECSIJNZw2POPDX;恢復系統(tǒng)09H類型中斷向量POPDSMOVAL,09HMOVAH,25HINT21HMOVAH,4CH;返回DOSINT21HdisplayPROC;自編的09H類型中斷子程PUSHAX;保存現(xiàn)場INAL,60H;讀入字符掃描碼TESTAL,80H;判斷是否是按下鍵操作?JNZexitMOVAX,data;是,顯示‘Hello!’MOVDS,AXLEADX,stringMOVAH,09INT21Hexit:MOVAL,20H;發(fā)中斷結束命令EOIOUT20H,ALPOPAX;恢復現(xiàn)場IRET;中斷返回displayENDPcodeENDSENDstart四、問題討論中斷嵌套問題中斷向量的保存、恢復問題中斷嵌套問題1.嵌套的概念2.內(nèi)中斷引起的嵌套3.可屏蔽硬中斷引起的嵌套4.可屏蔽硬中斷嵌套的條件CPU正在執(zhí)行某一中斷子程,又被其它中斷源中斷使CPU轉(zhuǎn)去執(zhí)行另一中斷子程,這個過程叫中斷嵌套

1.

嵌套的概念中斷子程序1中斷申請CPU執(zhí)行流程中斷子程序2在中斷子程中,用INT指令調(diào)用中斷子程,引起了中斷嵌套,這種嵌套就是內(nèi)中斷引起的嵌套。

2.內(nèi)中斷引起的嵌套CPU執(zhí)行流程中斷子程序n1中斷子程序n2INTn1INTn2內(nèi)中斷引起的嵌套不受IF和8259A的控制,嵌套的層次受限于堆棧的大小。在響應了某級可屏蔽硬中斷后,又有新的可屏蔽中斷申請發(fā)出,若滿足響應條件,CPU轉(zhuǎn)去執(zhí)行另一個可屏蔽中斷子程。3.可屏蔽硬中斷引起的嵌套中斷子程序1中斷申請1CPU執(zhí)行流程中斷子程序2中斷申請2可屏蔽硬中斷引起的嵌套,受IF和8259A的控制,同時嵌套層次受堆棧容量的大小。①CPU在執(zhí)行中斷子程過程中,有可屏蔽硬中斷申請發(fā)出。(即有可屏蔽硬中斷源產(chǎn)生)②中斷子程開中斷,即用STI指令使IF=1。因為CPU響應中斷過程中,將IF標志清0,然后轉(zhuǎn)去執(zhí)行中斷子程。故進入中斷子程后,IF=0(即CPU允許響應可屏蔽中斷)4.

可屏蔽硬中斷嵌套的條件③

新的中斷申請具有更高的優(yōu)先權,即比8259A的當前服務寄存器ISR中記錄的中斷優(yōu)先權高有兩種可能:新的中斷申請的確比當前中斷的優(yōu)先級高新的中斷申請與當前中斷的優(yōu)先級同級或低級,但在當前中斷子程中提前發(fā)了中斷結束命令,使ISR中的相應位為0。在滿足上述三個條件下,可引起可屏蔽硬中斷的嵌套例7

在中斷子程中未用STI來開中斷分析:

CPU響應該中斷后,

IF標志被自動清0;

由于子程中未開中斷,

IF仍為0;

所以,不論子程在何處發(fā)EOI,

均不會引起可屏蔽硬中斷嵌套。IRET發(fā)EOIIR2中斷子程IR0中斷申請例8中斷子程中STI開中斷,最后發(fā)EOI分析:

CPU響應IR2中斷后,

IF標志被自動清0

子程開中斷后,IF為1

所以,在開中斷后,

CPU可響應優(yōu)先權更高的中斷申請引起可屏蔽中斷嵌套。IR1中斷申請IR2中斷子程STIIRET發(fā)EOICPU響應IR1中斷申請例9中斷子程開中斷,提前發(fā)EOI結論:

子程開中斷后,

CPU可響應優(yōu)先權更高的中斷申請。發(fā)EOI后,

CPU可響應同級或低級的中斷申請。IR2中斷子程STIIRET發(fā)EOICPU響應IR1中斷申請IR1中斷申請IR3中斷申請CPU響應IR3中斷申請例10中斷子程中不發(fā)EOI分析:

CPU響應中斷后,自動將ISR中的對應位置1,因中斷子程未發(fā)EO

溫馨提示

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

評論

0/150

提交評論