匯編語言程序設(shè)計(jì) 第7章:中斷控制接口學(xué)習(xí)資料_第1頁
匯編語言程序設(shè)計(jì) 第7章:中斷控制接口學(xué)習(xí)資料_第2頁
匯編語言程序設(shè)計(jì) 第7章:中斷控制接口學(xué)習(xí)資料_第3頁
匯編語言程序設(shè)計(jì) 第7章:中斷控制接口學(xué)習(xí)資料_第4頁
匯編語言程序設(shè)計(jì) 第7章:中斷控制接口學(xué)習(xí)資料_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章第7章:中斷控制接口教學(xué)重點(diǎn)

8088CPU的中斷系統(tǒng)

8259A的中斷工作過程和工作方式

中斷服務(wù)程序的編寫7.18088中斷系統(tǒng)8088的中斷系統(tǒng)采用向量中斷機(jī)制能夠處理256個中斷用中斷向量號0~255區(qū)別可屏蔽中斷還需要借助專用中斷控制器Intel8259A實(shí)現(xiàn)優(yōu)先權(quán)管理7.1.18088的中斷類型非屏蔽中斷源中斷邏輯INTO指令單步中斷除法錯誤INTN指令CPUINTRNMI可屏蔽中斷源8259A中斷控制器IR0IR1IR2IR3IR4IR5IR6IR7外設(shè)中斷源

INTA內(nèi)部中斷除法錯中斷指令中斷溢出中斷單步中斷外部中斷非屏蔽中斷可屏蔽中斷1.內(nèi)部中斷內(nèi)部中斷是由于8088內(nèi)部執(zhí)行程序出現(xiàn)異常引起的程序中斷利用內(nèi)部中斷,微處理器為用戶提供了發(fā)現(xiàn)、調(diào)試并解決程序執(zhí)行時異常情況的有效途徑例如,ROM-BIOS和DOS系統(tǒng)利用內(nèi)部中斷為程序員提供了各種功能調(diào)用內(nèi)部中斷的中斷向量號已定⑴除法錯中斷在執(zhí)行除法指令時,若除數(shù)為0或商超過了寄存器所能表達(dá)的范圍,則產(chǎn)生一個向量號為0的內(nèi)部中斷,稱為除法錯中斷例如:movbl,0idiv

bl

;除數(shù)BL=0,產(chǎn)生除法錯中斷movax,200hmovbl,1divbl

;商=200H,不能用AL表達(dá) ;產(chǎn)生除法錯中斷⑵指令中斷在執(zhí)行中斷調(diào)用指令I(lǐng)NTn時產(chǎn)生的一個向量號為n(0~255)的內(nèi)部中斷,稱為指令中斷其中向量號為3的指令中斷比較特別(生成一個字節(jié)的指令代碼:11001100),常用于程序調(diào)試,被稱為斷點(diǎn)中斷例如:DEBUG.EXE調(diào)試程序的運(yùn)行命令G設(shè)置的斷點(diǎn),就是利用INT3指令實(shí)現(xiàn)的⑶溢出中斷在執(zhí)行溢出中斷指令I(lǐng)NTO時,若溢出標(biāo)志OF為1,則產(chǎn)生一個向量號為4的內(nèi)部中斷,被稱為溢出中斷例如:movax,2000haddax,7000h

;2000H+7000H=9000H,溢出:OF=1into

