微機接口-中斷控制使用_第1頁
微機接口-中斷控制使用_第2頁
微機接口-中斷控制使用_第3頁
微機接口-中斷控制使用_第4頁
微機接口-中斷控制使用_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1第7章中斷控制接口教學重點8088CPU的中斷系統(tǒng)

8259A的中斷工作過程和工作方式中斷服務程序的編寫27.18088中斷系統(tǒng)8088的中斷系統(tǒng)采用向量中斷機制一共可處理256個中斷源,中斷向量編號為0~255,用以區(qū)別不同的中斷。借助專用的中斷控制器Intel8259A對系統(tǒng)中的可屏蔽中斷資源(INTR)進行擴充和管理,8259A的功能有:擴充系統(tǒng)的可屏蔽中斷資源(每片可管理8個中斷,級聯(lián)后最多可管理64個中斷)實現(xiàn)中斷優(yōu)先級比較實現(xiàn)中斷源的識別(通過向總線送中斷矢量)37.1.18088的中斷類型中斷邏輯INTO指令單步中斷除法錯誤INTn指令CPU8259A中斷控制器IR0IR1IR2IR3IR4IR5IR6IR7來自外設的中斷源

-INTA可屏蔽中斷申請

INTR不可屏蔽中斷申請可屏蔽中斷源不可屏蔽中斷源內(nèi)部中斷INT3指令3n401NMI中斷2不可屏蔽中斷源外部中斷48088的中斷分類內(nèi)部中斷——內(nèi)部機制產(chǎn)生除法錯中斷(0號)——除運算結(jié)果溢出時產(chǎn)生指令中斷(n號)——執(zhí)行intn指令后產(chǎn)生(操作碼CDH)斷點中斷(3號)——執(zhí)行int3指令(單字節(jié)指令操作碼CCH)用于在調(diào)試中設置斷點,程序遇斷點則中斷溢出中斷(4號)——執(zhí)行into指令,且前面運算有溢出(OF=1)時產(chǎn)生單步中斷(1號)——TF標志置1后,每執(zhí)行一條子指令將發(fā)生一次外部中斷——外部引腳觸發(fā)非屏蔽中斷(外設提供向量號)——觸發(fā)INTR引腳產(chǎn)生可屏蔽中斷(2號)——觸發(fā)NMI引腳產(chǎn)生51.內(nèi)部中斷內(nèi)部中斷是由于8088內(nèi)部執(zhí)行程序出現(xiàn)特殊情況而引起的中斷除法錯中斷: 向量號為0指令中斷(intn): 向量號為n斷點中斷(int3): 向量號為3溢出中斷(into): 向量號為4單步中斷: 向量號為1內(nèi)部中斷的中斷向量號已由Intel公司確定62.外部中斷外部中斷是由于8088外部通過CPU引腳提出中斷請求而引起的中斷非屏蔽中斷(NMI):向量號為2外部通過非屏蔽中斷NMI請求,必須響應非屏蔽中斷主要用于處理系統(tǒng)的意外或故障(如奇偶校驗或協(xié)處理器運算錯誤等)可屏蔽中斷(INTR):向量號由中斷控制器提供外部通過可屏蔽中斷INTR請求,由標志位IF

