




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 8.1 輸入輸出的基本概念輸入輸出的基本概念 8.2 無條件方式輸入輸出無條件方式輸入輸出 8.3 查詢方式輸入輸出查詢方式輸入輸出 8.4 中斷方式輸入輸出中斷方式輸入輸出 本章要點本章要點 習題八習題八 第第8章章 輸入輸出方法輸入輸出方法 8.1 輸入輸出的基本概念輸入輸出的基本概念 8.1.1 外設(shè)接口外設(shè)接口 外部設(shè)備的種類繁多,功能各不相同,控制的方法也各式各樣。很多外設(shè)由于速度與信號的關(guān)系,無法直接連接在總線上與主機進行數(shù)據(jù)交換,需要在系統(tǒng)總線與外設(shè)之間設(shè)置一個“適配器”,又稱為“接口”,用于把CPU來的控制命令轉(zhuǎn)換成外設(shè)的控制信號,把外設(shè)的工作情況轉(zhuǎn)換成CPU可以讀取并處理的
2、狀態(tài)信號。接口部件擔負著總線信號與外設(shè)信號的轉(zhuǎn)接工作。它一頭與外設(shè)相連,能夠從外設(shè)接收數(shù)據(jù)或向外設(shè)發(fā)出信號,另一頭連接在系統(tǒng)總線上,能夠直接接收來自總線的數(shù)據(jù)和控制信號,或者在適當?shù)臅r候往總線發(fā)送數(shù)據(jù)。 CPU能夠與內(nèi)存進行數(shù)據(jù)交換,也可以與外設(shè)接口進行數(shù)據(jù)傳遞,兩者工作的方式是非常相似的。從第2章的描述中我們已經(jīng)知道,CPU如果要從內(nèi)存讀或向內(nèi)存寫一個數(shù)據(jù),總是先在地址總線上發(fā)出地址信號,以選定操作對象,然后在控制總線上發(fā)出控制信號,通知操作對象完成什么樣的操作,數(shù)據(jù)總線則提供被交換的數(shù)據(jù)進行傳遞的通道。CPU總是通過總線,以發(fā)送地址信號的方式選擇操作對象,對內(nèi)存對外設(shè)接口都是如此。所以,計
3、算機系統(tǒng)中對內(nèi)存進行了編號,就是內(nèi)存的物理地址,對外設(shè)接口也進行了編號,這個號碼稱作“外設(shè)端口號”。每一個端口號對應外設(shè)接口中的一個存放字節(jié)型數(shù)據(jù)的元件,稱為一個“外設(shè)端口”。一個外設(shè)接口中往往需要多個外設(shè)端口,占據(jù)多個外設(shè)端口號。CPU控制外設(shè)就是通過從這些外設(shè)端口中讀取數(shù)據(jù)以及向它們發(fā)送數(shù)據(jù)實現(xiàn)的。 在計算機內(nèi)外數(shù)據(jù)交換過程中,外設(shè)總是處于從屬狀態(tài),它受來自總線信號的控制,按控制命令的要求完成相應的操作,并且可以從主機接收或向主機提供數(shù)據(jù)。所以大多數(shù)外設(shè)接口從功能上可以分為控制部件、狀態(tài)部件和數(shù)據(jù)部件三大組成部分。控制部件又稱為命令部件,專用于接收來自主機的操作命令,并轉(zhuǎn)換成對外設(shè)的控制信
4、號;狀態(tài)部件負責向主機轉(zhuǎn)達外設(shè)的當前工作情況;數(shù)據(jù)部件是內(nèi)外數(shù)據(jù)交換的緩沖器,臨時存放需要傳遞的數(shù)據(jù)。 通常,三大部件中的每個部件至少占據(jù)1個外設(shè)端口地址,每個端口都以字節(jié)為基本構(gòu)成單位,因而1個外設(shè)接口一般最少占用3個端口地址。但是,有些外設(shè)能夠接受的控制命令很少,只需要1字節(jié)中的1位或2位就夠了,這時可以用1個控制端口的8個位分別控制不同的外設(shè),把不同外設(shè)的接口集中在一起,共同占據(jù)一個外設(shè)端口號。另一方面,接口中的命令部件只用于接收控制命令,CPU對命令部件只寫不讀。狀態(tài)部件剛好相反,只用于向CPU提供狀態(tài)信息,CPU對它只讀不寫。因而有些接口把命令部件與狀態(tài)部件設(shè)計為共同占用1個外設(shè)端口
5、號,由總線上的“讀”或“寫”信號區(qū)分究竟哪個部件是當前的數(shù)據(jù)傳遞對象。 8.1.2 8088的獨立編址方式的獨立編址方式 無論是內(nèi)存還是外設(shè)端口,都是以字節(jié)為基本的數(shù)據(jù)單位。當總線上出現(xiàn)有效的地址信號時,每個字節(jié)型內(nèi)存儲器或外設(shè)端口都能夠根據(jù)地址信號,判斷自己是否被選中為數(shù)據(jù)傳遞的對象(完成這種判斷的是地址譯碼器),沒有被選中的自動不參與本次總線上的數(shù)據(jù)傳遞。從這個角度說,只要為內(nèi)存和外設(shè)端口分別安排不同的地址,就可以從地址信號本身區(qū)分數(shù)據(jù)傳遞的對象是內(nèi)存還是外設(shè)端口,從而把各個內(nèi)存字節(jié)與外設(shè)端口編排一套地址號碼,這種編排地址的方式稱為“統(tǒng)一編址”或“混合編址”。 8088采用的是另一種編址方
6、式。由于8088CPU在數(shù)據(jù)交換時除了能夠發(fā)出地址信號外,還有一根特別的信號線(IO/M)可以發(fā)出兩種不同的信號。當這根信號線上發(fā)出高電位信號時,表示當前總線上是外設(shè)操作;反之,這根信號線上是低電位時,表示當前總線上是內(nèi)存操作。設(shè)計計算機系統(tǒng)時就可以利用這根信號線上的信號,區(qū)分操作對象是內(nèi)存還是外設(shè)。這時,各個內(nèi)存字節(jié)與外設(shè)端口可以分開編排兩套號碼,分別稱為內(nèi)存地址與外設(shè)地址。當CPU需要讀寫數(shù)據(jù)時,同時發(fā)出地址信號和 IO/M信號,這些信號一起送到地址譯碼器,地址信號選擇了具體的地址號碼,而 IO/M信號則選擇內(nèi)存還是外設(shè)。這種把內(nèi)存和外設(shè)端口分開各自編址的方式稱為“獨立編址”。 8.1.3
7、 控制外設(shè)的指令控制外設(shè)的指令 由于8088采取了獨立編址方式,就需要有特殊的指令控制對外設(shè)端口的操作。8088系統(tǒng)設(shè)計有兩條專用指令:IN和OUT。 【指令格式】IN d1, d2 【功能】從d2指明的外設(shè)端口中讀取1字節(jié)或2字節(jié)數(shù)據(jù),送到操作數(shù)d1指出的地方。 【說明】 (1)8088系統(tǒng)限制d1只能是AL或AX。當外設(shè)端口號不超過255時,d2操作數(shù)可直接寫端口號碼, 是外設(shè)的直接尋址方式;端口號超過255時,必須先把端口號放在DX中,以DX作為d2操作數(shù),這是外設(shè)的間接尋址方式。 (2)當d1是AL時,該指令從指定的端口中讀1字節(jié)數(shù)據(jù);當d1是AX時,CPU將從d2對應的端口讀1字節(jié)數(shù)
8、據(jù)到AL,從下一個端口號讀1字節(jié)數(shù)據(jù)到AH,即總共讀取16位數(shù)據(jù)送到AX 中。 【指令格式】OUT d1, d2 【功能】把操作數(shù)d2指明的1字節(jié)或2字節(jié)數(shù)據(jù)送到d1對應的外設(shè)端口中。 【說明】 (1)d2只能是AL或AX。當外設(shè)端口號不超過255時,d1操作數(shù)可直接寫端口號碼;端口號超過255時,必須先把端口號放在DX中,以DX作為d1操作數(shù)。 (2)當d2是AL時,該指令把AL中的8位數(shù)據(jù)送往d1指定的外設(shè)端口;當d2是AX時,該指令把AL中的8位數(shù)據(jù)送到d1對應的端口,把AH中的8位數(shù)據(jù)送往下一端口,即把16位數(shù)據(jù)送到d1對應的端口及下一端口中。 IN和OUT指令專門用于外設(shè)操作,必須與
9、內(nèi)存操作嚴格區(qū)分開。下面的例8.1用來說明IN、OUT指令與內(nèi)存操作的MOV指令之間的差別,并請讀者體會在數(shù)據(jù)傳遞期間IO/M信號的作用。 【例8.1】說明下面各指令或程序段的功能。(1)MOV DX,61H IN AL,DX(2)MOV BX,61H MOV AL,BX(3)OUT 21H,AL(4)MOV SI,21H MOV SI,AL 【解】 (1)先把立即數(shù)61H放到DX中,然后以DX中的61H作為外設(shè)端口號,從相應的外設(shè)端口讀取1字節(jié)數(shù)據(jù)送到AL中。 (2)先把立即數(shù)61H放到BX中,然后以BX中的61H作為偏移地址,以缺省段寄存器DS 中的值為段地址,從相應的內(nèi)存中取出1字節(jié)數(shù)據(jù)
10、送到AL中。 (3)把AL中的1字節(jié)數(shù)據(jù)送往21H號外設(shè)端口。 (4)先把立即數(shù)21H放到SI中,然后以SI中的21H作為偏移地址,以缺省段寄存器DS 中的值為段地址,把AL中的1字節(jié)數(shù)據(jù)送到相應的內(nèi)存中。 8.1.4 輸入輸出方式輸入輸出方式 1無條件方式無條件方式 又稱為直接方式,是指CPU可在任何時刻直接以外設(shè)操作指令與外部設(shè)備進行數(shù)據(jù)傳遞。顯然,這種方式對外設(shè)有很高的要求,它必須能像內(nèi)存一樣時刻準備著與 CPU進行數(shù)據(jù)傳遞,并且能夠跟上CPU的速度,保證傳送的信息的正確性。2查詢方式查詢方式 使用查詢方式工作的外設(shè)必須至少有兩個部件,其中之一是狀態(tài)部件。CPU每一次與外設(shè)進行數(shù)據(jù)交換之
11、前,先從狀態(tài)部件讀取信息,判斷外設(shè)是否處于“就緒”(Ready)狀態(tài)。如果來自外設(shè)的狀態(tài)信息反映出外設(shè)“沒有準備好”或正“忙”(Busy),說明還不能進行數(shù)據(jù)傳遞;反之,當CPU檢測到外設(shè)已準備好(Ready)后,可以與外設(shè)進行一次數(shù)據(jù)交換。 3中斷方式中斷方式 這是指每當外設(shè)準備好、能夠進行數(shù)據(jù)傳遞時,就向CPU發(fā)出一個特殊的請求信號,稱為中斷請求信號。CPU收到中斷請求后,暫停當前的工作,轉(zhuǎn)而執(zhí)行一段預先設(shè)計好的中斷服務程序,完成對外設(shè)的數(shù)據(jù)交換。執(zhí)行完中斷服務程序后,CPU仍回到被暫停的程序繼續(xù)執(zhí)行。4直接存儲器存取直接存儲器存取DMA(Direct Memory Access)方)方式
12、式 這是一種不通過CPU,在內(nèi)存與外設(shè)之間直接進行高速數(shù)據(jù)交換的方法。通常,系統(tǒng)總線是在CPU的控制之下,CPU總是作為數(shù)據(jù)傳遞的一方,內(nèi)存與外設(shè)其中之一作為另一方。當大量的數(shù)據(jù)需要傳遞時,在主機內(nèi)部,數(shù)據(jù)不 可能完全放在CPU中,只能放在內(nèi)存中。在CPU控制下進行大量數(shù)據(jù)的傳遞,就必須把內(nèi)存中的數(shù)據(jù)讀到CPU中,然后再寫往外設(shè),或者反方向,先把數(shù)據(jù)從外設(shè)讀入CPU再寫往內(nèi)存??梢?,數(shù)據(jù)必須以CPU作為過渡,才能到達它的目的地。DMA方式正是避免了這種過渡,讓數(shù)據(jù)不經(jīng)過CPU,直接從內(nèi)存送到外設(shè),或者反之。 進行DMA方式的數(shù)據(jù)傳遞必須有一個前提條件,就是CPU能夠讓出總線的控制權(quán),交由DMA
13、方式數(shù)據(jù)傳遞的專用控制器控制,當數(shù)據(jù)傳遞結(jié)束后,CPU再收回總線控制權(quán)。8088CPU支持這樣的總線操作方式,因而8088系統(tǒng)可以進行DMA方式的數(shù)據(jù)傳遞。 DMA控制器專門用于控制內(nèi)存與外設(shè)之間的直接數(shù)據(jù)傳遞,但是它沒有數(shù)據(jù)處理能力。在一些計算機系統(tǒng)中還設(shè)計有帶有處理能力的專用數(shù)據(jù)傳送芯片,其工作方式與 DMA方式很相似,也需要CPU在適當?shù)臅r候讓出總線供其使用,這種數(shù)據(jù)傳遞方式稱為“專用處理機方式”。系統(tǒng)總線 端口 61H: P7 P6 P5P4P3P2 P1 P01.193MHz 定時器 AB 與門 放大電路 揚聲器 圖8.1 揚聲器與系統(tǒng)總線的連接8.2 無條件方式輸入輸出無條件方式輸
14、入輸出 揚聲器發(fā)聲的基本原理是振動。揚聲器口上的一層薄膜在電信號控制下往復振動產(chǎn)生聲音,每秒鐘振動的次數(shù)就是所發(fā)出的聲音的頻率,振動的幅度決定聲音的強度。由于控制揚聲器的信號是二進制的開關(guān)信號,不能對流過揚聲器的電流的大小進行控制,因而不能控制揚聲器薄膜的振幅,所以小揚聲器只能發(fā)出固定強度的聲音。但開關(guān)信號變化的頻率是可控的,CPU正是通過控制開關(guān)信號的頻率,讓揚聲器發(fā)出不同頻率的聲音。 【例8.2】利用無條件數(shù)據(jù)傳送方式,讓計算機的揚聲器在1秒鐘內(nèi)保持發(fā)出500 Hz 的聲音。 【解】完整的程序如下: delnum = 14000 sta SEGMENT STACK DW 1024 DUP(
15、0) sta ENDS code SEGMENT ASSUME CS:code,SS:sta;功能:時間延遲,做若干次的乘法產(chǎn)生時間延遲的效果;入口:CX中的值作為循環(huán)次數(shù),值越大延遲時間越長;出口:無;破壞寄存器:CXdelayPROC NEARPUSHAXPUSH DX del:IMUL AX;用乘法指令延遲,執(zhí)行時間較長LOOPdelPOPDXPOPAXRETdelayENDP main: MOV CX,500 sou: PUSH CX IN AL,61H ;讀出原61H端口的數(shù)據(jù) AND AL,11111100B ;清最低兩位 OUT 61H,AL ;送低電位到P1 MOV CX,de
16、lnum ;取控制延遲時間的循環(huán)次數(shù)值 CALL delay IN AL,61H OR AL,00000010B ;置P1位為1 OUT 61H,AL MOV CX,delnum CALL delay POP CX LOOP sou MOV AX,4C00H INT 21Hcode ENDS END main 大多數(shù)外設(shè)不可能像揚聲器那樣工作,這些外設(shè)處理數(shù)據(jù)的速度和提供數(shù)據(jù)的速度往往比主機內(nèi)部速度慢得多,因而CPU與這類設(shè)備進行數(shù)據(jù)傳遞前必須先判斷它們是否“就緒”。CPU以查詢方式從外設(shè)讀取一批數(shù)據(jù),以及向外設(shè)送出一批數(shù)據(jù)的流程如圖8.2所示。8.3 查詢方式輸入輸出查詢方式輸入輸出N N
17、YY作命令 NNY Y(a) 查詢方式輸入操作流程(b) 查詢方式輸出操作流程讀狀態(tài)端口Ready?從數(shù)據(jù)端口讀一個數(shù)據(jù)處理完? 向數(shù)據(jù)端口寫一個數(shù) 據(jù)或向命令端口發(fā)一 個操作命令處理完?Y讀狀態(tài)端口 Ready?圖8.2 查詢方式下數(shù)據(jù)傳遞的流程 打印機是一種可以按查詢方式工作的輸出外設(shè),它與主機連接的接口部件是打印機適配器,也就是平常所說的“標準并行接口”或“并口”。打印機接口中的三大部件齊備,它們各自占據(jù)一個外設(shè)端口號碼,分別是: 數(shù)據(jù)部件 378H; 狀態(tài)部件 379H; 控制部件 37AH。 狀態(tài)端口各位的含義如下: BusyACKPESELECTERROR D7 D6 D5 D4
18、D3 D2 D1 D0 (1)D7位:是打印機的“忙”信號。這一位為0表示打印機當前正處于“忙”狀態(tài),為1表示打印機不忙。 (2)D6位:是打印機送回的認可信號。當打印機從接口中正確接收1字節(jié)數(shù)據(jù)后,就送回一個低電位的認可信號,這個信號只維持很短的時間,然后又恢復高電位。 (3)D5位:缺紙信號。這一位為1表示打印機無紙,因而無法打印,為0時表示正常工作。 (4)D4位:聯(lián)機信號。這一位為1表示正處于聯(lián)機工作狀態(tài),為0表示沒有聯(lián)機,這時不能工作。 (5)D3位:出錯信號。為0表示打印機內(nèi)部出現(xiàn)錯誤,不能工作,為1則正常??刂贫丝诟魑坏暮x如下: INTSELECTINITAuto FeedST
19、B D7 D6D5D4 D3 D2 D1 D0 (1)D4位:允許中斷信號。將該位置1,允許打印機以中斷方式工作,為0則不允許。 (2)D3位:聯(lián)機命令。置1將設(shè)置打印機的聯(lián)機工作方式,控制打印機時總是把這一位置1,否則打印機不能正常工作。打印機正常打印時這一位需要保持1。 (3)D2位:初始化信號。正常工作時總是把這一位置1,需要把打印機重新初始化時,則在這一位先清0再置1,并且要維持清0的時間0.05秒以上。初始化又稱作打印機復位,復位時可觀察到的現(xiàn)象是打印頭回到最左邊。 (4)D1位:自動走紙。置1要求打印機在打印完一行后(回車時)自動走紙,清0時則需要向打印機輸出換行符(0AH)控制走
20、紙。這一位通常被置為0。 (5)D0位:選通信號。CPU通過在這一位上先置1再清0,通知打印機從數(shù)據(jù)部件中取走一字節(jié)數(shù)據(jù)并打印。 把圖8.2中查詢輸出的流程稍做修改,可以作為控制打印機以查詢方式工作的程序流程,如圖8.3所示。 圖8.3 查詢方式控制打印機 N YY N結(jié)束計數(shù)器清0讀狀態(tài)端口ready ?送先高后低的STB信號打印完?計數(shù)器加1,取下一數(shù)據(jù)送數(shù)據(jù)到數(shù)據(jù)端口 【例8.3】控制打印機以查詢方式工作,打印26個英文字母,共打印30行。 【解】 sta SEGMENT STACK DB 1024 DUP(0) sta ENDS data SEGMENT print DB abcdef
21、ghijklmnopqrstuvwxyz,0DH,0AH data ENDS code SEGMENT ASSUME CS:code,SS:sta,DS:data init PROC NEAR ;打印機初始化程序 MOV DX,37AH MOV AL,08H OUT DX,AL MOV CX,1000 init1: LOOP init1 ;延遲,維持初始化信號一段時間 MOV AL,0CH OUT DX,AL ;結(jié)束初始化,保持聯(lián)機 RET init ENDPstart:MOV AX,dataMOV DS,AXCALLinit;初始化打印機 MOVCX,30;設(shè)定循環(huán)次數(shù)為30,打印30行ag
22、ain: LEABX,print;待打印字符串首地址存放于BX中next:MOV DX,379Hwait:INAL,DXTESTAL,80HJZwait;打印機忙,轉(zhuǎn)去再讀狀態(tài)端口 DECDX;把DX置為數(shù)據(jù)端口號378H OUT DX,AL ;置STB信號為1 DEC AL OUT DX,AL ;置STB信號為0 CMP BYTE PTR BX,0AH JZ newline INC BX JMP nextnewline: LOOP again MOV AX,4C00H INT 21Hcode ENDS END start 8.4.1 中斷的基本概念中斷的基本概念 1中斷中斷 CPU暫停正在執(zhí)
23、行的程序,轉(zhuǎn)去完成另一件工作,完成后再回到原來的程序繼續(xù)執(zhí)行的現(xiàn)象稱為中斷。 2中斷源中斷源 能夠?qū)е翪PU中斷的事件稱為中斷源。如果引發(fā)中斷的事件來自CPU的內(nèi)部,這樣的中斷源稱為內(nèi)中斷源,比如CPU執(zhí)行了一個會產(chǎn)生溢出的除法操作,就會產(chǎn)生一個內(nèi)部中斷。如果是由CPU外部的信號引發(fā)中斷,這種中斷源稱為外中斷源,打印機申請中斷就是一種外中斷源。8.4 中斷方式輸入輸出中斷方式輸入輸出 3中斷源分類中斷源分類 按照引發(fā)中斷的中斷源的位置不同,8088系統(tǒng)把中斷源分為內(nèi)中斷源和外中斷源兩大類。來自CPU內(nèi)部的中斷請求是內(nèi)中斷源,8088系統(tǒng)的內(nèi)中斷源有除法溢出、執(zhí)行中斷指令和單步中斷(CPU每執(zhí)行
24、一條指令都產(chǎn)生一次的中斷請求,主要用于程序的調(diào)試)。外中斷源是來自CPU芯片外的中斷請求信號,8088芯片有兩個引腳可以接收外中斷請求信號,分別是NMI和INTR,并且8088對這兩個引腳上的中斷請求信號的處理方式不太一樣。根據(jù)中斷信號來自哪一個引腳,外中斷源又再分為兩類:把中斷請求信號通過NMI引腳送往CPU的中斷源稱為不可屏蔽外中斷源,INTR上的則稱為可屏蔽外中斷源。 4中斷號中斷號 在計算機系統(tǒng)中,各種中斷源都被統(tǒng)一地編排了一個互不相同的號碼,用以唯一地標識一個中斷源,這個號碼稱為中斷號。在8088系統(tǒng)中,中斷號的有效范圍是0到255。常用的中斷號與中斷源的對應關(guān)系見表8.1。 5中斷
25、源識別中斷源識別 由于中斷源有不同的類型,向CPU申請中斷的方式也各不相同。當CPU知道有中斷請求后,還必須判斷出究竟是幾號中斷請求。CPU確定中斷號的過程稱為中斷源識別。如果中斷請求來自CPU內(nèi)部,CPU內(nèi)有相應機制可以取到內(nèi)中斷請求的中斷號;如果是不可屏蔽外中斷請求,系統(tǒng)只安排了唯一的中斷號(2號);當中斷請求來自CPU的INTR外引腳時,情況就比較復雜了。 6中斷優(yōu)先級中斷優(yōu)先級8088共支持256個中斷源,尤其是包括若干硬中斷源,各種中斷源就有同時提出中斷請求的可能。當多個中斷申請同時送到8088時,CPU必須能分別輕重緩急妥善處理。CPU分辨各中斷源優(yōu)先次序的方式是預先把所有中斷源進
26、行分級,稱為中斷優(yōu)先級。當CPU遇到同時有兩個或兩個以上的中斷申請時,就按它們的優(yōu)先級次序,先為級別最高的中斷源服務。 8088把所有中斷源劃分為4個等級,以0級為最高,依次降低等級。各中斷源的等級劃分情況是: 0級 除單步中斷以外的內(nèi)中斷源; 1級 不可屏蔽外中斷源; 2級 可屏蔽外中斷源; 3級 單步中斷。 不同級別中的兩個中斷源同時申請中斷時,CPU可以根據(jù)級別高低決定服務的先后次序。但同級中的兩個中斷源同時申請又如何處理呢?在0級中斷源中,所有中斷源由CPU執(zhí)行指令產(chǎn)生的,只有執(zhí)行DIV或IDIV指令時才有可能產(chǎn)生0號中斷請求,執(zhí)行一條中斷指令只能產(chǎn)生一個中斷號,而CPU在任何時刻只能
27、執(zhí)行一條指令,所以不可能同時有兩個或兩個以上的0級中斷請求。1級與3級中斷源分別各有一個,不涉及同時產(chǎn)生中斷請求的問題,只有2級比較麻煩。 所有可屏蔽外中斷源都處于中斷優(yōu)先級中的2級,這些外中斷源都必須通過CPU的INTR引腳向CPU提出中斷申請,如果它們當中出現(xiàn)同時申請的現(xiàn)象,將由中斷控制器處理。在8088系統(tǒng)中,中斷控制器可以把它管轄的所有可屏蔽外中斷源再進行內(nèi)部分級,當同時出現(xiàn)多個中斷申請時,由中斷控制器判別相互間優(yōu)先級的高低,并把其中最高級別的可屏蔽中斷請求通過INTR送達CPU。 7中斷屏蔽中斷屏蔽 如果某個中斷源發(fā)出中斷請求后,CPU置之不理,繼續(xù)完成自己的工作,這種現(xiàn)象稱為中斷屏
28、蔽。8088系統(tǒng)中對各種中斷分類處理,0級和1級中斷是不能被屏蔽的,當CPU收到0級或1級中斷請求時,必須立刻放下正在執(zhí)行的程序進行中斷處理;但2 級或3級中斷就有被屏蔽的可能。3級中斷是否屏蔽由標志寄存器中的TF標志位決定,當TF0時,CPU將不響應單步中斷請求。指令系統(tǒng)中沒有專門指令可以直接針對TF標志位操作,但可以通過PUSHF和POPF指令達到修改TF值的目的。2級中斷是否屏蔽受兩個方面的控制:一是標志寄存器的IF標志位,如果IF0,所有的2級中斷源都被屏蔽;另一個可控制2級中斷屏蔽的是中斷控制器,中斷控制器是作為8088系統(tǒng)的一個外設(shè),CPU可以通過命令的形式通知中斷控制器屏蔽掉幾號
29、中斷請求,這種方式可以只屏蔽2級中斷源中的某幾個而不是屏蔽所有2級中斷。 8中斷服務程序中斷服務程序 CPU響應中斷就是暫停正在執(zhí)行的程序,轉(zhuǎn)而為中斷源進行相應的服務,稱為中斷服務。中斷服務當然是通過執(zhí)行一段程序來實現(xiàn)的。CPU響應某個中斷時去執(zhí)行的程序稱為“中斷服務程序”或“中斷處理程序”。顯然,如果要系統(tǒng)正常工作,中斷服務程序就必須長期保存在內(nèi)存中,保證CPU隨時可以執(zhí)行它。CPU在兩種情況下會轉(zhuǎn)去執(zhí)行中斷服務程序,一是正在執(zhí)行的程序中遇到了一條中斷指令(INT指令),二是硬中斷源產(chǎn)生了中斷請求且沒有被屏蔽。第二種情況是由硬件中斷源引起的中斷,也就是說,不需要CPU去執(zhí)行什么專用指令,只要
30、出現(xiàn)沒被屏蔽的硬中斷申請,就會導致CPU去執(zhí)行相應的中斷服務程序。 各個中斷源都對應地有自己的中斷服務程序,當機器啟動完成后,這些中斷服務程序是操作系統(tǒng)或ROM BIOS中的程序段。這些中斷服務程序也是可以修改的,只要用戶程序能夠把一段程序長期保留在內(nèi)存中(即常駐內(nèi)存),并且通知CPU這就是某個中斷的中斷服務程序。 9中斷向量中斷向量 既然每個中斷服務程序都放在內(nèi)存中,當然就有其入口地址,這樣,當CPU響應中斷時才能知道轉(zhuǎn)到哪里去執(zhí)行中斷服務程序。入口地址是一個完整的邏輯地址,包括16位的段地址和16位的偏移地址,由總共32位數(shù)據(jù)構(gòu)成,需要占據(jù)4個字節(jié)的存儲空間。把中斷服務程序的入口地址的各個
31、字節(jié)按照一定的規(guī)則排列起來,構(gòu)成的一個有特定含義的數(shù)據(jù)組合稱為“中斷向量”或“中斷矢量”。8088系統(tǒng)規(guī)定其中斷服務程序入口地址的4個字節(jié)的排列規(guī)則是: (偏移地址低字節(jié),偏移地址高字節(jié),段地址低字節(jié),段地址高字節(jié)) 為了說明的方便,中斷向量通常都用十六進制書寫。比如某中斷服務程序的入口地址在F000:EF05處,表示成中斷向量就是: (05,EF,00,F0) 10中斷向量表中斷向量表 8088系統(tǒng)中共有256個中斷源,每個中斷源都有自己的中斷向量,把所有這些中斷向量集中起來,按照中斷號由0到255的順序,從內(nèi)存物理地址為0處開始依次存放,構(gòu)成一張“中斷向量表”。每個計算機系統(tǒng)的中斷向量表都
32、有自己固定的位置和長度,8088系統(tǒng)是把這張表放在內(nèi)存的最低端,共占用1024個字節(jié)。圖8.4是中斷向量表的示意圖。圖8.4 8088中斷向量表的結(jié)構(gòu)以及在內(nèi)存中的位置 11中斷嵌套中斷嵌套 在CPU執(zhí)行一個低級別的中斷服務程序時,如果系統(tǒng)中又產(chǎn)生了一個高級別的中斷請求,這時系統(tǒng)會暫停低級中斷服務,優(yōu)先處理高級別中斷,處理完后再繼續(xù)低級中斷服務。這種高級別中斷打斷低級別中斷服務的現(xiàn)象稱為中斷嵌套。 中斷嵌套的典型例子是,在一個中斷服務程序中,需要在屏幕上顯示一些信息,屏幕顯示需要用到后面將要說明的10H號中斷調(diào)用,因此在中斷服務程序中就會寫有INT 10H指令。這是一條內(nèi)中斷調(diào)用指令,是最高級
33、別的中斷,在執(zhí)行到該指令時,系統(tǒng)會轉(zhuǎn)去先進行10H號中斷服務,在屏幕上進行顯示,10H號中斷返回后,再繼續(xù)原先低級別的中斷服務。8.4.2 中斷處理過程中斷處理過程 不論是軟中斷還是硬中斷,當CPU響應中斷時,自動完成下列操作: (1)取中斷號n(中斷源識別)。 (2)把標志寄存器(PSW)的內(nèi)容入棧。 (3)當前CS的值入棧。 (4)當前IP的值入棧。 (5)把標志寄存器中的IF和TF標志位清0。 (6)從物理地址4n處取出4個字節(jié)的n號中斷的中斷向量,設(shè)取出的數(shù)據(jù)依次是b0、b1、b2、b3,把(b1, b0)拼成一個字型數(shù)據(jù)送到IP中,(b3, b2)拼成一個字型數(shù)據(jù)送到CS中。(7)按
34、)按CS:IP的新值繼續(xù)執(zhí)行。的新值繼續(xù)執(zhí)行。這些操作是由硬件自動完成的,是CPU響應中斷這一過程中密不可分的幾個步驟,不能把它們拆開來,理解作依次執(zhí)行幾條指令的結(jié)果。響應中斷的過程中,有三個字型數(shù)據(jù)被入棧保護,其中包括CS和IP。CS與IP的專職就是存放下一條指令的邏輯地址,它們的值被入棧保護,就意味著將來可以從棧中取出保存的值,恢復被中斷的程序繼續(xù)執(zhí)行,就像子程序調(diào)用與返回一樣。 響應過程中的第(6)個操作是把CS和IP修改為n號中斷向量的值,也就是把CS和IP改為n號中斷服務程序的入口地址,繼而轉(zhuǎn)入中斷服務程序執(zhí)行。當中斷服務完成后,在服務程序的最后有一條特別的指令I(lǐng)RET作為結(jié)束。該指
35、令將把中斷時入棧保存的三個字型數(shù)據(jù)分別恢復到原出處,使CPU從中斷服務程序轉(zhuǎn)回到中斷時的程序繼續(xù)執(zhí)行。圖8.5 中斷處理過程 INT 21H被中斷程序及堆棧中斷向量表21H號中斷服務程21H42000:5A7B 842 F2281:042F 850 4 868 1 872 2入棧 IRET 7 DSP 5 A 0 0 2 0 X X出棧 X X2000:5A7D堆棧區(qū) 8.4.3 與中斷有關(guān)的指令與中斷有關(guān)的指令 在中斷的有關(guān)概念描述中多次提到軟中斷是CPU執(zhí)行中斷指令時產(chǎn)生的中斷,除了中斷指令外,中斷服務程序結(jié)束時也需要執(zhí)行一條特殊的指令,以告訴CPU中斷服務到此為止。關(guān)于2級中斷的屏蔽標志
36、位IF還有兩條專用指令,分別說明如下?!局噶罡袷健縄NT n【功能】產(chǎn)生一次n號中斷請求。由于這是中斷指令,屬于內(nèi)中斷,具有最高級別,CPU必然響應,因此該指令將導致一次n號中斷處理過程。具體的操作見8.4.2節(jié)中的中斷響應時硬件自動完成的動作。【說明】【說明】 (1)指令格式中的n是一個立即數(shù),用以代表中斷號,有效范圍是0到255。 (2)這是一條放在用戶程序中的指令,與隨時可能發(fā)生的硬件中斷不同,這是程序員有意識地安排在程序中的一個中斷,因而程序員很清楚這個中斷指令執(zhí)行的效果。這樣使用的中斷,其服務程序往往是系統(tǒng)預先編寫好的一些專用子程序,完成一些特定的服務功能,供用戶程序使用,就比如DO
37、S提供的服務程序讓用戶程序以INT 21H指令去調(diào)用一樣。這類程序段與子程序不同的是,它們在系統(tǒng)啟動時就已進入內(nèi)存中,不需要像子程序那樣與調(diào)用它的程序相聯(lián)接。因此,習慣上又把這類程序段稱為中斷服務子程序,當作子程序一樣使用,只是調(diào)用方式不同而已。 (3)指令格式中的n只要求在0到255之間,沒有其它的限制。也就是說,不論是哪一個中斷源,包括應該由硬件引起的外中斷源,只要知道它的中斷號,就可以用一條INT指令產(chǎn)生一次中斷調(diào)用。但對硬件中斷對應的0號、8號到0FH號,以及70H到 77H號,用INT指令去調(diào)用可能產(chǎn)生一些意想不到的結(jié)果,也有可能造成死機。 【指令格式】IRET 【功能】從棧中彈出3
38、個字,第1個彈出的送到IP,第2個到CS,第3個到PSW。 【說明】這是專門為中斷服務程序設(shè)計的一條指令,通常是中斷服務程序的最后一條指令,它的功能與中斷響應時硬件自動完成的動作相對應,從而保證不論是硬中斷還是軟中斷,在中斷服務結(jié)束后,CPU都能回到正確的位置繼續(xù)執(zhí)行。 【指令格式】CLI 【功能】把標志寄存器的IF標志位清0,使CPU不響應可屏蔽外中斷。 【指令格式】STI 【功能】把標志寄存器的IF標志位置1,允許CPU響應可屏蔽外中斷。 CLI與STI指令總是配合使用,使得計算機系統(tǒng)在某一段時間內(nèi)不響應任何可屏蔽外中斷請求。CLI是屏蔽掉所有2級中斷的簡單方法,但在應用時請小心,如果用戶
39、程序執(zhí)行過程中屏蔽了所有2級中斷,將使得系統(tǒng)不能從鍵盤、鼠標等輸入設(shè)備上接收數(shù)據(jù),這將使操作人員失去對機器的控制。所以,總是在屏蔽2級中斷一段時間以后再把它打開。在程序中屏蔽中斷的一個很好的理由,是不想要自己的程序在需要連續(xù)執(zhí)行時被硬件服務打斷,這通常是用在程序中需要執(zhí)行一些不能暫停的任務的情況下。8.4.4 系統(tǒng)提供的中斷服務子程序系統(tǒng)提供的中斷服務子程序DOS提供的中斷服務子程序分成很多子功能,完成各個子功能的程序段都集中放在一起,并且有一個總控程序,構(gòu)成了一個整體。整個中斷服務子程序的入口地址放在了21H號中斷向量中。這是一個軟件中斷,調(diào)用方式是INT指令,并規(guī)定調(diào)用時AH中必須放子功能
40、號,不同的子功能還需要有不同的入口參數(shù)。前面章節(jié)中已經(jīng)講述了其中的1號、2號、9號、0AH號和4CH號子功能,實際上DOS提供給用戶程序使用的子功能很多,包括如何讀寫文件、如何申請和釋放內(nèi)存、如何修改中斷向量、如何取得及修改系統(tǒng)當前的日期和時間等等,不能一一列舉。 BIOS是固化在計算機的內(nèi)存ROM芯片中的程序,其中包括計算機啟動時最初執(zhí)行的一些程序,從設(shè)備自檢、系統(tǒng)初始化,到引導操作系統(tǒng)。BIOS中還有很大一部分是提供了一些可供用戶程序使用的中斷服務子程序,這些子程序都用于對外部設(shè)備的直接控制,主要涉及鍵盤、顯示器、打印機、串行通訊等,由于這些設(shè)備的控制方法比較復雜,如果讓應用程序直接用輸入
41、輸出命令去控制,就會給程序的編制帶來巨大的障礙。而這些設(shè)備的控制程序雖然較長,但都有一個固定的模式,適合于做成公共子程序的形式供各個程序調(diào)用,BIOS中就是存放著這樣的子程序。各個主要的輸入輸出設(shè)備都有相應的子程序,這些子程序分在了各個中斷服務程序當中,包括10H、14H、16H、17H號等幾個中斷。8.4.5 中斷與子程序的比較中斷與子程序的比較 子程序是程序設(shè)計的一種常用方法,一般是把具有固定功能、在程序中無規(guī)律重復使用的程序段做成子程序,在需要的地方調(diào)用;中斷是計算機系統(tǒng)支持的一種重要功能,當發(fā)生中斷時,系統(tǒng)執(zhí)行一段特定的程序。根據(jù)中斷源的不同,需要把中斷分為軟件中斷與硬件中斷分別看待,
42、軟件中斷、硬件中斷與子程序之間有一些共同之處: (1)都需要相應程序段的支持。發(fā)生子程序調(diào)用時,系統(tǒng)轉(zhuǎn)去執(zhí)行一段子程序,并在執(zhí)行完后返回調(diào)用處繼續(xù)執(zhí)行;發(fā)生中斷時,系統(tǒng)也是轉(zhuǎn)去執(zhí)行一段中斷服務程序,執(zhí)行完后返回中斷點繼續(xù)執(zhí)行。被調(diào)用的程序段一定要在內(nèi)存中。 (2)軟件中斷與子程序都由特定指令調(diào)用。軟件中斷由指令I(lǐng)NT n調(diào)用,子程序調(diào)用指令是“CALL 子程序名”。不論是中斷還是子程序調(diào)用,都會使系統(tǒng)修改CS和IP從而實現(xiàn)轉(zhuǎn)向。 (3)發(fā)生調(diào)用時,系統(tǒng)自動記載返回地址。不論是中斷還是子程序調(diào)用,系統(tǒng)在轉(zhuǎn)入子程序/中斷服務程序之前,都會把返回地址(IP或者是CS和IP)入棧保存。調(diào)用完成后,正是
43、根據(jù)棧中保存的值,才能返回到正確的位置。 (4)軟件中斷和子程序都可以帶有入口參數(shù)和出口參數(shù)。由于軟件中斷和子程序都是具有固定功能的服務性程序段,都是按固定模式進行數(shù)據(jù)處理,通常,在調(diào)用前需要知道被處理的數(shù)據(jù)是什么或在什么地方,即入口參數(shù),調(diào)用后又需要把數(shù)據(jù)處理的結(jié)果通知調(diào)用者,即出口參數(shù)。 (5)可以用子程序調(diào)用代替軟件中斷的調(diào)用指令。INT指令與FAR類型子程序調(diào)用的CALL指令之間的主要差別在于是否把標志寄存器入棧,因此,只要能夠先把標志寄存器入棧保存,再用CALL指令同樣可以進行軟件中斷服務子程序的調(diào)用。比如,下面的方法完全可以代替INT 21H指令: MOVBX,0MOVDS,BX;
44、中斷向量表的段地址MOVBX,84H;21H號中斷向量在中斷向量表中的偏移地址PUSHFCALLFAR PTR BX;以子程序調(diào)用的CALL指令去調(diào)用21H號中斷服務子程序 特別的是,這種用法很不合常規(guī),并且上述程序段中的最后一條指令在MASM 5.0下會出現(xiàn)語法錯誤。解決這個問題的方法是,編程人員手工地把這條指令翻譯成機器碼(查閱有關(guān)資料,或者經(jīng)調(diào)試軟件DEBUG的處理可以知道,該指令的機器碼由兩字節(jié)組成,分別是0FFH和01FH),然后直接把機器碼置入源程序中,即把上面的CALL指令用下面的一行代替:DB0FFH,01FH 軟件中斷、硬件中斷與子程序三者之間也存在著本質(zhì)的差別,主要體現(xiàn)在:
45、 (1)調(diào)用方式不同。軟件中斷由INT指令調(diào)用,子程序用CALL指令調(diào)用,而硬件中斷是由硬件提出申請,不需要任何指令。 (2)系統(tǒng)保護的值不同。中斷調(diào)用時,系統(tǒng)會把標志寄存器、CS和IP入棧保存,而子程序調(diào)用時,系統(tǒng)只入棧保存IP或者CS和IP。 (3)返回方式不同。中斷返回指令是IRET,而子程序返回指令是RET,并且子程序還有NEAR和FAR兩種類型。 (4)共享方式不同。硬件中斷的服務程序不能被其它程序共享,而是直接由系統(tǒng)掌握,軟件中斷的服務程序可以被任何程序以INT指令的形式調(diào)用,并且調(diào)用者不必關(guān)心中斷服務程序到底在內(nèi)存的哪一個地方,也不需要把中斷服務程序與調(diào)用它的程序拼裝到一起。子程
46、序的共享方式比較豐富,但有一點,就是被調(diào)用的子程序必須與調(diào)者拼裝在一起,形成最終的執(zhí)行文件。 (5)在內(nèi)存中存在的時間不同。中斷服務程序通常是長期保留在內(nèi)存中,而子程序是隨可執(zhí)行文件一起進入內(nèi)存,當可執(zhí)行文件執(zhí)行完后,子程序所占用的內(nèi)存也隨之釋放。*8.4.6 編寫中斷服務程序編寫中斷服務程序 中斷服務程序一般是長期保留在內(nèi)存中的,在用戶程序結(jié)束后還能夠被其它應用程序調(diào)用,或者是CPU在響應硬件中斷時調(diào)用。因此,編寫一個中斷服務子程序還需要掌握以下技術(shù):如何讓一段程序常駐內(nèi)存,如何修改中斷向量使其指向新的中斷服務程序。8.4.6.1 常駐內(nèi)存技術(shù)常駐內(nèi)存技術(shù) 內(nèi)存是由操作系統(tǒng)管理的,DOS專門
47、為駐留程序設(shè)計了一個功能調(diào)用。 【駐留方法】在AH中放31H,在DX中放需要駐留的程序的節(jié)長度,然后以INT 21H指令調(diào)用DOS的結(jié)束并駐留子功能。 【說明】【說明】 (1)駐留前要告訴DOS,駐留程序的長度是多少。方法是把駐留長度放在DX 中,長度單位是“節(jié)”而不是字節(jié),1節(jié)等于16個字節(jié)。如果需要駐留的程序長度是n 字節(jié),則DX的值可通過下面的計算式算得:DX(n 10H)110H其中(n 10H)1是計算出駐留程序需要多少“節(jié)”,加1是為了預防駐留程序以字節(jié)計算的長度不是16的整數(shù)倍。再加16節(jié)是因為每個程序在調(diào)入內(nèi)存時,操作系統(tǒng)都為它安排了一個稱為“程序段前綴(PSP)”的專用內(nèi)存區(qū)
48、,并且放在程序的前面,這個程序段前綴的長度是256字節(jié),剛好16節(jié),它必須與需要駐留的程序一起駐留在內(nèi)存。 如果一個應用程序中編寫了一段程序需要常駐內(nèi)存,總是把這段程序?qū)懺诖a段的最前面,如果數(shù)據(jù)段也需要駐留,則應該數(shù)據(jù)段在前,代碼段在后。計算駐留長度時,應該把數(shù)據(jù)段的長度加上代碼段中駐留部分的長度一起計算。比如,一個應用程序由代碼段、數(shù)據(jù)段、堆棧段構(gòu)成,數(shù)據(jù)段的各個變量總共占據(jù)200個字節(jié),代碼段中需要駐留的部分有500個字節(jié),則段的編排次序應該是數(shù)據(jù)段、代碼段、堆棧段, 因為堆棧段是不需要駐留的,駐留節(jié)長度是: 數(shù)據(jù)段:200B16113節(jié) 代碼段:500B16132節(jié) PSP: 16節(jié)
49、總計: 66節(jié)因此,調(diào)用DOS的31H號子功能進行程序駐留前,必須把DX置為66,即42H。8.4.6.2 修改中斷向量的技術(shù)修改中斷向量的技術(shù) 由于中斷向量共有4個字節(jié),8088指令系統(tǒng)中最多只能一次送16位的字型數(shù)據(jù)到內(nèi)存,所以修改中斷向量至少要用兩條指令才能完成。在修改中斷向量時還必須保證一點,就是不能允許在修改過程中(只修改了其中的1個字時)產(chǎn)生相應號的中斷請求,因為這時中斷向量還是一種不完整的狀態(tài)。即使產(chǎn)生了相應的中斷請求也必須能屏蔽掉,保證修改的連續(xù)性和中斷向量的完整性。比較好的方法是利用 DOS提供的一個子功能進行修改。 DOS提供的設(shè)置中斷向量的方法是先設(shè)定如下入口參數(shù):AH2
50、5HAL中斷號DS:DX新的中斷服務程序的入口地址然后用“INT 21H”指令調(diào)用DOS的25H號服務程序。 8.4.6.3 中斷編程實例中斷編程實例 8088系統(tǒng)中有一個定時器,它每隔約0.05秒向CPU發(fā)出一次8號中斷請求,這是一個硬中斷,不受程序的控制。8號中斷服務程序中有一條調(diào)用1CH號中斷的指令,而1CH號中斷是一個可供用戶使用的中斷,它只由8號中斷調(diào)用,與硬中斷有類似的效果。下面就利用1CH號中斷,編寫一個時鐘程序。 【例8.4】編寫一個時鐘程序,要求把時鐘信號顯示在屏幕的右上角,并在程序結(jié)束后常駐內(nèi)存。 【分析】由于系統(tǒng)每隔0.05秒就產(chǎn)生一次1CH號中斷,因此在1CH號中斷服務
51、程序中應該有一個0到20的計數(shù)器,初值為20。每次中斷調(diào)用該服務程序時,就把計數(shù)器的值減1,當計數(shù)器的值沒減到0時,說明還沒有中斷20次,即不足1秒鐘,因而不需要更新鐘的讀數(shù)。當計數(shù)值到0后,就需要讓時鐘向前走1秒,把秒數(shù)加1,若滿 60秒則向分鐘數(shù)進1,分鐘數(shù)滿60后再向小時數(shù)進1,小時數(shù)滿24就清0,并且要把已走了1秒的鐘的當前讀數(shù)顯示在屏幕上。另外,為了計數(shù)下一秒,還要把0到20的計數(shù)器重新置初值20。處理完這些工作后,中斷結(jié)束并返回。 主程序需要完成以下工作:把1CH號中斷向量改為新的中斷服務程序的入口地址,讓新的中斷服務程序常駐內(nèi)存。 【解】 code SEGMENT ASSUME
52、CS:code,DS:code;功能:中斷服務子程序,以中斷的形式調(diào)用;入口、出口參數(shù):無clock PROC FAR DEC CS:x ;計數(shù)器減1 JZ c2 ;滿1秒轉(zhuǎn) JMP cend ;不足1秒,直接轉(zhuǎn)中斷結(jié)束 c2: PUSH DS PUSH ES PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI ;保護現(xiàn)場 PUSH CS POP DS MOV x,20 ;對0到20的計數(shù)器重新賦初值 INC s ;秒數(shù)加1 CMP s,60 JB c1 ;不滿60秒轉(zhuǎn) MOV s,0 ;計滿60秒后,秒數(shù)清0 INC m ;分鐘數(shù)加1 CMP m,60 JB c1 ;不滿60分鐘轉(zhuǎn) MOV m,0 ;計滿60分鐘后,分鐘數(shù)清0 INC h ;小時數(shù)加1 CMP h,24 JB c1 ;不滿24小時轉(zhuǎn) MOV h,0 ;計滿24小時后,小時數(shù)清0 c1: MOV AL,s MOV AH,0 MOV DL,10 DIV DL OR AX,
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 排長述職報告
- 工程移交協(xié)議書(5篇)
- 2025年教案編寫:如何讓學生理解火災的危害與滅火的方法
- 廉潔自律-從我做起
- 豬肉知識培訓課件
- 2025年中考第一次模擬考試地理(青海卷)(全解全析)
- 國際商務談判與合同簽訂作業(yè)指導書
- 學校后勤承包經(jīng)營合同
- 產(chǎn)品品質(zhì)檢測協(xié)議
- 2025年湘潭年貨運從業(yè)資格證考試答案
- 單位就業(yè)人員登記表
- 計算機教室(微機室)學生上機使用記錄
- 學與教的心理學第6版(師范專業(yè)心理學)PPT完整全套教學課件
- 單位下鄉(xiāng)租車方案
- 化工制圖第一章制圖的基本知識課件
- 《植物學》練習(二)根、莖、葉營養(yǎng)器官的聯(lián)系及變態(tài)
- 鼎和財險附加意外傷害醫(yī)療保險A款(互聯(lián)網(wǎng)專屬)條款
- 中暑-紅十字應急救護培訓課件
- 聯(lián)儲共備實施方案
- 光伏工程 危害辨識風險評價表(光伏)
- 高壓電動機試驗報告模板
評論
0/150
提交評論