;因?yàn)镺F=1,所以產(chǎn)生溢出中斷⑷單步中斷若單步中斷TF為1,則在每條指令執(zhí)行結(jié)束后產(chǎn)生一個向量號為1的內(nèi)部中斷,稱為單步中斷例如:DEBUG.EXE調(diào)試程序的單步命令T就利用單步中斷實(shí)現(xiàn)對程序的單步調(diào)試2.外部中斷外部中斷是由于8088外部提出中斷請求引起的程序中斷利用外部中斷,微機(jī)系統(tǒng)可以實(shí)時響應(yīng)外部設(shè)備的數(shù)據(jù)傳送請求,能夠及時處理外部意外或緊急事件外部中斷的原因是處理器外部隨機(jī)產(chǎn)生的,所以是真正的中斷(Interrupt)內(nèi)部中斷的原因是處理器執(zhí)行程序出現(xiàn)異常,所以經(jīng)常被稱為異常(Exception)⑴非屏蔽中斷通過非屏蔽中斷請求信號向微處理器提出的中斷請求,微處理器無法禁止,將在當(dāng)前指令執(zhí)行結(jié)束予以響應(yīng),這個中斷被稱為非屏蔽中斷8088的非屏蔽中斷的向量號為2,非屏蔽中斷請求信號為NMI非屏蔽中斷主要用于處理系統(tǒng)的意外或故障。例如:電源調(diào)電前的數(shù)據(jù)保護(hù)存儲器讀寫錯誤的處理⑵可屏蔽中斷外部通過可屏蔽中斷請求信號向處理器提出的中斷,處理器在允許可屏蔽中斷的條件下,在當(dāng)前指令執(zhí)行結(jié)束予以響應(yīng),同時輸出可屏蔽中斷響應(yīng)信號,這個中斷就是可屏蔽中斷8088的可屏蔽中斷請求和響應(yīng)信號分別是INTR和INTA*;由IF標(biāo)志控制可屏蔽中斷是否允許響應(yīng);向量號來自外部中斷控制器8088通常需要配合中斷控制器8259A共同處理可屏蔽中斷可屏蔽中斷主要用于主機(jī)與外設(shè)交換數(shù)據(jù)IF控制可屏蔽中斷的響應(yīng)中斷標(biāo)志IF的狀態(tài)IF=0:可屏蔽中斷不會被響應(yīng)關(guān)中斷、禁止中斷、中斷屏蔽系統(tǒng)復(fù)位,使IF=0任何一個中斷被響應(yīng),使IF=0執(zhí)行指令CLI,使IF=0IF=1:可屏蔽中斷會被響應(yīng)開中斷、允許中斷、中斷開放執(zhí)行指令STI,使IF=1執(zhí)行指令I(lǐng)RET恢復(fù)原IF狀態(tài)明確IF標(biāo)志的狀態(tài)是關(guān)鍵7.1.28088的中斷響應(yīng)過程N(yùn)MIN軟件中斷INTRTF=1中斷響應(yīng)周期讀中斷向量號下條指令現(xiàn)行指令I(lǐng)F=1NNNNYYYYY查詢中斷的順序,決定了各種中斷源的優(yōu)先權(quán)軟件中斷除法錯中斷指令中斷溢出中斷非屏蔽中斷可屏蔽中斷單步中斷高低7.1.28088的中斷響應(yīng)過程(續(xù))Y還有NMITEMP=1標(biāo)志寄存器入棧TEMP=TF,IF=TF=0CS:IP入棧獲取中斷服務(wù)程序入口地址執(zhí)行服務(wù)程序彈出CS:IP彈出標(biāo)志寄存器返回被中斷程序(1)(2)(3)(4)(5)NNY(6)8088各種中斷源的優(yōu)先權(quán),實(shí)際上是指被識別出來的先后多種中斷同時請求時,最先響應(yīng)的則可能是單步中斷或NMI中斷7.1.38088的中斷向量表中斷服務(wù)程序的入口地址(首地址)邏輯地址含有段地址CS和偏移地址IP(32位)每個中斷向量的低字是偏移地址、高字是段地址,需占用4個字節(jié)8088微處理器從物理地址000H開始,依次安排各個中斷服務(wù)程序入口地址,向量號也從0開始256個中斷占用1KB區(qū)域,就形成中斷向量表N號中斷程序入口地址所在的物理地址=N×47.2內(nèi)部中斷服務(wù)程序編寫內(nèi)部中斷服務(wù)程序與編寫子程序類似利用過程定義偽指令PROC/ENDP第1條指令通常為開中斷指令STI最后用中斷返回指令I(lǐng)RET通常采用寄存器傳遞參數(shù)主程序需要調(diào)用中斷服務(wù)程序調(diào)用前,需要設(shè)置中斷服務(wù)程序入口地址設(shè)置必要的入口參數(shù)利用INTn指令調(diào)用中斷服務(wù)程序處理出口參數(shù)例7.1內(nèi)部中斷服務(wù)程序編寫80H號中斷服務(wù)程序,并調(diào)用功能:具有顯示以“0”結(jié)尾字符串的功能,利用顯示器功能調(diào)用INT10H實(shí)現(xiàn)字符顯示字符串緩沖區(qū)首地址為入口參數(shù):