控制是否響應;響應時將產(chǎn)生有效的–INTA信號可屏蔽中斷主要用于外設中斷請求(請求交換數(shù)據(jù)等服務)IF=0可屏蔽由INTR引腳引發(fā)的中斷7中斷標志IF的狀態(tài)IF=0:可屏蔽中斷不會被響應(禁止中斷,關中斷,中斷屏蔽)系統(tǒng)復位時IF=0任何一個中斷被響應,將使IF=0執(zhí)行指令CLI,可使IF=0IF=1:可屏蔽中斷會被響應(允許中斷,開中斷,中斷開放)執(zhí)行指令STI,可使IF=1執(zhí)行指令IRET后,IF將恢復為中斷前的狀態(tài)(即IF=1)明確IF標志的狀態(tài)是關鍵87.1.28088的中斷響應過程CPU查詢各中斷的先后順序,決定了各中斷源的優(yōu)先級別:軟件中斷除法錯中斷指令中斷溢出中斷非屏蔽中斷可屏蔽中斷單步中斷高低98088的中斷響應過程NMIN軟件中斷INTRTF=1中斷響應周期讀中斷向量號下條指令現(xiàn)行指令IF=1NNNNYYYYY執(zhí)行中斷服務108088的中斷響應過程(續(xù))Y還有NMITEMP=1標志寄存器入棧TEMP=TF,IF=TF=0CS:IP入棧獲取中斷向量執(zhí)行服務程序彈出CS:IP彈出標志寄存器返回被中斷程序(1)(2)(3)(4)(5)NNY(6)單步中斷標志暫存118088的中斷響應過程(續(xù))8088各種中斷源的優(yōu)先權(quán),實際上是指被識別的先后順序多種中斷同時請求時,最先響應的則可能是單步中斷或NMI中斷127.1.38088的中斷向量表4B4B中斷向量表1KB3FFH0H0號中斷向量IPCS弄清幾個概念:中斷向量號N(中斷類型號)中斷向量(中斷服務程序的入口地址)中斷向量表中斷向量存放的首址:N×4以下詳述138088的中斷向量和中斷向量表中斷向量號——區(qū)別不同中斷源的編號0~255,也稱中斷向量號。中斷向量——指示中斷服務程序的入口,該地址包括:偏移地址IP、段地址CS。每個中斷向量的低字是偏移地址、高字是段地址,需占用4個字節(jié)(低對低,高對高)。中斷向量表——8088微處理器從物理地址000H開始到3FFH(1KB),依次安排256個中斷向量。所占用的1KB區(qū)域,稱中斷向量表。N號中斷向量存放的首地址——N×4147.2內(nèi)部中斷服務程序編寫內(nèi)部中斷服務程序與編寫子程序類似利用過程定義偽指令PROC/ENDP第1條指令通常為開中斷指令STI最后用中斷返回指令IRET通常采用寄存器傳遞參數(shù)主程序需要調(diào)用中斷服務程序使用前,需要重新設置中斷向量(入口地址)利用INTn指令調(diào)用中斷服務程序15例7.1內(nèi)部中斷服務程序編寫:80H

號中斷服務程序功能:通過BIOS功能調(diào)用INT10H,顯示以“0”結(jié)尾的字符串。入口參數(shù):DS:DX存字符串緩沖區(qū)首地址(段地址:偏移地址)。16數(shù)據(jù)段

intoff dw?;用于保存原中斷向量將來恢復

intseg dw?;用于保存原中斷向量將來恢復

intmsg db‘AInstructionInterrupt!’ db0dh,0ah,0;要顯示的信息例7.1以下分段介紹程序17保存中斷向量 movax,3580h;讀出原中斷向量

int21h movintoff,bx ;保存偏移地址 movintseg,es ;保存段基地址例7.118設置中斷向量的做法 pushds movdx,offsetnew80h movax,segnew80h movds,ax movax,25

80h;設置新中斷向量 int21h popds例7.119調(diào)用中斷服務程序 movdx,offsetintmsg

int80h;中斷調(diào)用例7.1注意比較指令:int/call20主程序結(jié)束 movdx,intoff movax,intseg movds,ax movax,25

80h;恢復原中斷向量

int21h movax,4c00h;返回DOS

int21h例7.1屏幕顯示:AInstructionInterrupt!21

new80h proc

sti;開中斷,允許中斷嵌套 pushax;保護現(xiàn)場 pushbx pushsi例7.1中斷服務子程序22顯示字符串 movsi,dxnew1: moval,[si]

;取顯示字符 cmpal,0

;判是否串尾 jznew2

movbx,0

;調(diào)BIOS中斷 movah,0eh

;子功能號

int10h incsi jmpnew1例7.123退出中斷服務程序 new2: popsi ;恢復現(xiàn)場 popbx popax iret ;中斷返回 new80h endp例7.124用int21h子功能訪問中斷向量AH=25——設置中斷向量入口參數(shù):ds:dx=中斷向量,al=中斷向量號AH=35——讀取中斷向量入口參數(shù):al=中斷向量號出口參數(shù):bx:es=中斷向量設置中斷向量:movdx,intoff movax,intseg movds,axmovax,25

80hint21h

讀取中斷向量:

