版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、匯編語言程序設(shè)計第第8 8章章 輸入輸出程序設(shè)計輸入輸出程序設(shè)計1、 I/O設(shè)備的數(shù)據(jù)傳送方式2、 程序直接控制I/O方式3、 中斷傳送方式 匯編語言程序設(shè)計I/O設(shè)備的數(shù)據(jù)傳送方式1、 CPU與外設(shè) 2、 直接存儲器存取(DMA)方式 匯編語言程序設(shè)計CPU與外設(shè)每種輸入輸出設(shè)備都要通過一個硬件接口或控制器和CPU相連。例如,顯示器通過數(shù)據(jù)接口和CPU相連。這些接口和控制器都能支持輸入、輸出指令I(lǐng)N,OUT與外部設(shè)備交換信息。這些信息包括控制、狀態(tài)和數(shù)據(jù)三種不同性質(zhì)的信息,它們必須按不同的端口地址分別傳送。匯編語言程序設(shè)計控制信息輸出到I/O接口,通知接口和設(shè)備要做什么操作。狀態(tài)信息從I/O
2、接口輸入到CPU,表示I/O設(shè)備當前所處的狀態(tài)。數(shù)據(jù)信息是I/O設(shè)備和CPU真正要交換的信息。外設(shè)和接口之間的數(shù)據(jù)信息可以是串行的,也可以是并行的。匯編語言程序設(shè)計直接存儲器存?。―MA)方式1、程序直接控制的I/O方式 (1)立即傳送方式 (2)程序查詢方式 2、中斷傳送方式 3、直接存儲器存取方式(DMA方式) 匯編語言程序設(shè)計程序直接控制的I/O方式(1 1)立即傳送方式)立即傳送方式 立即傳送方式又稱為無條件傳送方式,它是最簡單的一種輸入/輸出傳送方式。在該方式中,認為外設(shè)總是處于準備就緒狀態(tài),程序不必查詢外設(shè)的狀態(tài),當需要與之交換數(shù)據(jù)時,就直接執(zhí)行輸入、輸出指令來完成數(shù)據(jù)的傳送。(2
3、 2)程序查詢方式)程序查詢方式 程序查詢方式是指:在數(shù)據(jù)傳送之前,CPU要先查詢外設(shè)的當前狀態(tài),只有當外設(shè)處于準備就緒或空閑狀態(tài)時,才執(zhí)行輸入輸出指令進行數(shù)據(jù)傳送。否則,CPU循環(huán)查詢,直到外設(shè)準備就緒為止。所以,程序查詢方式比立即傳送方式可靠性更高。匯編語言程序設(shè)計中斷傳送方式 中斷傳送方式的特點是:主機CPU正常執(zhí)行操作,當外設(shè)需要進行I/O操作時,會向CPU發(fā)出一個“申請”信號,請求CPU處理。這時,CPU暫時中斷當前正在執(zhí)行的程序(即主程序),轉(zhuǎn)去執(zhí)行為輸入/輸出設(shè)備服務(wù)的中斷處理程序,服務(wù)完畢,再返回到被中斷的程序處繼續(xù)執(zhí)行。 采用中斷傳送方式,CPU不必花大量的時間查詢外設(shè)狀態(tài),
4、而使CPU和外設(shè)并行工作,只有當外設(shè)準備好時,用很短的時間去處理一下,處理完畢又回到主程序繼續(xù)執(zhí)行,可大大提高CPU的工作效率。匯編語言程序設(shè)計直接存儲器存取方式(DMA方式)DMA方式的思路是:外設(shè)與內(nèi)存間的數(shù)據(jù)傳送不經(jīng)過CPU,也不需要CPU的干預(yù),在外設(shè)與內(nèi)存間開設(shè)直接通道,由一個專門的硬件控制器來直接控制外設(shè)與內(nèi)存間的數(shù)據(jù)交換,這種方式就叫做直接存儲器存取方式,簡稱DMA方式。用來控制DMA操作的硬件控制器就是DMA控制器。 DMA方式可大大提高批量數(shù)據(jù)的傳送速度,對于硬盤這類設(shè)備,采用DMA方式很合適。DMA方式主要是在硬件DMA控制器的控制下實現(xiàn)的。 匯編語言程序設(shè)計程序直接控制程
5、序直接控制I/OI/O方式方式I/O端口計算機的外部設(shè)備和大容量存儲設(shè)備都是通過接口連接到系統(tǒng)上,每個接口由一組寄存器組成,這些寄存器都分配有一個稱為I/O端口的地址編碼。計算機的CPU和內(nèi)存就是通過這些端口和外部設(shè)備進行通信的。匯編語言程序設(shè)計I/O接口部件一般有三種寄存器:數(shù)據(jù)寄存器,用作數(shù)據(jù)緩沖。狀態(tài)寄存器,用來保存設(shè)備和接口的狀態(tài)信息,供CPU對外設(shè)進行測試。命令寄存器,用來保存CPU發(fā)出的命令以控制接口和設(shè)備的操作這些寄存器都分配有各自的端口號,CPU通過不同的端口號來選擇各種外部設(shè)備。匯編語言程序設(shè)計I/O地址功 能I/O地址功 能00H0FHDMA控制器8237A2F8H2FEH
6、2號串行口(COM2)20H3FH可編程中斷控制器8237A320H324H硬盤適配器40H5FH可編程中斷計時器366H36FHPC網(wǎng)絡(luò)60H63H8255A PPI372H377H軟盤適配器70H71HCMOS RAM378H37AH2號并行口(LPT1打印機)81H8FHDMA頁表地址寄存器380H38FHSDLC及BSC通信匯編語言程序設(shè)計93H9FHDMA控制器390H393HCluster適配器A0HA1H可編程中斷控制器23A0H3AFHBSC通信C0HCEHDMA通道,內(nèi)存/傳輸?shù)刂芳拇嫫?B0H3BFHMDA視頻寄存器F0HFFH協(xié)處理器3BCH3BEH1號并行口170H1F
7、7H硬盤控制器3C0H3CFHEGA/VGA視頻寄存器200H20FH游戲控制端口3D0H3D7HCGA視頻寄存器278H27AH3號并行口(LPT2打印機)3F0H3F7H軟盤控制寄存器2E0H2E3HEGA/VGA使用3F8H3FEH1號串行口(COM1)匯編語言程序設(shè)計I/O指令I(lǐng)/O指令用來完成累加器(AL/AX)與I/O端口間的數(shù)據(jù)傳送,包括輸入指令I(lǐng)N和輸出指令OUT兩條指令,每條指令都有直接和間接兩種端口尋址方式。 1輸入指令 IN 指令格式: IN AL/AX,addr 指令功能:將指定的I/O端口中的內(nèi)容輸入到累加器AL/AX中。1)直接端口尋址方式: IN AL,addr
8、; ALaddr IN AX,addr ; AXaddr +1,addr2)間接端口尋址方式: IN AL,DX ; AL DX IN AX,DX ; AXDX+1, DX匯編語言程序設(shè)計輸出指令(OUT)指令格式: OUT adr,AL/AX指令功能:將累加器AL或AX中的內(nèi)容輸出到指定的I/O端口中。 1 1)直接端口尋址方式:)直接端口尋址方式: OUT adr,AL ; adrAL OUT adr,AX ;adr +1,adrAX2 2)間接端口尋址方式:)間接端口尋址方式: OUT DX,AL ;DX AL OUT DX,AX ;DX +1, DX AX 匯編語言程序設(shè)計需要注意的問
9、題1)輸入、輸出指令不影響標志位。2)IN指令的目的操作數(shù)和OUT指令的源操作數(shù)只能使用累加器AL、AX,若需要將I/O端口中的內(nèi)容輸入(IN指令)到其它寄存器或內(nèi)存單元中,只能先輸入到累加器中,然后再傳送一次。3)在直接尋址方式中,端口地址在指令中直接給出。它是個8位的立即數(shù),即端口的8位物理地址,其范圍是0 - 255(0 - FFH),直接端口尋址方式只限于外設(shè)的前256個端口。匯編語言程序設(shè)計4)在間接尋址方式中,端口地址通過DX間接給出,其范圍為065535(0FFFFH),所有I/O端口都可以使用這種尋址方式。5)對于前256個端口(0FFH),既可使用直接尋址,又可使用間接尋址;
10、而當端口號超過256時,只能使用間接尋址,也就是要先把端口地址放到DX中,然后再進行輸入或輸出。6)輸入/輸出指令提供了字節(jié)、字使用方式,選用哪一種,取決于I/O端口的寬度,如為字端口,則用字操作指令。7)輸入/輸出指令中的端口號或寄存器DX的內(nèi)容均為端口的地址,而傳送的是端口中的內(nèi)容。 匯編語言程序設(shè)計例1:將端口61H中的內(nèi)容送入寄存器BH中。 IN AL,61H MOV BH,AL 例2:把一個字從端口地址0028和0029傳送到存儲器的DATA_WORD字單元中。 IN AX, 28H MOV DATA_WORD, AX例3:測試某狀態(tài)寄存器(端口地址位27H)的第2位是否為1,若為1
11、,則轉(zhuǎn)移到ERROR進行處理。 IN AL, 27H TEST AL, 00000100B JNZ ERROR匯編語言程序設(shè)計例4:某接口的命令寄存器(端口地址為126H)的第7位控制成組數(shù)據(jù)傳送,下面的指令序列將發(fā)送成組數(shù)據(jù)傳送命令。 MOV DX, 126H IN AL, DX OR AL, 80H OUT DX, AL即將第7位設(shè)置為1,其他06位不變。故用指令: OR AL, 80H匯編語言程序設(shè)計I/O程序舉例【例【例1 1】設(shè)計一個發(fā)聲程序。通過PB口的第1位輸出一串500個周期的方波,使揚聲器發(fā)聲。分析: 在PC機系統(tǒng)板上,有一可編程并行接口芯片8255A,其內(nèi)部有三個8位的數(shù)據(jù)
12、端口:PA口、PB口和PC口,其端口地址分別為60H、61H和62H。I/O 0與與門門放大器放大器定時門控定時門控7 6 5 4 3 2 1 0端口端口61H揚聲器揚聲器匯編語言程序設(shè)計假設(shè)PB口(61H)被設(shè)置成輸出口,使其中第1位PB1 由0變?yōu)?,延遲一段時間再由1變?yōu)?,使得與門不斷的打開關(guān)閉,形成脈沖方波,通過放大器放大送到揚聲器,控制揚聲器發(fā)聲。該端口的第0位和定時器連接,現(xiàn)在不用該定時器發(fā)聲,則該位置0。匯編語言程序設(shè)計SOUND PROC NEAR;CX聲音延時,BX聲音頻率PUSH AXPUSH DXMOV DX,CXIN AL,61H ;取得設(shè)備控制寄存器的開關(guān)量AND
13、AL,11111100B; 將0,1位清零,關(guān)閉定時器TRIG: XOR AL,2 ;將第1位變反OUT 61H,AL ;再送回PB口,控制接通揚聲器MOV CX,BXDELAY: LOOP DELAY;用來控制脈沖門開關(guān)的時間DEC DXJNE TRIGPOP DXPOP AXRET SOUND ENDP匯編語言程序設(shè)計【例2】打印字符程序PRT_CHAR這是一個采用查詢方式的打印字符程序。程序通過反復(fù)讀取并測試打印機的狀態(tài)來控制輸出。在打印機接口中,數(shù)據(jù)寄存器的端口地址為378H,狀態(tài)寄存器的端口地址為379H,控制寄存器的端口地址為37AH,它們各位的含義如圖所示:匯編語言程序設(shè)計匯編語
14、言程序設(shè)計DATA SEGMENTMESS DB Printer is normal,0DH,0AHCOUNT EQU $ - MESSDATA ENDSCSEG SEGMENT ASSUME CS: CSEG, DS: DATASTART: MOV AX, DATA MOV DS, AX MOV SI, OFFSET MESS MOV CX, COUNT匯編語言程序設(shè)計NEXT: MOV DX, 379H;狀態(tài)端口WAIT: IN AL, DX TEST AL, 80H ;測試是否忙 JE WAIT ;如果忙,則繼續(xù)查詢 MOV AL, SI;否則,讀一個字符 MOV DX, 378H;數(shù)據(jù)
15、端口 OUT DX, AL ;將數(shù)據(jù)輸出到數(shù)據(jù)端口 MOV DX, 37AH;控制端口 MOV AL, 0DH ;控制代碼 OUT DX, AL ;發(fā)送控制代碼 MOV AL, 0CH ;控制代碼 OUT DX, AL ;發(fā)送控制代碼 INC SI ;指向下一個字符 LOOP NEXTMOV AH, 4CH INT 21H CSEG ENDS END START匯編語言程序設(shè)計【例3】CPU要從三個設(shè)備輪流輸入數(shù)據(jù),PROC1、PROC2、PROC3分別是設(shè)備1、設(shè)備2和設(shè)備3的數(shù)據(jù)輸入程序,它們的狀態(tài)寄存器的端口地址分別用STAT1、STAT2和STAT3表示,這三個狀態(tài)寄存器的5位是輸入準
16、備位。INPUT: IN AL, STAT1 TEST AL, 20H JZ DEV2 CALL FAR PTR PROC1DEV2: IN AL, STAT2 TEST AL, 20H JZ DEV3 CALL FAR PTR PROC2DEV3: IN AL, STAT3 TEST AL, 20H JZ NO_INPUT CALL FAR PTR PROC3NO_INPUT: 匯編語言程序設(shè)計中斷傳送方式1、 8086的中斷分類2、 中斷指令3、 中斷向量表4、 中斷過程5、 中斷優(yōu)先級和中斷嵌套6、 中斷處理程序匯編語言程序設(shè)計中斷:是一種使CPU中止正在執(zhí)行的程序而轉(zhuǎn)去處理特殊事件的操
17、作。中斷源:通常把引起中斷的事件或原因。它們可能是來自外設(shè)的I/O請求,也可能是計算機的一些異常事故或其他內(nèi)部原因。中斷服務(wù)程序:事先編好的處理特殊事件的程序。斷點:中斷發(fā)生時正在執(zhí)行的程序被中斷的位置。保護現(xiàn)場:處理中斷之前保護運行環(huán)境的工作?;謴?fù)現(xiàn)場:執(zhí)行完中斷處理程序后恢復(fù)運行環(huán)境的工作。匯編語言程序設(shè)計80X86中斷源指令中斷程序性中斷外設(shè)中斷硬件故障中斷匯編語言程序設(shè)計中斷的分類中斷的分類8086的中斷源可分為軟件中斷(內(nèi)部中斷)和硬件中斷(外部中斷)兩大類1.軟件中斷:由CPU內(nèi)部引起的中斷,引起內(nèi)部中斷的原因有三種: (1)由中斷指令I(lǐng)NT引起 CPU執(zhí)行完一條INT n指令后,
18、會立即產(chǎn)生中斷,并且調(diào)用系統(tǒng)中相應(yīng)的中斷處理程序來完成中斷功能。匯編語言程序設(shè)計(2)由于CPU的某些錯誤而引起除法出錯中斷;中斷類型號為0;在執(zhí)行除法指令時,若發(fā)現(xiàn)除數(shù)為0或商超過了寄存器所能表達的范圍,則產(chǎn)生一個類型為0的中斷。溢出中斷:中斷類型號為4,如果溢出標志OF=1,有一條專門指令I(lǐng)NTO來中斷發(fā)生溢出的算術(shù)操作。匯編語言程序設(shè)計(3)為調(diào)試程序而設(shè)置的中斷 單步中斷 :中斷類型為1,當標志位TF=1時,每條指令執(zhí)行后,CPU自動產(chǎn)生類型號為1的中斷。產(chǎn)生單步中斷時,CPU同樣自動將FLAGS、CS和IP的內(nèi)容保存入棧,然后清除IF和TF,按正常方式運行中斷服務(wù)程序。在單步處理程序
19、結(jié)束時,原來的FLAGS從堆棧中取回,又把CPU重新設(shè)置為單步方式。匯編語言程序設(shè)計斷點中斷 :中斷類型為3,供DEBUG調(diào)試程序用的。斷點可以設(shè)置在程序的任何地方,設(shè)置斷點實際上是把一條斷點指令I(lǐng)NT 3插入到程序中,CPU每執(zhí)行到斷點處的INT 3指令便產(chǎn)生一個中斷。在上述中斷中,INT指令和INTO指令產(chǎn)生的中斷,以及除法錯中斷都不能被禁止,并且比任何外部中斷的優(yōu)先級都高。匯編語言程序設(shè)計2.硬件中斷:來自處理機外部的中斷。(1)非屏蔽中斷(NMI) 是用戶不能通過CPU內(nèi)的中斷允許觸發(fā)器IF控制的中斷,由8086CPU的NMI管腳引入,這種中斷一旦產(chǎn)生,在CPU內(nèi)部直接生成中斷類型號0
20、2的中斷。如果系統(tǒng)使用了這種類型的中斷,那么CPU總會響應(yīng),所以非屏蔽中斷主要用于一些緊急的意外處理,如電源掉電等。匯編語言程序設(shè)計(2)可屏蔽中斷,來自各種外部設(shè)備的中斷??善帘沃袛嗑褪怯脩艨梢钥刂频闹袛?,其途徑是通過對CPU內(nèi)的中斷允許觸發(fā)器IF的設(shè)置來禁止和允許CPU響應(yīng)中斷??善帘沃袛嘤?086CPU的INTR管腳引入。這種中斷請求需要設(shè)備提供中斷類型號,CPU響應(yīng)中斷后,取中斷類型號的4倍作為中斷服務(wù)入口地址表的地址,通過查表得到相應(yīng)的中斷服務(wù)程序首地址,轉(zhuǎn)去執(zhí)行相應(yīng)的中斷服務(wù)程序。匯編語言程序設(shè)計INTR用于外部設(shè)備的中斷請求。這些外設(shè)通過8259A可編程控制器與CPU相連。外設(shè)發(fā)
21、出的中斷請求,CPU是否做出響應(yīng)由兩個控制條件決定;一是該外設(shè)的中斷請求是否被屏蔽;二是CPU是否允許響應(yīng)中斷。這兩個條件分別由8259A中的中斷屏蔽寄存器(IMR)和標志寄存器(PSW)中的中斷允許位IF控制。中斷屏蔽寄存器格式如所示。匯編語言程序設(shè)計在外部的中斷請求未被屏蔽的情況下,CPU是否響應(yīng)中斷與標志寄存器中的IF位有關(guān)。若IF=0,CPU禁止響應(yīng)任何外設(shè)的中斷;若IF=1,CPU則響應(yīng)外設(shè)的中斷。可用指令STI和CLI來設(shè)置或清除IF位。中斷屏蔽寄存器格式:匯編語言程序設(shè)計中斷指令中斷指令1. 1. 中斷指令中斷指令I(lǐng)NTINT 指令格式:INT N 指令的執(zhí)行過程: 1)SPSP
22、-2,SS:SP PSW 將標志寄存器的內(nèi)容壓入堆棧保存 2)IF0,TF0 AC 0 清除中斷允許標志IF和清除單步標志TF 3)SPSP-2,SS:SP CS SPSP-2,SS:SP IP 將斷點地址的段基址值CS和偏移值IP壓入堆棧保存,即保護斷點。 4)IP N4 ,CS N4+2 取中斷處理程序的入口地址,并轉(zhuǎn)去執(zhí)行。 匯編語言程序設(shè)計2.2.溢出則中斷指令溢出則中斷指令I(lǐng)NTOINTO 指令格式:INTO 指令的執(zhí)行過程: 若OF=1,則產(chǎn)生一個類型號為4的中斷;若OF=0,則不產(chǎn)生中斷。 3.3.中斷返回指令中斷返回指令I(lǐng)RETIRET 指令格式:IRET 指令的執(zhí)行過程: (
23、1)IPSS:SP,SPSP+2 恢復(fù)斷點地址的偏移值。 (2)CSSS:SP,SPSP+2 恢復(fù)斷點地址的段基址值。 (3)FLAGSSS:SP,SPSP+2 恢復(fù)標志寄存器的內(nèi)容。 匯編語言程序設(shè)計中斷向量表8086中斷系統(tǒng)能處理256種類型的中斷,中斷類型號的范圍為0-FFH。每種類型的中斷都由相應(yīng)的中斷服務(wù)程序來處理,中斷服務(wù)程序的入口地址又叫做中斷向量,每個中斷向量占4個字節(jié)(前2個字節(jié)存放中斷服務(wù)程序的偏移地址,后2個字節(jié)存放中斷服務(wù)程序的段地址),把各中斷服務(wù)程序的入口地址集合到一起形成的入口地址表就叫做中斷向量表。CPU接收到某個中斷時,要自動轉(zhuǎn)到相應(yīng)的中斷處理程序中執(zhí)行,必須
24、知道該中斷源對應(yīng)的中斷處理程序在內(nèi)存中的位置(該中斷處理程序事先必須編制好),這樣就要查找該中斷源對應(yīng)的中斷向量。 匯編語言程序設(shè)計中斷向量表保存在內(nèi)存最低地址的1KB空間內(nèi),其地址范圍為0段0000H 0段3FFH內(nèi)存區(qū)。各中斷服務(wù)程序的入口地址按其類型號依次存放,每個入口地址占用四個字節(jié)。中斷向量入口地址與中斷類型號之間的關(guān)系:中斷向量入口地址4中斷類型號中斷類型號乘以4,即可計算出相應(yīng)的中斷向量地址,從該地址的內(nèi)存單元中取出偏移地址和段地址分別放入IP和CS,CPU就可以轉(zhuǎn)入相應(yīng)的中斷處理程序。即: IP4N,4N +1 CS4N+2,4N +3匯編語言程序設(shè)計匯編語言程序設(shè)計地地 址址
25、中斷類中斷類型號型號用用 途途地地 址址中斷類中斷類型號型號用用 途途0 07F7F0 01F1FBIOSBIOS中斷向量中斷向量1C01C01DF1DF70707777I/OI/O設(shè)備中斷設(shè)備中斷向量向量8080FFFF20203F3FDOSDOS中斷向量中斷向量1E01E01FF1FF78787F7F保留保留10010017F17F40405F5F擴展擴展BIOSBIOS中斷中斷向量向量2002003C33C38080FDFDBASICBASIC18018019F19F60606767用戶中斷向量用戶中斷向量3C43C43FF3FFF1F1FFFF保留保留1A01A01BF1BF68686
26、F6F保留保留 匯編語言程序設(shè)計匯編語言程序設(shè)計設(shè)置中斷向量 在系統(tǒng)程序或應(yīng)用程序中由于某種需要而提供新的中斷處理程序時,就要設(shè)置對應(yīng)的中斷向量,使其指向新的中斷處理程序。 設(shè)置中斷向量一般有兩種方法:直接寫入法和使用DOS調(diào)用法。 直接寫入法用MOV指令將中斷向量直接寫入中斷向量表,下面是一個直接寫入法的例子匯編語言程序設(shè)計1、使用直接寫入法設(shè)置中斷向量。MOV AX,0MOV ES,AXMOV BX,N*4;設(shè)置N號中斷向量 MOV AX, OFFSET INTHANDMOV ES:WORD PTRBX,AX ;置偏移 MOV AX, SEG INTHANDMOV ES:WORD PTRB
27、X+2,AX;置段值INHAND: IRET匯編語言程序設(shè)計2、DOS功能調(diào)用法設(shè)置中斷向量和取中斷向量。設(shè)置中斷向量:把由AL指定的中斷類型的中斷向量DS:DX放在中斷向量表中。預(yù)置: AH=25H,AL=中斷類型號 DS:DX=中斷向量執(zhí)行:INT 21H 取中斷向量:把由AL指定的中斷類型的中斷向量從中斷向量表中取到ES:BX中 預(yù)置: AH=35H,AL=中斷類型號 執(zhí)行: INT 21H 返回時送:ES:BX中斷向量匯編語言程序設(shè)計使用DOS功能調(diào)用存取中斷向量MOV AL, N MOV AH, 35H INT 21H PUSH ES PUSH BX PUSH DSMOV AX,SE
28、G INTHAND;中斷處理程序的段地址MOV DS,AX MOV DX,OFFSET INTHAND;中斷處理程序的偏移地址MOV AL,N MOV AH, 25HINT 21H POP DS .POP DX POP DSMOV AL,N MOV AH, 25HINT 21H RET匯編語言程序設(shè)計中斷過程中斷過程1中斷請求 2中斷響應(yīng) (1)取中斷類型號N; (2)標志寄存器(FLAGS)內(nèi)容入棧; (3)當前正執(zhí)行的代碼段寄存器(CS)內(nèi)容入棧; (4)當前指令計數(shù)器(IP)內(nèi)容入棧; (5)禁止硬件中斷和單步中斷(IF0,TF0); (6)從中斷向量表中取4N的字內(nèi)容送IP,取4N+2
29、中的字內(nèi)容送CS。 (7)轉(zhuǎn)中入斷處理程序匯編語言程序設(shè)計3中斷處理 (1)保護現(xiàn)場;將CPU內(nèi)部寄存器的內(nèi)容依次壓入堆棧。 (2)中斷本身的處理程序。 (3)恢復(fù)現(xiàn)場;將所保存在堆棧中的寄存器內(nèi)容彈出堆棧。 (4)中斷返回(IRET)。 4中斷返回 (1)IPSS:SP,SPSP+2,恢復(fù)斷點地址的偏移值。 (2)CSSS:SP,SPSP+2,恢復(fù)斷點地址的段基址值。 (3)FLAGSSS:SP,SPSP+2,恢復(fù)標志寄存器的內(nèi)容。 匯編語言程序設(shè)計中斷優(yōu)先級和中斷嵌套中斷優(yōu)先級和中斷嵌套中斷優(yōu)先級中斷優(yōu)先級 在中斷系統(tǒng)中,事先給各中斷源安排一個中斷優(yōu)先級,當多個中斷源同時申請中斷時,CPU
30、先比較它們的優(yōu)先級,按優(yōu)先級從高到低的順序依次處理各個中斷源的請求。 中斷源 優(yōu)先級 內(nèi)中斷(除法錯,INTO,INT N) 高 不可屏蔽中斷(NMI) 可屏蔽中斷(INTR) 單步中斷 低 匯編語言程序設(shè)計中斷嵌套中斷嵌套 CPU在處理某一中斷時,如又有另一個中斷源申請中斷,CPU把新提出申請的中斷源與當前正在被處理的中斷源的優(yōu)先級進行比較。如果新提出申請的中斷源優(yōu)先級高,則CPU中斷當前正在執(zhí)行的中斷處理程序,去響應(yīng)新的中斷,處理完新的中斷后,再返回到原來的中斷處理程序繼續(xù)執(zhí)行,這種情況稱為中斷嵌套套. .匯編語言程序設(shè)計中斷處理程序中斷處理程序主程序:(1)設(shè)置中斷向量(2)設(shè)置設(shè)備的中
31、斷屏蔽位(3)設(shè)置CPU的中斷允許位IF(開中斷)硬件:(4)外設(shè)接口送中斷請求給CPU(5)當前指令執(zhí)行完后,CPU送響應(yīng)信號給外設(shè)接口(6)CPU接收中斷類型號(7)當前的FLAGS、CS和IP保存入棧(8)清除IF和TF(9)中斷向量送IP和CS匯編語言程序設(shè)計中斷處理程序的編寫方法:(1)保存寄存器內(nèi)容(2)如允許中斷嵌套,則開中斷(STI)(3)處理中斷(4)關(guān)中斷(CLI)(5)送中斷結(jié)束命令(EOI)給中斷命令寄存器(6)恢復(fù)寄存器內(nèi)容(7)返回被中斷的程序(IRET)匯編語言程序設(shè)計中斷處理程序大部分是由BIOS或DOS系統(tǒng)提供的,當用戶編寫自己需要的中斷處理程序時,應(yīng)注意下面
32、幾個問題:1、程序中不用數(shù)據(jù)段,一般將數(shù)據(jù)變量直接放入代碼段中。2、程序中不用堆棧段,中斷處理程序借用調(diào)用者的堆棧段。3、在進入中斷處理程序后,首先要保護現(xiàn)場。在程序中用到的寄存器要壓入堆棧保護起來,在程序結(jié)束前恢復(fù)各寄存器內(nèi)容,使用時要注意堆棧后進先出的特性。4、在中斷處理程序中,若允許中斷嵌套,應(yīng)在保護現(xiàn)場后,用STI指令開中斷,在中斷處理程序的工作結(jié)束后,在恢復(fù)現(xiàn)場返回之前用CLI指令關(guān)中斷。匯編語言程序設(shè)計【例【例3 3】 編寫一中斷處理程序,中斷類型號為60H,功能為顯示一字符串“THIS IS NEW_INT60H”。1)主程序的任務(wù)是設(shè)置中斷向量,并測試中斷是否正確。 2)在新的中斷處理程序中,調(diào)用INT 21H顯示字符串。流程圖如下 主程序開始設(shè)置新的60H號中斷向量調(diào)用新的60H中斷處理程序恢復(fù)原中斷向量讀取并保存原60H號中斷向量結(jié)束開始顯示字符串保護現(xiàn)場恢復(fù)現(xiàn)場結(jié)束中斷處理程序開中斷關(guān)中斷匯編語言程序設(shè)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人二手商鋪買賣合同協(xié)議書
- 個人間借款合同樣本:版
- 個人股權(quán)抵押合同范例
- 三方合同:學(xué)生就業(yè)定向合作
- 專屬應(yīng)屆畢業(yè)生:個人租賃合同范本
- 中學(xué)教務(wù)主任聘任合同樣本
- 單項木工承包合同
- 中外采購與供應(yīng)合同范本
- 專業(yè)水處理設(shè)備維護合同細則
- 三人合伙經(jīng)營合同范本
- 煙葉復(fù)烤能源管理
- 食品安全管理員考試題庫298題(含標準答案)
- 執(zhí)業(yè)醫(yī)師資格考試《臨床執(zhí)業(yè)醫(yī)師》 考前 押題試卷絕密1 答案
- 2024年山東濟寧初中學(xué)業(yè)水平考試地理試卷真題(含答案詳解)
- 社會保險課件教學(xué)課件
- 訂婚協(xié)議書手寫模板攻略
- 準備單元 雪地上的“足跡”(教學(xué)設(shè)計)-2023-2024學(xué)年五年級下冊科學(xué)大象版
- 宇航用商業(yè)現(xiàn)貨(COTS)器件保證指南-編制說明
- 音樂學(xué)科閱讀方案
- 《立體倉庫鋼結(jié)構(gòu)貨架技術(shù)規(guī)范(征求意見稿)》
- 2024年貴州蔬菜集團有限公司招聘筆試參考題庫附帶答案詳解
評論
0/150
提交評論