DS:DX(段地址:偏移地址)傳遞參數(shù)例7.1的數(shù)據(jù)段;數(shù)據(jù)段intoff

dw? ;用于保存偏移地址intseg

dw? ;用于保存段基地址intmsg db‘AInstructionInterrupt!’,0dh,0ah,0以“0”結(jié)尾回車、換行例7.1的獲取原中斷向量;代碼段movax,3580h ;利用DOS功能35H號int21h ;獲取原80H中斷程序入口地址mov

intoff,bx

;保存偏移地址mov

intseg,es

;保存段基地址獲取中斷程序入口地址(DOS功能調(diào)用INT21H)功能號:AH=35H入口參數(shù):AL=中斷向量號出口參數(shù):ES:BX=中斷程序入口段地址:偏移地址例7.1的設(shè)置新中斷向量pushdsmov

dx,offsetnew80h ;取中斷程序偏移地址mov

ax,segnew80h ;取中斷程序段地址mov

ds,axmovax,2580hint21hpopds設(shè)置中斷程序入口地址(INT21H)功能號:AH=25H入口參數(shù):AL=中斷向量號DS:DX=中斷程序入口段地址:偏移地址例7.1的中斷調(diào)用;設(shè)置入口參數(shù): DS=段地址(已設(shè)置)

DX=偏移地址mov

dx,offset

intmsg

int80h

;調(diào)用80H中斷服務(wù)程序AInstructionInterrupt!程序功能例7.1的主程序返回mov

dx,intoff

;恢復(fù)原中斷程序入口地址mov

ax,intsegmov

ds,ax

;改變DSmovax,2580hint21h

;因緊接著返回DOSmovax,4c00h

;故無需恢復(fù)DSint21h設(shè)置中斷程序入口地址(INT21H)功能號:AH=25H入口參數(shù):AL=中斷向量號DS:DX=中斷程序入口段地址:偏移地址例7.1的中斷服務(wù)程序(1);80H號內(nèi)部中斷服務(wù)程序:;顯示字符串(以“0”結(jié)尾);入口參數(shù):DS:DX=緩沖器首地址new80h proc ;過程定義

sti

;開中斷

pushax ;保護(hù)寄存器

pushbx pushsi例7.1的中斷服務(wù)程序(2)

mov

si,dxnew1: mov

al,[si] ;讀取欲一個顯示字符

cmpal,0

;為結(jié)尾“0”,則結(jié)束

jznew2

movbx,0

;采用ROM-BIOS功能調(diào)用

movah,0eh

int10h incsi

;準(zhǔn)備顯示下一個字符

jmpnew1例7.1的中斷服務(wù)程序(3)new2: popsi

;恢復(fù)寄存器

popbx popax

iret

;中斷返回new80h endp

;過程(中斷服務(wù)程序)結(jié)束AInstructionInterrupt!程序功能7.38259A中斷控制器Intel8259A是可編程中斷控制器PIC用于管理Intel8080/8085、8086/8088、80286/80386的可屏蔽中斷8259A的基本功能一片8259A可以管理8級中斷,可擴(kuò)展至64級每一級中斷都可單獨(dú)被屏蔽或允許在中斷響應(yīng)周期,可提供相應(yīng)的中斷向量號8259A設(shè)計(jì)有多種工作方式,可通過編程選擇7.3.18259A的內(nèi)部結(jié)構(gòu)和引腳D7~D0INTAINT中斷請求寄存器中斷屏蔽寄存器數(shù)據(jù)總線緩沖器IR0IR7讀/寫控制邏輯級聯(lián)緩沖器比較器RDWRA0CSCAS0CSA1CAS2SP/EN優(yōu)先權(quán)判別電路中斷服務(wù)寄存器控制邏輯1.中斷控制中斷請求寄存器IRR保存8條外界中斷請求信號IR0~I(xiàn)R7的請求狀態(tài)Di位為1表示IRi引腳有中斷請求;為0表示無請求中斷服務(wù)寄存器ISR保存正在被8259A服務(wù)著的中斷狀態(tài)Di位為1表示IRi中斷正在服務(wù)中;為0表示沒有被服務(wù)中斷屏蔽寄存器IMR保存對中斷請求信號IR的屏蔽狀態(tài)Di位為1表示IRi中斷被屏蔽(禁止);為0表示允許2.與處理器接口