movax,3580hint21hmovintoff,bxmovintseg,es25直接訪問中斷向量(以int

80h為例)設置中斷向量:

pushdsxorax,axmovds,ax leabx,80H*4 movwordptrds:[bx],intoff incbx incbx

movwordptrds:[bx],intsegpopds讀取中斷向量:

pushdsxorax,axmovds,axleabx,80H*4 movintoff,wordptrds:[bx] incbx incbx

movintseg,wordptrds:[bx]

popds

267.38259A中斷控制器Intel8259A是可編程中斷控制器(PIC)。可配合CPU(I8080/85、I8086/88/286/386等)管理可屏蔽中斷。8259A的基本功能:1片8259A可以管理8級中斷,經(jīng)級聯(lián)最多可擴展至64級每一級中斷都可單獨被屏蔽或允許在中斷響應周期,可提供相應的調(diào)用指令(配合I8080/85)或中斷向量號(配合I8086/88/286/386)8259A設計有多種工作方式,通過初始化編程進行設置277.3.18259A的內(nèi)部結(jié)構(gòu)和引腳D7~D0-INTAINT中斷請求寄存器中斷屏蔽寄存器數(shù)據(jù)總線緩沖器IR0IR7讀/寫控制邏輯級聯(lián)緩沖器比較器-RD-WRA0-CSCAS0CSA1CAS2-SP/-EN優(yōu)先權(quán)判別電路中斷服務寄存器控制邏輯281.中斷控制中斷請求寄存器IRR記錄中斷請求(IR0~IR7)Di位為1表示相應引腳有中斷請求;為0表示無請求中斷服務寄存器ISR記錄中斷服務(IR0~IR7)Di位為1表示相應中斷正在服務中;為0表示位在服務中斷屏蔽寄存器IMR記錄中斷屏蔽(IR0~IR7)Di位為1表示相應中斷被屏蔽(禁止);為0表示允許292.與處理器接口-CSA0-RD-WR功能00100110000101010×111×××寫入ICW1、OCW2和OCW3寫入ICW2~ICW4和OCW1讀出IRR、ISR和查詢字讀出IMR數(shù)據(jù)總線高阻狀態(tài)數(shù)據(jù)總線高阻狀態(tài)30CAS0IR0CAS1IR1CAS2IR2

IR3-INTAIR4IR5INTIR6IR7-SP/-EN

CAS0-INTA

CAS1

CAS2INT

IR0

IR1-SP/-ENIR7CAS0IR0CAS1IR1CAS2IR2IR3-INTAIR4IR5INTIR6IR7-SP/-EN-INTAINTR+5V8259級聯(lián)工作示意圖3.8259A的級連輸出得到響應的從片編號313.中斷級連8259A可以級連,1個主片最多可以級連8個從片,級連時的連接方法:主片——級連線CAS0~CAS2連至每個從片的CAS0~CAS2,輸出被選中的從片編號,INT線連至CPU的中斷請求輸入端INTR從片——中斷請求信號INT連至主8259A的一個中斷請求輸入端IRx;主、從片的指定:在非緩沖方式下,通過引腳-SP/-EN來指定:接地指定該片充當從片(-SP=0);反之則該片充當主片(-SP=1)。在緩沖方式下,通過軟件控制字來指定,引腳-SP/-EN另作它用(緩沖器使能)327.3.28259A的中斷過程CAS0~CAS2D0~D7-SP/-ENIR0~IR7CPU響應周期8259A工作波形INT第1個總線周期T1T2T3T4ALECLK

第2個總線周期T1T2T3T4第1個-INTA前保持高電平