A0RD*WR*CS*功能

0100110000101010×110×××1寫入ICW1、OCW2和OCW3寫入ICW2~ICW4和OCW1讀出IRR、ISR和查詢字讀出IMR數(shù)據(jù)總線高阻狀態(tài)數(shù)據(jù)總線高阻狀態(tài)3.中斷級連一個系統(tǒng)中,8259A可以級連,有一個主8259A,若干個(最多8個)從8259A級連時,主8259A的三條級連線CAS0~CAS2作為輸出線,連至每個從8259A的CAS0~CAS2每個從8259A的中斷請求信號INT,連至主8259A的一個中斷請求輸入端IR主8259A的INT線連至CPU的中斷請求輸入端SP*/EN*在非緩沖方式下,規(guī)定該8259A是主片(SP*=1)還是從片(SP*=0)示例8.3.28259A的中斷過程CAS0~CAS2D0~D7SP/ENIR0~I(xiàn)R7CPU響應(yīng)周期8259A工作波形INT第一個周期T1T2T3T4ALECLK

第二個周期T1T2T3T4第一個前保持為高電平

INTALOCK8.3.38259A的工作方式普通全嵌套方式特殊全嵌套方式自動循環(huán)方式特殊循環(huán)方式優(yōu)先權(quán)固定方式優(yōu)先權(quán)循環(huán)方式設(shè)置優(yōu)先權(quán)方式普通中斷結(jié)束方式特殊中斷結(jié)束方式自動中斷結(jié)束方式非自動中斷結(jié)束方式結(jié)束中斷處理方式屏蔽中斷源方式普通屏蔽方式特殊屏蔽方式中斷觸發(fā)方式邊沿觸發(fā)方式電平觸發(fā)方式數(shù)據(jù)線連接方式緩沖方式非緩沖方式1.設(shè)置優(yōu)先權(quán)方式普通全嵌套方式8259A的中斷優(yōu)先權(quán)順序固定不變,從高到低依次為IR0、IR1、IR2、……IR7中斷請求后,8259A對當(dāng)前請求中斷中優(yōu)先權(quán)最高的中斷IRi予以響應(yīng),將其向量號送上數(shù)據(jù)總線,對應(yīng)ISR的Di位置位,至到中斷結(jié)束(ISR的Di位復(fù)位)在ISR的Di位置位期間,禁止再發(fā)生同級和低級優(yōu)先權(quán)的中斷,但允許高級優(yōu)先權(quán)中斷的嵌套特殊全嵌套方式優(yōu)先權(quán)自動循環(huán)方式優(yōu)先權(quán)特殊循環(huán)方式2.結(jié)束中斷處理方式什么是8259A的中斷結(jié)束?8259A利用中斷服務(wù)寄存器ISR判斷:某位為1,表示正在進(jìn)行中斷服務(wù);該位為0,就是該中斷結(jié)束服務(wù)。這里說明如何使ISR某位為0,不反映CPU的工作狀態(tài)。2.結(jié)束中斷處理方式自動中斷結(jié)束方式普通中斷結(jié)束方式配合全嵌套優(yōu)先權(quán)方式使用當(dāng)CPU用輸出指令往8259A發(fā)出普通中斷結(jié)束EOI命令時,8259A就會把所有正在服務(wù)的中斷中優(yōu)先權(quán)最高的ISR位復(fù)位特殊中斷結(jié)束方式配合循環(huán)優(yōu)先權(quán)方式使用CPU在程序中向8259A發(fā)送一條特殊中斷結(jié)束命令,這個命令中指出了要清除哪個ISR位3.屏蔽中斷源方式普通屏蔽方式將IMR的Di位置1,則對應(yīng)的中斷IRi被屏蔽,該中斷請求不能從8259A送到CPU如果IMR的Di位置0,則允許IRi中斷產(chǎn)生特殊屏蔽方式將IMR的Di位置1,對應(yīng)的中斷IRi被屏蔽的同時,使ISR的Di位置04.中斷觸發(fā)方式邊沿觸發(fā)方式8259A將中斷請求輸入端出現(xiàn)的上升沿作為中斷請求信號電平觸發(fā)方式中斷請求端出現(xiàn)的高電平是有效的中斷請求信號5.數(shù)據(jù)線連接方式緩沖方式8259A的數(shù)據(jù)線需加緩沖器予以驅(qū)動8259A把SP*/EN*引腳作為輸出端,輸出允許信號,用以鎖存或開啟緩沖器非緩沖方式SP*/EN*引腳為輸入端若8259A級連,由其確定是主片或從片8.3.48259A的編程初始化編程8259A開始工作前,必須進(jìn)行初始化編程給8259A寫入初始化命令字ICW中斷操作編程在8259A工作期間可以寫入操作命令字OCW將選定的操作傳送給8259A,使之按新的要求工作還可以讀取8259A的信息,以便了解他的工作狀態(tài)1.初始化命令字ICW初始化命令字ICW最多有4個8259A在開始工作前必須寫入必須按照ICW1~ICW4順序?qū)懭隝CW1和ICW2是必須送的ICW3和ICW4由工作方式?jīng)Q定流程D7D6D5D4D3D2D1D0ICW1×××1LTIM×SNGLIC4D7D6D5D4D3D2D1D0×——表示可以任意為1為0都可以(建議為0)1——只能為1,作為標(biāo)志中斷觸發(fā)方式:LTIM=1,電平觸發(fā)方式LTIM=0,邊沿觸發(fā)方式規(guī)定單片或級連方式:SNGL=1,單片方式SNGL=0,級連方式是否寫入ICW4IC4=1,要寫入ICW4IC4=0,不寫入ICW4,即ICW4規(guī)定的位全為0ICW2T7T6T5T4T3×××D7D6D5D4D3D2D1D0設(shè)置中斷向量號T7~T3為中斷向量號的高5位低3位由8259A自動確定:IR0為000、IR1為001、……、IR7為111ICW3S7S6S5S4S3S2/ID2S1/ID1S0/ID0D7D6D5D4D3D2D1D0級連命令字主片8259A:Si=1對應(yīng)IRi接有從片;否則IRi沒有連接從片從片8259A:ID0~I(xiàn)D2編碼說明從片INT引腳接到主片哪個IR引腳ICW4000SFNMBUFM/SAEOIμPMD7D6D5D4D3D2D1D0嵌套方式:特殊全嵌套方式(SFNM=1)普通全嵌套方式(SFNM=0)數(shù)據(jù)線的緩沖方式:緩沖方式(BUF=1)非緩沖方式(BUF=0)主片/從片選擇:主片(M/S=1)從片(M/S=0)中斷結(jié)束方式:自動中斷結(jié)束(AEOI=1)非自動中斷結(jié)束(AEOI=0)微處理器類型:16位80x86(

PM=1)8位8080/8085(

PM=0)2.操作命令字OCW8259A工作期間,可以隨時接受操作命令字OCWOCW共有3個:OCW1~OCW3寫入時沒有順序要求,需要哪個OCW就寫入那個OCWD7D6D5D4D3D2D1D0OCW1M7M6M5M4M3M2M1M0D7D6D5D4D3D2D1D0屏蔽命令字內(nèi)容寫入中斷屏蔽寄存器IMRDi=Mi對應(yīng)IRi,為1禁止IRi中斷;為0允許IRi中斷。各位互相獨(dú)立。OCW2(教程P165表7-3)RSLEOI00L2L1L0D7D6D5D4D3D2D1D0R、SL和EOI配合使用產(chǎn)生中斷結(jié)束EOI命令和改變優(yōu)先權(quán)順序L2~L0的3位編碼指定IR引腳

P164表7-2OCW3(教程P166表7-4,表7-5)0ESMMSMM01PRRRISD7D6D5D4D3D2D1D0ESMM、SMM設(shè)置中斷屏蔽方式表7-4P、RR和RIS規(guī)定隨后讀取的狀態(tài)字含義表7-53.讀取狀態(tài)字CPU可讀出IRR、ISR、IMR和查詢字A0為低,由OCW3中RR和RIS位設(shè)定讀取IRR或ISR,由OCW3中P位設(shè)定讀取查詢字而A0引腳為高電平時讀取的都是IMR查詢字反映8259A是否有中斷請求D7D6D5D4D3D2D1D0查詢字I----W2W1W0D7D6D5D4D3D2D1D0中斷位I位為1,有外設(shè)請求中斷W2~W0的編碼當(dāng)前中斷請求的最高優(yōu)先級4.命令字和狀態(tài)字的區(qū)別方法⑴利用讀寫信號區(qū)別寫入的控制寄存器和讀出的狀態(tài)寄存器⑵

利用地址信號區(qū)別不同I/O地址的寄存器⑶

由控制字中的標(biāo)志位說明是哪個寄存器⑷

由芯片內(nèi)順序控制邏輯按一定順序識別不同的寄存器⑸由前面的控制字決定后續(xù)操作的寄存器接口電路中常用的方法7.48259A在IBMPC系列機(jī)上的應(yīng)用CAS0~2CAS0~2+5V主8259A8228880286CPUINTRD0~D7SP/ENINTD0~D7日時鐘鍵盤串行口2串行口1并行口2軟盤并行口1A0INTR1CS—IRQ0—IRQ1IRQ2—IRQ3—IRQ4—IRQ5—IRQ6—IRQ7—A0—CS