-INTA-LOCK中斷向量主片輸出級聯(lián)信號從片接收337.3.38259A的工作方式普通全嵌套方式特殊全嵌套方式自動循環(huán)方式特殊循環(huán)方式優(yōu)先權(quán)固定方式優(yōu)先權(quán)循環(huán)方式設置優(yōu)先權(quán)方式普通中斷結(jié)束方式特殊中斷結(jié)束方式自動中斷結(jié)束方式非自動中斷結(jié)束方式結(jié)束中斷方式中斷屏蔽方式普通屏蔽方式特殊屏蔽方式中斷觸發(fā)方式邊沿觸發(fā)方式電平觸發(fā)方式數(shù)據(jù)緩沖方式緩沖方式非緩沖方式與CPU配合方式與8080/8085CPU配合與8086/8088CPU配合級連方式級連不級連341、與CPU的配合方式與8080/8085CPU配合——中斷響應時,-INTA信號3次有效,8259A送CALLXXXXH指令(3B)的機器代碼到數(shù)據(jù)總線;與8086/8088CPU配合——中斷響應時,-INTA信號2次有效,8259A送相應的中斷向量號(1B)到數(shù)據(jù)總線。8080/85CPU8259A8086/88CPU8259ACALLXXXXH(3B)中斷向量號(1B)-INTAINTR-INTAINTR3個2個352、級連方式不級連——只用1片,如PC/XT級連——可使用2~9片,如PC/AT(2片)-INTAINTRIR0IR7IR7IR0CAS0~CAS2=010INTINTD0~D7363、數(shù)據(jù)緩沖方式非緩沖方式-SP/-EN引腳作為輸入端在8259A級連時,用它選擇該芯片充當主片或從片緩沖方式對8259A的數(shù)據(jù)線(輸出中斷向量)加緩沖器予以隔離和驅(qū)動-SP/-EN引腳作為輸出端,輸出允許信號,用以關閉或開啟緩沖器375、中斷觸發(fā)方式邊沿觸發(fā)方式中斷請求輸入端出現(xiàn)上升沿為有效的中斷請求信號電平觸發(fā)方式中斷請求端出現(xiàn)高電平為有效的中斷請求信號384、設置優(yōu)先權(quán)方式普通全嵌套方式8259A的中斷優(yōu)先權(quán)順序固定不變,從高到低依次為: IR0、IR1、IR2、……IR7中斷請求后,8259A對當前請求中斷中優(yōu)先權(quán)最高的中斷IRi予以響應,將其向量號送上數(shù)據(jù)總線,對應ISR的Di位置位,至到中斷結(jié)束(ISR的Di位復位)在ISR的Di位置位期間,禁止再發(fā)生同級和低級優(yōu)先權(quán)的中斷,但允許高級優(yōu)先權(quán)中斷的嵌套特殊全嵌套方式——允許同級中斷嵌套(用于級連主片)優(yōu)先權(quán)自動循環(huán)方式——最高優(yōu)先權(quán)自動轉(zhuǎn)移到相鄰的低優(yōu)先級中斷源優(yōu)先權(quán)特殊循環(huán)方式——最高優(yōu)先權(quán)轉(zhuǎn)移到由指令指定的中斷源39中斷結(jié)束字什么是8259A的中斷結(jié)束字(EOI)?8259A判斷中斷服務寄存器ISR的狀態(tài):ISRi=1,表示該中斷源正在得到服務;一般情況下,將不再響應同級或低級的中斷(但采用特殊屏蔽方式時,可響應低級別的中斷)ISRi=0,表示該中斷服務已結(jié)束,可響應同級或低級別的中斷。用指令向8259A送中斷結(jié)束字,可以使ISR的某位清0該操作與CPU無關。405、結(jié)束中斷處理方式普通中斷結(jié)束方式——中斷結(jié)束時用戶用指令送結(jié)束字,清0ISR中當前優(yōu)先級最高的中斷服務標志配合全嵌套優(yōu)先權(quán)方式使用當CPU用輸出指令往8259A發(fā)出普通中斷結(jié)束EOI命令時,8259A就會對ISR中當前優(yōu)先級最高的中斷服務標志進行清0特殊中斷結(jié)束方式——中斷結(jié)束時用戶用指令送特定的結(jié)束字,指明要清除ISR中的哪一位配合循環(huán)優(yōu)先權(quán)方式使用自動中斷結(jié)束方式——中斷響應后自動送結(jié)束字,清0ISR中當前優(yōu)先級最高的中斷服務標志。416、屏蔽中斷源方式普通屏蔽方式IMRi=1,對應的中斷IRi將被屏蔽,該中斷請求將不能從8259A送到CPUIMRi=0,則允許對應的中斷產(chǎn)生特殊屏蔽方式——允許發(fā)生低級的中斷嵌套,用于級連時的主片。IMRi=1,但ISRi=0,中斷IRi被屏蔽;但允許發(fā)生低級的中斷。42帶“特殊”字樣的中斷管理功能特殊全嵌套——允許同級中斷發(fā)生,用于級連主片特殊屏蔽——屏蔽同級中斷,但允許低級中斷發(fā)生特殊中斷結(jié)束——指定要清除的中斷服務標志的編碼(xxx)特殊優(yōu)先級循環(huán)——指定當前擁有最高優(yōu)先級的引腳編碼(xxx)437.3.48259A的編程初始化編程8259A開始工作前用戶必須對8259A進行初始化編程。通過寫入初始化命令字ICW對8259A進行初始化中斷操作編程在8259A工作期間可以隨時向8259A寫入操作命令字OCW,使之按用戶設置的新的工作方式進行工作用戶還可以通過寫操作命令字OCW通知8259A,下面的操作要讀取8259A中的狀態(tài)信息,以便了解其工作情況441.初始化命令字ICW8259A在開始工作前必須寫入初始化命令字初始化命令字ICW最多可以有4個:

ICW1~ICW4必須按照以上順序依次寫入其中ICW1和ICW2是必須的ICW3和ICW4是否需要,由具體的工作方式?jīng)Q定ICW1~ICW4的寫入流程45ICW1×××1LTIM×SNGLIC4D7D6D5D4D3D2D1D0×——表示可以任意為1為0都可以(建議為0)1——只能為1,作為標志中斷觸發(fā)方式:LTIM=1,電平觸發(fā)方式LTIM=0,邊沿觸發(fā)方式規(guī)定單片或級連方式:SNGL=1,單片方式SNGL=0,級連方式是否寫入ICW4IC4=1,要寫入ICW4IC4=0,不寫入ICW4,即ICW4規(guī)定的位全為046ICW2T7T6T5T4T3×××D7D6D5D4D3D2D1D0設置中斷向量號T7~T3為中斷向量號的高5位低3位由8259A自動確定:IR0為000、IR1為001、……、IR7為11147ICW3S7S6S5S4S3S2ID2S1ID1S0ID0D7D6D5D4D3D2D1D0級連命令字主片:Si=1,說明其對應引腳IRi

上連接有從片;否則引腳IRi上沒有連接從片從片:ID0~ID2編碼說明該從片的INT引腳接到了主片上的哪個IRi引腳針對從片針對主片48ICW4000SFNMBUFM/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)要配合的微處理器類型:8086/8088(PM=1)16位CPU8080/8085(PM=0)8位CPU49初始化主片8259A moval,11h ;寫入ICW1 out20h,al jmpintr1 intr1: moval,08h ;寫入ICW2 out21h,al jmpintr2 intr2: moval,04h ;寫入ICW3 out21h,al jmpintr3 intr3: moval,1h ;寫入ICW4 out21h,al中斷控制器的初始化程序段PC機上8259地址:20h-21h50初始化從片8259A moval,11h ;寫入ICW1 out0a0h,al jmpintr5intr5: moval,70h ;寫入ICW2 out0a1h,al jmpintr6intr6: moval,02h ;寫入ICW3 out0a1h,al jmpintr7intr7: moval,01h ;寫入ICW4 out0a1h,al中斷控制器的初始化程序段該體中8259的兩個地址:0a0h、0a1h512.操作命令字OCW8259A工作期間,可以隨時接受操作命令字OCWOCW共有3個:OCW1~OCW3寫入時沒有順序要求,需要哪個OCW就寫入那個OCW52OCW1M7M6M5M4M3M2M1M0D7D6D5D4D3D2D1D0屏蔽命令字其內(nèi)容將寫入中斷屏蔽寄存器IMRMi=1,則禁止對應IRi中斷;Mi=0,則允許對應IRi中斷。各位互相獨立。53OCW2RSLEOI00L2L1L0D7D6D5D4D3D2D1D0R、SL和EOI配合使用產(chǎn)生中斷結(jié)束EOI命令和改變優(yōu)先權(quán)順序L2~L0的3位編碼指定IR引腳54OCW30ESMMSMM01PRRRISD7D6D5D4D3D2D1D0ESMM、SMM設置中斷屏蔽方式P、RR和RIS規(guī)定隨后讀取的狀態(tài)字含義553.讀取狀態(tài)字CPU可隨時讀出IRR、ISR、IMR和查詢字A0為低(偶地址)時由OCW3中RR和RIS位編碼決定讀取的是IRR或ISR,由OCW3中P位決定讀取的是查詢字,查詢字可反映8259A是否有中斷請求,及哪個引腳上有中斷請求A0為高(奇地址)時,讀取的是IMR56查詢字I----W2W1W0D7D6D5D4D3D2D1D0中斷位I位為1,有外設請求中斷W2~W0的編碼當前中斷請求的最高優(yōu)先級574.命令字和狀態(tài)字的區(qū)別方法利用讀寫信號區(qū)別寫入的控制寄存器和讀出的狀態(tài)寄存器利用地址信號區(qū)別不同I/O地址的寄存器由控制字中的標志位說明是哪個寄存器由芯片內(nèi)順序控制邏輯按一定順序操作不同的寄存器由前面的控制字(引導字)決定后續(xù)操作的寄存器這是接口電路中常用的方法587.48259A在IBMPC系列機上的應用CAS0~CAS2