從8259AD0~D7INTSP/EN實(shí)時鐘改向0AH中斷保留保留保留協(xié)處理器硬盤保留A0INTR2CS—IRQ8—IRQ9—IRQ10—IRQ11—IRQ12—IRQ13—IRQ14—IRQ15—A0—CS系統(tǒng)總線B25……B24……B23……B22……B21……系統(tǒng)總線B4…D3………D4………D5………D6………D7………INTARDWRINTAIORIOWINTARDWR7.48259A在IBMPC系列機(jī)上的應(yīng)用(續(xù))CAS0~2

從8259AD0~D7INTSP/EN實(shí)時鐘改向0AH中斷保留保留保留協(xié)處理器硬盤保留A0INTR2CS—IRQ8—IRQ9—IRQ10—IRQ11—IRQ12—IRQ13—IRQ14—IRQ15—A0—CS系統(tǒng)總線B4…D3………D4………D5………D6………D7………INTARDWR初始化主片8259A

moval,11h

;寫入ICW1

out20h,al

jmpintr1 ;延時intr1: moval,08h

;寫入ICW2

out21h,al

jmpintr2intr2: moval,04h

;寫入ICW3

out21h,al

jmpintr3intr3: moval,1h

;寫入ICW4

out21h,al初始化從片8259A

moval,11h ;寫入ICW1

out0a0h,al jmpintr5intr5:

moval,70h ;寫入ICW2

out0a1h,al

jmpintr6intr6:

moval,02h ;寫入ICW3

out0a1h,al

jmpintr7intr7:

moval,

01h ;寫入ICW4

out0a1h,al應(yīng)用注意事項(xiàng)利用上升沿做為中斷請求IRQ的有效信號IRQ0~IRQ7的中斷向量號依次為08H~0FH,IRQ8~IRQ15依次為70H~77H采用普通全嵌套優(yōu)先權(quán)方式,中斷優(yōu)先權(quán)從高到低順序?yàn)镮RQ0~IRQ2、IRQ8~IRQ15、IRQ3~IRQ7,且不能改變采用普通中斷結(jié)束EOI方式,需要在中斷服務(wù)程序最后發(fā)送普通EOI命令一般采用普通屏蔽方式,通過寫入IMR允許中斷,但注意不要破壞原屏蔽狀態(tài)7.5外部中斷服務(wù)程序編寫外部可屏蔽中斷服務(wù)程序,需注意:發(fā)送中斷結(jié)束命令一般只能采用存儲單元傳遞參數(shù)不要使用DOS系統(tǒng)功能調(diào)用中斷服務(wù)程序盡量短小7.5外部中斷服務(wù)程序(續(xù))編寫主程序,需注意:修改中斷服務(wù)程序入口地址控制CPU的中斷允許標(biāo)志設(shè)置8259A的中斷屏蔽寄存器例7.2可屏蔽中斷服務(wù)程序8259A的IRQ0(向量號為08H)中斷請求來自定時器8253,每隔55ms產(chǎn)生一次本程序的08H號中斷服務(wù)程序,每次中斷顯示一串信息,顯示10次用內(nèi)存單元(共享變量)在主程序與外部中斷服務(wù)程序之間傳遞參數(shù):中斷次數(shù)顯示信息也安排在共同的數(shù)據(jù)段中例7.2