8259A定時器時鐘中斷鍵盤中斷保留異步通信COM2中斷異步通信COM1中斷并行打印機LPT2中斷軟盤中斷并行打印機LPT1中斷A0-INTRCS—IRQ0—IRQ1—IRQ2—IRQ3—IRQ4—IRQ5—IRQ6—IRQ7—A0—-CS-INTA-RD-WR對比829A在IBMPC/AT機的應用829A在IBMPC/XT機上的應用+5VD0~D7INT-SP/-ENPC/XT機的外中斷管理598259A在IBMPC/AT上的應用CAS0~2CAS0~2+5V主8259A80286CPUINTRD0~D7-SP/-ENINTD0~D7日時鐘鍵盤串行口2串行口1并行口2軟盤并行口1A0-INTR1CS—IRQ0—IRQ1IRQ2—IRQ3—IRQ4—IRQ5—IRQ6—IRQ7—A0—-CS

從8259AD0~D7INT-SP/-EN實時鐘改向0AH中斷保留保留保留協(xié)處理器硬盤保留A0-INTR2CS—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…………-INTA-RD-WR-INTA-IOR-IOW-INTA-RD-WR-S0~-S282288級聯(lián)60PC機中8259A應用注意事項利用上升沿做為中斷請求IRQ的有效信號IRQ0~IRQ7中斷向量號依次為08H~0FHIRQ8~IRQ15中斷向量號依次為70H~77H(PC/AT機)采用普通全嵌套優(yōu)先權(quán)方式,中斷優(yōu)先權(quán)從高到低順序為IRQ0~IRQ2、IRQ8~IRQ15(級連從片)、IRQ3~IRQ7,且不能改變采用普通中斷結(jié)束EOI方式,需在中斷服務程序最后發(fā)送普通EOI命令一般采用普通屏蔽方式,通過寫IMR相應位為0允許中斷,應注意不要破壞原屏蔽狀態(tài)。617.5外部中斷服務程序編寫外部可屏蔽中斷服務程序,需注意:中斷服務結(jié)束時應向8259發(fā)送中斷結(jié)束命令EOI(OCW2)一般只能采用存儲單元來傳遞參數(shù)不能使用DOS系統(tǒng)功能調(diào)用(DOS為單用戶單任務操作系統(tǒng),不能重入)中斷服務程序要盡量短小,以免影響系統(tǒng)的實時性627.5外部中斷服務程序(續(xù))編寫主程序,需注意:修改中斷向量控制CPU的中斷允許標志設置8259A的中斷屏蔽寄存器63例題7.2可屏蔽中斷服務程序在PC機中:8259A的IRQ0(其向量號為08H)中斷請求來自定時器8253,每隔55ms產(chǎn)生一次定時中斷例中,修改后的08H號中斷服務程序?qū)@示一個字符串,10次中斷共顯示10個字符串用內(nèi)存單元(共享變量)在主程序與外部中斷服務程序之間傳遞參數(shù):中斷發(fā)生的次數(shù)顯示信息安排在共同的數(shù)據(jù)段中64數(shù)據(jù)段 intmsg db‘A8259AIR0Interrupt!’ db0dh,0ah,0 counter db0例7.265保存中斷向量 movax,35

08h int21h pushbx ;保存偏移地址 pushes ;保存段基地址例7.266設置中斷向量 cli pushds;保護ds movdx,offset

new08h;中斷入口地址 movax,seg

new08h movds,ax movax,25

08h int21h popds;恢復ds例7.267設置中斷寄存器 inal,21h ;讀IMR pushax andal,0feh ;允許IRQ0(接8253) out21h,al movcounter,0;設置中斷次數(shù)初值 sti ;開中斷例7.268循環(huán)等待中斷 start1: cmpcounter,10 jbstart1 ;中斷10次退出例7.210次8253定時器中斷就發(fā)生在該循環(huán)當中69主程序結(jié)束

cli popax out21h,al popdx popds movax,2508h int21h

sti movax,4c00h int21h例7.2A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!A8259AInterrupt!70 new08h proc sti ;開中斷 pushax ;保護寄存器 pushbx pushds movax,@data;@data表示數(shù)據(jù)段地址 movds,ax ;設置數(shù)據(jù)段DS例7.2進入中斷服務程序71中斷處理 inccounter movsi,offsetintmsg ;顯示信息 calldpstri ;dpstri為顯示子程序 ;注意其中不能使用DOS調(diào)用例7.272退出中斷服務程序

moval,20h ;送中斷結(jié)束字

out20h,al popds ;恢復寄存器 popbx popax iret ;中斷返回 new08h endp例7.273顯示字符串子程序

dpstri proc ;顯示字符串子程序 pushax pushbx dps1: lodsb ;用si指針取一字符到al cmpal,0 ;判是否結(jié)束標志 jzdps2例7.274顯示字符串子程序(續(xù))

movbx,0

;顯示1個字符 movah,0eh

;0eh為子功能號

int10h ;BIOS功能調(diào)用可重入 jmpdps1 dps2: popbx popax ret dpstri endp例7.2757.6駐留中斷服務程序內(nèi)存駐留TSR(TerminateandStayResident)程序應用程序運行后仍然保存在主存中,可以被其他程序調(diào)用利用DOS功能調(diào)用

31H代替4CH終止程序小型駐留程序常編寫成.COM程序,但駐留程序也可編成.EXE程序需要駐留內(nèi)存的程序段要書寫在其他代碼的前面76例題7.3報時中斷駐留服務程序在PC機中系統(tǒng)08H號中斷服務程序中又調(diào)用了INT1CH指令中斷,該中斷原來未安排任何服務,是留給用戶的軟中斷接口,以便每55ms(tick)能執(zhí)行1次用戶的任務。每隔55ms(tick)調(diào)用這個報時中斷,中斷65543次就是時間過了1小時該例編寫駐留內(nèi)存的INT1CH中斷服務程序用于整點報時,程序功能是每過1小時顯示1條信息執(zhí)行此程序后,該報時中斷服務程序?qū)Ⅰv留內(nèi)存注意:因65543=65536+7,假定用2個字來記錄中斷發(fā)生的次數(shù),則每經(jīng)過1小時有:高字=高字+1低字=低字+7低字能被7整除時表示時間為整點77

new1ch proc ;該中斷程序?qū)Ⅰv留內(nèi)存 sti ;開中斷 pushsi ;保護寄存器 pushds

movsi,cs ;com程序數(shù)據(jù)和代碼共段

movds,si ;設置數(shù)據(jù)段DS addcountl,1 ;處理記錄tick的低字 adccounth,0;處理記錄tick的高字例7.3進入中斷服務程序78中斷處理 cmpcountl,7;判低字為7否 jnzn1ch1

;不為7,整點未到 cmpcounth,1;高字為1否 jnzn1ch1

;不為1,整點未到 movcountl,0

;整點到,清0計數(shù) movcounth,0 movsi,offsetintmsg

;顯示字符串 calldpstri

;dpstri顯示子程序例7.365543=65536+7=高字1H/低字7H79退出中斷服務程序 n1ch1: popds ;恢復寄存器 popsi iret ;中斷返回;----------------------------------------------------

countl

dw0

溫馨提示

  • 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

提交評論