可屏蔽中斷服務(wù)程序

;數(shù)據(jù)段intmsg db‘A8259AInterrupt!’,0dh,0ah,0counter db0 ;代碼段

movax,3508h ;獲取原中斷入口地址

int21h pushbx ;保存偏移地址

pushes ;保存段基地址例7.2

可屏蔽中斷服務(wù)程序(續(xù)1) cli

;設(shè)置新中斷入口地址 pushds

movdx,offsetnew08h

movax,segnew08h

movds,ax movax,2508h int21h popds例7.2

可屏蔽中斷服務(wù)程序(續(xù)2) inal,21h

;設(shè)置中斷屏蔽寄存器 pushax andal,0feh

;允許IRQ0

out21h,al movcounter,0 ;設(shè)置中斷次數(shù)初值 sti ;開中斷例7.2

可屏蔽中斷服務(wù)程序(續(xù)3)start1: cmpcounter,10

;循環(huán)等待中斷 jbstart1 ;中斷10次退出

cli popax out21h,al ;恢復(fù)中斷屏蔽寄存器

popdx popds

movax,2508h ;恢復(fù)原中斷入口地址

int21h

sti中斷就在主程序循環(huán)當(dāng)中圖示例7.2

可屏蔽中斷服務(wù)程序(續(xù)4)new08h proc

sti ;開中斷

pushax ;保護(hù)寄存器

pushbx pushds movax,@data movds,ax ;設(shè)置數(shù)據(jù)段DS例7.2

可屏蔽中斷服務(wù)程序(續(xù)5)

inccounter

;中斷處理 movsi,offsetintmsg ;顯示信息 calldpstri

moval,20h

;發(fā)送中斷結(jié)束命令

out20h,al popds ;恢復(fù)寄存器 popbx popax

iret

;中斷返回new08h endp例7.2

可屏蔽中斷服務(wù)程序(續(xù)6)dpstri proc ;顯示字符串子程序 pushax pushbxdps1: lodsb

…dps2: popbx popax retdpstri endpA8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!7.6駐留中斷服務(wù)程序駐留TSR(TerminateandStayResident)程序用戶程序運(yùn)行后仍然保存在主存中,可以讓其他程序使用利用DOS功能調(diào)用31H代替4CH終止程序小型駐留程序常編寫成COM程序駐留程序也可以編寫成EXE程序需要駐留內(nèi)存的程序段要寫在前面例7.3報時中斷駐留服務(wù)程序系統(tǒng)08H號中斷服務(wù)程序調(diào)用1CH中斷每隔55ms調(diào)用這個報時中斷,中斷65543次就是時間過了一個小時本例編寫一個駐留內(nèi)存的1CH內(nèi)部中斷服務(wù)程序?qū)崿F(xiàn)每過一小時就顯示信息執(zhí)行此程序后,報時中斷服務(wù)程序?qū)Ⅰv留內(nèi)存例7.3報時中斷駐留服務(wù)程序(續(xù)1)new1ch proc

sti ;開中斷

pushsi ;保護(hù)寄存器

pushds

mov

si,cs

mov

ds,si ;設(shè)置數(shù)據(jù)段DS

addcountl,1

adccounth,0例7.3報時中斷駐留服務(wù)程序(續(xù)2)

cmp

countl,hourl

jnzn1ch1

cmp

counth,hourh

jnzn1ch1

movcountl,0

movcounth,0

mov

si,offset

intmsg calldpstrihourl=7hourh=1例7.3報時中斷駐留服務(wù)程序(續(xù)3)n1ch1: popds ;恢復(fù)寄存器

popsi

iret ;中斷返回countl

dw0counth

dw0intmsg db‘OneHourHasPassed!’,0dh,0ah,0new1ch endpdpstri proc ;顯示字符串子程序

…OneHourHasPassed!例7.3報時中斷駐留服務(wù)程序(續(xù)4)start: movax,cs movds,ax movdx,offsetnew1ch cli movax,251ch

;設(shè)置1CH中斷入口地址 int21h sti movdx,offsettsrmsg movah,09h int21h

;顯示安裝

溫馨提示

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

最新文檔

評論

0/150

提交評論