第6章輸入輸出和中斷_第1頁
第6章輸入輸出和中斷_第2頁
第6章輸入輸出和中斷_第3頁
第6章輸入輸出和中斷_第4頁
第6章輸入輸出和中斷_第5頁
已閱讀5頁,還剩123頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章輸入和輸出和中斷本章重點:本章主要講述輸入輸出的概念、輸入輸出方式、中斷的概念、中斷類型、向量表、優(yōu)先級、處理過程、中斷程序設(shè)計以及BIOS/DOS中斷調(diào)用。6.1 輸入/輸出(I/O)指令

和數(shù)據(jù)的傳送方式本節(jié)重點:本節(jié)重點介紹接口電路的概念和作用,接口的類型,輸入輸出的尋址方式,CPU與外設(shè)數(shù)據(jù)傳送的方式知識回顧:主機為什么要和輸入輸出設(shè)備通信,他們之間的關(guān)系如何?主機硬件系統(tǒng)——輸入/輸出接口簡寫為I/O接口,是CPU與外部設(shè)備間的橋梁CPU外設(shè)I/O接口微型計算機的概念結(jié)構(gòu)存儲器I/O接口輸入設(shè)備I/O接口地址總線AB輸出設(shè)備CPU數(shù)據(jù)總線DB控制總線CBI/O接口6.1.1接口電路的概念與作用一、外設(shè)為什么一定要通過接口電路和主機總線相連?1、高速CPU與低速外設(shè)間的速度矛盾;2、主機數(shù)字信號與外設(shè)模擬信號的矛盾;3、CPU與外設(shè)間并行/串行信號形式的矛盾。6.1.1接口電路的概念與作用一、外設(shè)為什么一定要通過接口電路和主機總線相連?1、高速CPU與低速外設(shè)間的速度矛盾;2、主機數(shù)字信號與外設(shè)模擬信號的矛盾;3、CPU與外設(shè)間并行/串行信號形式的矛盾。6.1.1接口電路的概念與作用二、為什么存儲器不用接口卻可以直接與CPU連接?1、功能單一:保存信息;2、傳送方式單一:一次傳送1個字節(jié)或1個字;3、品種有限:只讀和讀/寫;4、存取速度與CPU工作速度基本匹配。6.1.2輸入輸出的尋址方式眾多的外部設(shè)備如何識別?我們教學(xué)樓的教室是如何區(qū)分的?編址

6.1.2輸入輸出的尋址方式一、統(tǒng)一編址(存儲器對應(yīng)輸入輸出方式)內(nèi)存和外設(shè)端口進行統(tǒng)一編址,只有一個統(tǒng)一的地址空間。通常不用設(shè)置專門的輸入和輸出指令。訪問外設(shè)就好像在訪問主存一樣(地址唯一)。二、獨立編址(端口尋址的輸入輸出方式)SPCE061A片內(nèi)存儲器映射RAM、ROM統(tǒng)一編址。2Kword的SRAM。片內(nèi)32KWordFlashROM。6.1.2輸入輸出的尋址方式一、統(tǒng)一編址(存儲器對應(yīng)輸入輸出方式)二、獨立編址(端口尋址的輸入輸出方式)建立兩個地址空間,一個為內(nèi)存地址空間,一個為外設(shè)地址空間。通過控制總線來確定CPU到底要訪問內(nèi)存空間還是訪問外設(shè)地址空間。因此需要專門的輸入輸出指令來訪問外部設(shè)備(地址沖突),8086外設(shè)尋址范圍(0000H~FFFFH)。三、輸入輸出指令I(lǐng)/O指令使用的寄存器:AL/AX、DX1.輸入指令I(lǐng)N格式:IN AL,PORT ;(PORT)ALIN AL,DX ;[(DX)]ALIN AX,PORT ;(PORT)AXIN AX,DX ;[(DX)]AX其中PORT、DX指明I/O地址。當(dāng)I/O地址為0~255時,可用立即數(shù)的形式,當(dāng)I/O地址>0~255時,必須使用DX寄存器存放I/O地址。2.輸出指令OUT格式:OUT PORT,AL ;(AL)PORTOUT DX,AL ;(AL)[DX]OUT PORT,AX ;(AX)PORTOUT DX,AX ;(AX)[DX]其中PORT、DX指明I/O地址。當(dāng)I/O地址為0~255時,可用立即數(shù)的形式,當(dāng)I/O地址>0~255時,必須使用DX寄存器存放I/O地址。

示例:(1)IN AL,40H ;(40H)AL(2)OUT 80H,AL ;(AL)80H(3)MOV DX,378H ;端口地址378HIN AL,DX ;([DX])AL

6.1.3接口的信息類型和結(jié)構(gòu)特點一、CPU與I/O設(shè)備之間的接口信息1、數(shù)據(jù)信息(1)數(shù)字量:以二進制形式表示的數(shù)或以ASCII碼表示的數(shù)或字符(2)模擬量:聲音信號(3)開關(guān)量:只有兩個狀態(tài)(1和0)的量,用一位二進制數(shù)即可表示。2、狀態(tài)信息反映了當(dāng)前外設(shè)的工作狀態(tài),是外設(shè)通過接口往CPU傳送的。對于輸入設(shè)備來說,通常用準備好(READY)信號來表明輸入的數(shù)據(jù)是否準備就緒;對于輸出設(shè)備來說,通常用忙(BUSY)信號表示輸出設(shè)備是否處于空閑狀態(tài)。3、控制信息CPU通過接口傳送給外設(shè)的,CPU通過發(fā)送控制信息控制外設(shè)的工作。二、接口的結(jié)構(gòu)和識別1、端口:每個接口都有一組寄存器,稱這些寄存器為I/O端口(PORT),每一個端口都有一個端口地址。2、端口的類型:數(shù)據(jù)端口:對來自CPU和內(nèi)存的數(shù)據(jù)或送往CPU和內(nèi)存的數(shù)據(jù)起緩沖作用。狀態(tài)端口:存放外部設(shè)備或接口部件本身的狀態(tài)。控制端口:存放CPU發(fā)出的命令,以便控制接口和設(shè)備的動作。

3、端口的識別:一個外設(shè)往往有幾個端口地址CPU尋址的是端口,而不是籠統(tǒng)的外設(shè),不管是輸入還是輸出,所用到的地址都是對端口而言的。任務(wù)分組討論:幼兒園老師要完成5個小朋友每人分3塊糖,并且全部吃完的一個任務(wù),請同學(xué)們討論一下,有幾種可行的方案?6.1.4CPU與外設(shè)之間傳送數(shù)據(jù)的方式幼兒園老師要完成5個小朋友每人分3塊糖,并且全部吃完的一個任務(wù),請同學(xué)們討論一下,有幾種可行的方案?方法1:

她先給孩子甲一塊糖,然后再給第二塊,又給第三塊。接著給孩子乙,其過程與孩子甲完全一樣。依次類推,直至到第5個孩子發(fā)完四塊糖。方法2:

她先給孩子甲一塊糖,盯著甲吃完,然后再給第二塊,等吃完第二塊又給第三塊。接著給孩子乙,其過程與孩子甲完全一樣。依次類推,直至到第5個孩子發(fā)完四塊糖??磥磉@種方法效率太低,重要之點還在于孩子們吃糖時她一直在守候,什么事也不能干。方法3:

每人發(fā)一塊糖各自去吃,并約定誰吃完后就向她舉手報告,再發(fā)第二塊。看來這種新方法提高了工作效率,而且在未接到孩子們吃完糖的報告以前,她還可以騰出時間給孩子們改作業(yè)。但是這種方法還可以改進。方法4:進行批處理:每人拿3塊糖各自去吃,吃完3塊糖后再向她報告。顯然這種方法工作效率大大提高,她可以騰出更多的時間改作業(yè)。方法5:權(quán)力下放,把發(fā)糖的事交給另一個人分管,只是必要時她才過問一下。6.1.4CPU與外設(shè)之間傳送數(shù)據(jù)的方式1

無條件傳送2

查詢傳送3

中斷傳送4

直接存儲器傳送(DMA)5 通道方式 6 外圍處理機方式(PPU)1、無條件傳送方式(同步方式)1.無條件傳送方式(同步方式)如果計算機能夠確信一個外設(shè)已經(jīng)準備就緒,那就不必查詢外設(shè)的狀態(tài)而可直接進行信息傳輸,這稱為無條件傳送方式。特點:適用于CPU與外設(shè)速度同步的情況,結(jié)構(gòu)簡單,可靠性要求不高的設(shè)備,一般較少使用三態(tài)緩沖器地址譯碼器數(shù)據(jù)總線地址總線數(shù)據(jù)來自外設(shè)IO/MRD無條件傳送的輸入方式要求CPU在執(zhí)行輸入指令時,外設(shè)的數(shù)據(jù)是準備好的,即已經(jīng)存放在三態(tài)緩沖器中,否則出錯。dataaddress1101011要求CPU在執(zhí)行輸出指令時,確信所選中的輸出鎖存器是空的。鎖存器地址譯碼器數(shù)據(jù)總線地址總線數(shù)據(jù)到外設(shè)IO/MWR無條件傳送的輸出方式address11data01101返回你吃完了嗎?還沒有吃完啦吃完啦吃完啦吃完啦吃完啦2.查詢傳送方式2.查詢傳送方式查詢方式:CPU通過執(zhí)行程序不斷地讀取并測試外設(shè)的狀態(tài),如果外設(shè)處于準備好狀態(tài)(輸入設(shè)備)或空閑狀態(tài)(輸出設(shè)備),則CPU執(zhí)行輸入指令或輸出指令。特點:CPU與外設(shè)速度不同步的情況。CPU在傳送數(shù)據(jù)之前要查詢外設(shè)的相關(guān)狀態(tài)。當(dāng)外設(shè)滿足傳送條件時,就傳送數(shù)據(jù),否則,繼續(xù)查詢狀態(tài),等待滿足條件,此時CPU要占用很多時間去查詢外設(shè)的狀態(tài)。(1)、查詢式輸入輸入狀態(tài)信息READY?輸入數(shù)據(jù)NY輸入設(shè)備鎖存器三態(tài)緩沖器緩沖器地址譯碼器數(shù)據(jù)去數(shù)據(jù)總線+5VIO/MRDIO/MRDREADY地址總線DRQ選通狀態(tài)信息數(shù)據(jù)查詢式輸入的接口電路接口電路中除了有傳送數(shù)據(jù)的端口外,還有傳送狀態(tài)的端口。adressdata10111101110100111110(2)、查詢式輸出讀狀態(tài)端口BUSY?輸出數(shù)據(jù)準備輸出數(shù)據(jù)YN輸出設(shè)備鎖存器三態(tài)緩沖器地址譯碼器去數(shù)據(jù)總線+5VIO/MWD地址總線DR數(shù)據(jù)IO/MRD狀態(tài)信息“BUSY”Q數(shù)據(jù)總線ACK選通信號“BUSY”查詢輸出接口電路返回3.中斷傳送方式3.中斷傳送方式中斷的概念:當(dāng)輸入設(shè)備將數(shù)據(jù)準備好或者輸出設(shè)備可以接收數(shù)據(jù)時,向CPU發(fā)出中斷請求,使CPU暫時停下目前的工作而和外設(shè)進行一次數(shù)據(jù)傳輸。等輸入操作或輸出操作完成以后,CPU繼續(xù)進行原來的工作。特點:中斷傳送方式彌補了查詢方式中CPU要占用很多時間去查詢狀態(tài)的不足,實現(xiàn)了CPU與外設(shè)的同步操作。CPU進行I/O操作之后,就去執(zhí)行其他程序;外設(shè)完成操作,向CPU發(fā)出中斷請求,使CPU進入中斷處理程序,接收外設(shè)傳送的數(shù)據(jù)或啟動下一次I/O操作。處理完本次中斷后,CPU繼續(xù)執(zhí)行進入中斷前的程序。顯然,CPU與外設(shè)是并行工作的,在這種方式下,CPU的工作效率很高,并可使多臺外設(shè)與CPU并行工作。:::::::

現(xiàn)行程序:::::::

A::B:::中斷服務(wù)程序入口地址3、中斷傳送方式隨機產(chǎn)生的中斷申請堆棧輸入設(shè)備鎖存器三態(tài)緩沖器數(shù)據(jù)去數(shù)據(jù)總線+5VIO/MRDDRQ選通數(shù)據(jù)裝置中斷允許三態(tài)緩沖器中斷矢量去數(shù)據(jù)總線INTA(中斷響應(yīng)信號)地址譯碼器地址總線INTR中斷傳送方式的接口電路返回4、直接存儲器傳送方式4.直接存儲器傳送方式(DMA:DirectMemoryAccess

)問題:無條件方式、查詢方式和中斷方式下,都是通過CPU執(zhí)行指令來實現(xiàn)主機和外設(shè)的傳輸,每一條指令要有取指和執(zhí)行時間,通常傳送一個字節(jié)需要幾十到幾百微秒,這對于高速的I/O設(shè)備來講,顯得速度太慢了。解決辦法:在DMA方式下,外部設(shè)備利用專用的接口電路直接和存儲器進行高速的數(shù)據(jù)傳送,而并不經(jīng)過CPU。4.直接存儲器傳送(DMA)方式特點:DMA方式適用于高速I/O設(shè)備。通過DMA硬件控制,直接在外設(shè)與存儲器之間交換數(shù)據(jù)。在DMA方式下,CPU讓出總線控制權(quán),使外設(shè)與存儲器在很短的時間內(nèi)成批交換數(shù)據(jù)。當(dāng)數(shù)據(jù)交換完成后,CPU收回總線控制權(quán)。DMA實現(xiàn)方法:在利用DMA方式進行數(shù)據(jù)傳送時,要利用系統(tǒng)的數(shù)據(jù)總線、地址總線和控制總線。在用DMA方式進行數(shù)據(jù)傳輸時,接口電路要向CPU發(fā)出請求,使CPU讓出總線,把總線控制權(quán)交給DMA傳輸?shù)慕涌陔娐罚―MA控制器)。數(shù)據(jù)端口狀態(tài)/控制端口地址寄存器計數(shù)器狀態(tài)/控制寄存器DMA控制器CPU存儲器數(shù)據(jù)緩寄存器DMA請求觸發(fā)器輸入設(shè)備READYDMA請求DMA響應(yīng)HOLDHLDA4、直接存儲器傳送(DMA)方式data1data1111data2+1-1(一)DMA操作的基本方法2、周期挪用:把CPU不訪問存儲器的那些周期“挪用”來進行DMA操作。3、周期擴展:CUP與DMA交替訪問存儲器。即輪流使用總線,不需要總線的申請、建立和釋放過程。1、CPU停機方式:最常用也是最簡單的一種DMA方式。(二)DMA控制器的基本功能1、能接收外設(shè)的請求,向CPU發(fā)出DMA請求信號。2、當(dāng)CPU發(fā)出DMA響應(yīng)信號后,接管對總線的控制,進入DMA方式。3、能輸出地址信息和修改地址信息。4、能向存儲器和外設(shè)發(fā)出相應(yīng)的讀/寫信號。5、能控制傳送的字節(jié)數(shù),判斷DMA傳送是否結(jié)束。6、在DMA傳送結(jié)束時,能結(jié)束DMA請求信號,釋放總線,把總線控制權(quán)還給CPU。(三)DMA傳送方式1、單字節(jié)方式:每次DMA請求只傳送一個字節(jié)數(shù)據(jù),每傳送完一個字節(jié),都撤除DMA請求信號釋放總線。2、字節(jié)傳方式:每次DMA請求連續(xù)傳送一個數(shù)據(jù)塊,待規(guī)定長度的數(shù)據(jù)塊傳送完后才撤除DMA請求信號釋放總線。返回吃完了嗎?正吃著呢吃完了5.通道方式及外圍處理機方式5.通道方式DMA的不足之處:計算機中連接著許多輸入輸出設(shè)備,其中包括字設(shè)備和塊設(shè)備。為每一個設(shè)備都配置一個專用的DMA控制器是不經(jīng)濟的。而且多個DMA的并行工作還會使存儲器的訪問發(fā)生沖突。因而必須在多個設(shè)備之間共享DMA控制器,這樣就形成了輸入輸出通道的概念。通道是一個具有輸入輸出處理器控制的輸入輸出部件。通道控制器有自己的指令,即通道命令,能夠根據(jù)程序控制多個外部設(shè)備并提供了DMA共享的功能,而DMA只能進行固定的數(shù)據(jù)傳輸操作。大大提高了CPU的工作效率。然而這種提高CPU效率的辦法是以花費更多硬件為代價的5.通道方式(channel)CPU與通道并行工作,由通道實現(xiàn)在存儲器與外設(shè)間數(shù)據(jù)轉(zhuǎn)換與傳送。I/O通道是一種特殊的處理機,它具有執(zhí)行I/O指令的能力,并通過執(zhí)行通道(I/O)程序來控制I/O操作。通道只能執(zhí)行與I/O操作有關(guān)的指令,其指令類型單一;通道沒有自己的內(nèi)存,即通道與CPU共享內(nèi)存。在大、中型和高檔小型計算機系統(tǒng)中,大多采用通道技術(shù)通道方式6.外圍處理機(PPU)式概念:PPU方式是通道方式的進一步發(fā)展。由于PPU基本上獨立于主機工作,它的結(jié)構(gòu)更接近一般處理機,甚至就是微小型計算機。在一些系統(tǒng)中,設(shè)置了多臺PPU,分別承擔(dān)I/O控制、通信、維護診斷等任務(wù)。特點:從某種意義上說,這種系統(tǒng)已變成分布式的多機系統(tǒng)。華為softX3000采用了PPU技術(shù)返回?zé)o條件傳輸方式6.2中斷本節(jié)重點:中斷中涉及到的基本概念進行介紹,包括中斷的分類,中斷向量表的作用,中斷是如何處理的和各中斷的優(yōu)先級等。6.2中斷6.2.1 中斷的有關(guān)概念因某個事件的發(fā)生,使CPU暫時中止現(xiàn)行程序的執(zhí)行,自動轉(zhuǎn)去執(zhí)行處理該事件的子程序;處理結(jié)束后,又自動返回到被中斷程序的斷點處繼續(xù)執(zhí)行后續(xù)指令,這個過程稱為中斷。

現(xiàn)行程序:::::::

A::B:::::::中斷服務(wù)程序隨機產(chǎn)生的申請?zhí)幚斫Y(jié)束,返回斷點入口地址6.2.2 IBM-PC的中斷源及其優(yōu)先級1、中斷源引起中斷的事件稱為中斷源。中斷源可能來自外設(shè)的輸入輸出請求,也可能是計算機的一些異常故障或其他內(nèi)部原因。8086中斷分類: 不可屏蔽中斷NMI

外部中斷 可屏蔽中斷INTR中斷源 除法錯 內(nèi)部中斷 溢出中斷 軟中斷 單步中斷 IR0IR1IR2IR3

NMI

中斷控制器8259CPU

系統(tǒng)定時器INTR

鍵盤

圖形接口

保留

串行接口

保留

軟盤

打印機

中斷邏輯INTn指令I(lǐng)NTO指令除法錯誤單步TF=1IR0IR1IR2IR3IR4IR5IR6IR72、中斷源示意圖1.48086CPU的外部引腳特性

GNDINTRNMICLKGND19INTA(QS1)TESTREADYRESET23914033843753663573483393210311130122913281427152616251724182319222021AD14AD11AD10AD9AD8AD7AD6AD5AD4AD3AD2AD1AD0RDMN/MXHOLD(RQ/GT0)BHE/S6AA17/S4A18/S5/SA16/S3AD15)VCC(+5VM/IO(S2)WR(LOCK)HLDA(RQ/GT1)DT/R(

S1)DEN(S0)ALE(QS0)AD1213AD8086CPU引腳圖IR0IR1IR2IR3IR4IR5IR6IR7除法錯INTOINTn中斷類型優(yōu)先級內(nèi)部中斷

高NMI↓INTR↓單步中斷

低6.2.2中斷優(yōu)先級

8086/8088系統(tǒng)的中斷優(yōu)先級別是這樣確定的,其由高到低的順序為:除法錯、INTn、INTO→NMI→INTR→單步級連電路連接方法6.2.3中斷矢量(向量)表

每個中斷源都對應(yīng)一個中斷處理程序,每個中斷處理程序的起始地址稱為中斷入口地址。系統(tǒng)將各個中斷處理程序的入口地址放在一起形成一個地址表,稱為中斷矢量(向量)表?,F(xiàn)行程序:::::::

A::B:::::::中斷服務(wù)程序隨機產(chǎn)生的申請?zhí)幚斫Y(jié)束,返回斷點入口地址中斷指令:

類型0的(IP)

類型0的(CS)

類型1的(IP)

類型1的(CS)

類型N的(IP)

類型N的(CS)

類型255的(IP)

類型255的(CS)00000000044*N003FC中斷向量表中斷向量:中斷例行程序的入口地址,存放于中斷向量區(qū)。

00000H003FFHA0000HC0000HF0000H640K(RAM)128K(RAM)192K(ROM)64K(ROM)8086中斷類型號及中斷名稱表 中斷類型號名稱中斷類型號名稱0除法錯0EH軟盤中斷1單步中斷0FH打印機中斷2NMI10H顯示器驅(qū)動程序3斷點中斷11H設(shè)備測試程序4溢出中斷12H內(nèi)存容量判斷5屏幕打印13H軟盤驅(qū)動程序6~7(保留)14H通訊驅(qū)動程序8時鐘中斷15H盒式帶驅(qū)動程序9鍵盤中斷16H鍵盤驅(qū)動程序0AH彩色圖象接口17H打印機驅(qū)動程序0BH同步通訊中斷

0CH異步通訊中斷

0DH硬盤中斷21HDOS中斷中斷指令:INTTYPE或INT執(zhí)行操作:(SP)←(SP)-2((SP)+1,(SP))←(FLAGS)(SP)←(SP)-2((SP)+1,(SP))←(CS)(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←(TYPE*4)(CS)←(TYPE*4+2)溢出中斷指令:INTO執(zhí)行操作:若OF=1,

(IP)←(10H)(CS)←(12H)6.2.4軟中斷及有關(guān)中斷指令從中斷返回指令:IRET執(zhí)行操作:(IP)←((SP)+1,(SP))(SP)←(SP)+2(CS)←((SP)+1,(SP))(SP)←(SP)+2(FLAGS)←((SP)+1,(SP))(SP)←(SP)+2

注意:*TYPE(0~255)是中斷類型號,隱含的類型號為3*INT指令還把IF和TF置0,但不影響其它標志位*IRET指令執(zhí)行完,標志位由堆棧中取出的值確定6.2.5中斷過程:一、中斷發(fā)生時,硬件自動完成的動作如下:(1)

取中斷類型號n;(2)

標志寄存器(PSW)內(nèi)容壓棧;(3)

當(dāng)前代碼段寄存器(CS)的內(nèi)容壓棧;(4)

當(dāng)前指令指針(IP)內(nèi)容壓棧;(5)

禁止外部中斷和單步中斷(置IF=0,TF=0);(6)

從中斷向量表中取4Xn地址的內(nèi)容送IP,取4Xn+2地址的內(nèi)容送CS;(7)

轉(zhuǎn)中斷處理程序。保存PSW,是為了中斷返回時,保證被中斷程序工作的連續(xù)性和正確性。禁止外部中斷和單步中斷,是為了使CPU在處理當(dāng)前中斷時,不再響應(yīng)響應(yīng)其他的中斷。如果允許CPU響應(yīng)別的中斷,可用STI指令將IF置1。二、中斷程序的編寫利用中斷向量表中保留的中斷類型號,可以編寫自己的中斷處理程序。1.外部(硬)中斷處理程序根據(jù)外中斷隨機發(fā)生的特點,外中斷處理程序設(shè)計的主要步驟:(1)

保護現(xiàn)場。(2)

盡快完成中斷處理,以免影響其他的中斷請求。(3)

恢復(fù)現(xiàn)場。(4)

中斷返回,用IRET指令返回。2.內(nèi)部(軟)中斷處理程序軟中斷雖是不可屏蔽的,但不會隨機發(fā)生,只在CPU執(zhí)行INTn指令后,才會發(fā)生。與子程序相似,但并不等同于子程序。軟中斷處理程序設(shè)計的主要步驟:(1)

考慮切換堆棧,軟中斷處理的情況可能較復(fù)雜,會占用大量的堆??臻g。(2)

及時開中斷。(3)

保護現(xiàn)場。(4)

完成中斷處理。(5)

恢復(fù)現(xiàn)場。(6)

切換堆棧,如果在開始時切換了堆棧,就切換回來。(7)

中斷返回。關(guān)中斷開中斷關(guān)中斷開中斷保存斷點、現(xiàn)場判斷中斷條件,

轉(zhuǎn)入中斷服務(wù)程序執(zhí)行中斷服務(wù)程序恢復(fù)中斷,現(xiàn)場執(zhí)行原有程序外部設(shè)備發(fā)出

中斷申請IF=1YN不響應(yīng)自動自動1.設(shè)置和獲取中斷向量(1)

設(shè)置中斷向量設(shè)置中斷向量的兩種方法:直接寫入法和DOS調(diào)用直接寫入法舉例:

… …MOV AX,0MOV DS,AX ;定位物理地址0:0MOV BX,n*4 ;設(shè)置n號中斷向量CLI ;關(guān)中斷MOV WORD PTR[BX],OFFSETINTHANDMOV WORD PTR[BX+2],SEGINTHANDSTI ;開中斷

……

25H號DOS功能調(diào)用:入口參數(shù):(AH)=25H;(AL)=中斷類型號;(DS:DX)=中斷向量功能:將指定的中斷向量寫入中斷向量表DOS調(diào)用法舉例:INTHAND:

… … MOV AX,SEGINTHAND MOV DS,AX MOV DX,OFFSET INTHAND MOV AH,25H MOV AL,n INT 21H … …(1)

獲取中斷向量獲取中斷向量的兩種方法:直接讀取法和DOS調(diào)用法直接讀取法舉例:

… …MOV AX,0MOV ES,AX ;物理地址定位MOV AX,ES:[n*4] ;取IPMOV WORDPTROLDVECTOR,AX;保存原向量MOV AX,ES:[n*4+2];取CSMOV WORDPTROLDVECTOR+2,AX ……35H號DOS功能調(diào)用:入口參數(shù):(AH)=35H;(AL)=中斷類型號;出口參數(shù):(ES)=讀取的中斷向量的段地址。(BX)=讀取的中斷向量的偏移地址。功能:讀取指定中斷的中斷向量

DOS調(diào)用法舉例:

… … MOV AH,35H MOV AL,n INT 21H MOV WORDPTROLDVECTOR+2,ES;保存原向量

MOV WORDPTROLDVECTOR,BX … …例:利用DOS保留的空中斷類型號45H作為新增加的軟中斷類型號,其功能是將AX中的十六位無符號二進制數(shù)以四位十六進制形式在顯示器輸出,其參數(shù)如下: 入口參數(shù):AX中是待顯示的無符號二進制數(shù)。 出口參數(shù):對應(yīng)的十六進制數(shù)已在顯示器輸出。45H軟中斷處理程序名:INTR45;設(shè)置和調(diào)用45H號軟中斷的程序:T-INT45;主程序如下:NAME T-INT45STACK SEGMENT STACKDB 200DUP(0) STACK ENDSDATA SEGMENTDATBUF DW 1234H,5678H,9ABCH,0EFFFH DW 8000H,0,0AH,0DH,0FHN=($-DATBUF)/2DATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKEXTRN INTR45:FARBEGIN: MOV AX,SEGINTR45 MOV DS,AX MOV DX,OFFSET INTR45;設(shè)置中斷向量

MOV AX,2545H INT 21H MOV AX,DATA MOV DS,AX ;設(shè)置當(dāng)前數(shù)據(jù)段

LEA SI,DATBUF MOV CX,NLOPA: MOV AX,[SI] ;準備入口條件

INT 45H MOV AH,2 MOV DL,‘’ INT 21H ADD SI,2 LOOP LOPA MOV AH,4CH INT 21HCODE ENDS END BEGIN

;45H軟中斷處理處理程序

NAME INTR45STACK SEGMENT STACK DB 200DUP(0)STACK ENDSDATA SEGMENTTAB DB ‘0123456789ABCDEF’BUF DB 4DUP(0),‘H$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKPUBLIC INTR45INTR45 PROC FAR PUSH BX PUSH CX;保護現(xiàn)場

PUSH SI PUSH DS MOV BX,DATA MOV DS,BX LEA SI,BUF LEA BX,TAB MOV CH,4 MOV CL,4LOPA: ROL AX,CL PUSH AX AND AX,0FH XLAT MOV [SI],AL INC SI POP AX DEC CH JNE LOPA MOV AH,9 LEA DX,BUF INT 21H POP DS POP SI;恢復(fù)現(xiàn)場

POP CX POP BX IRET ;中斷返回INTR45 ENDPCODE ENDS END

;執(zhí)行結(jié)果:1234H5678H9ABCHEFFFH8000H0000H000AH000DH000FH6.4 BIOS中斷調(diào)用一、BIOS概述BIOS(BasicInput/OutputSystem)是固化在ROM中的程序,包含主要的I/O設(shè)備的驅(qū)動程序和許多常用的例行程序,它們一般以中斷程序的形式存在。程序員不必知道外部設(shè)備的物理特性和邏輯結(jié)構(gòu)細節(jié)(端口地址、命令及狀態(tài)格式等),也可以控制各種輸入輸出操作。如:INT 10H為顯示器驅(qū)動;INT 17H為打印機驅(qū)動等。BIOS程序直接建立在硬件基礎(chǔ)上,DOS則建立在BIOS基礎(chǔ)上。6.4 BIOS中斷調(diào)用

DOS/WINDOWSBIOSHARDWARE二、BIOS中斷的特點通常應(yīng)用程序可以調(diào)用DOS提供的系統(tǒng)調(diào)用,完成輸入/輸出操作或其他操作,而不必過多的考慮外設(shè)的具體的物理特性和邏輯結(jié)構(gòu)細節(jié)(既少考慮硬件),實現(xiàn)起來相對容易。與DOS的功能調(diào)用相比,BIOS調(diào)用能完成更復(fù)雜的輸入/輸出操作,其效率高的優(yōu)點和編程相對復(fù)雜的缺點都顯而易見。在下列情況下,可以考慮使用BIOS中斷:(1)有些功能DOS沒有提供。(2)在有些無法使用DOS功能調(diào)用的場合。(3)其他原因。

注意:BIOS中斷調(diào)用不保護AX寄存器,如果主程序使用了AX寄存器,在進行BIOS調(diào)用的前后要對AX寄存器進行保護和恢復(fù)。三、常用的BIOS中斷調(diào)用BIOS中斷調(diào)用方法:設(shè)置入口參數(shù);使用中斷指令I(lǐng)NTn,其中n為中斷類型號。當(dāng)某一BIOS程序具有多個功能時,AH中存放子功能號。

(一)、顯示器I/O中斷調(diào)用(中斷類型號:10H)BIOS中顯示驅(qū)動的中斷類型號為10H,有16種子功能。軟中斷指令“INT 10H”實現(xiàn)其功能調(diào)用。1、設(shè)置顯示方式(功能號0)入口參數(shù):(AH)=0,(AL)=模式(0~7) (AL)=0, 40X25B/W文本方式

=1, 40X25COLOR文本方式

=2, 80X25B/W文本方式

=3, 80X25COLOR文本方式

=4, 320X200B/W圖形方式

=5, 320X200COLOR圖形方式

=6, 640X200B/W圖形方式

=7, 80X25B/W文本方式(單顯板)出口參數(shù):無

IBM-PC的標準顯示器接口板有兩種:單色顯示器和并行打印機接口板,能顯示黑白字母、數(shù)字及方塊圖形字符,即以文本方式工作;彩色、圖形監(jiān)視器接口板,可以以黑白或彩色文本方式或圖形方式工作。2、設(shè)置光標大小(功能號1)入口參數(shù):(AH)=1(CH) =光標頂值(0~11)(CL)=光標底值(1~12)

出口參數(shù):無

3、設(shè)置光標位置(功能號2)入口參數(shù):(AH)=2(BH) =頁號(0)(DH)=行號(DL)=列號 出口參數(shù):無 4、屏幕上滾(功能號6)入口參數(shù):(AH)=6 (AL) =上滾行數(shù)

(CX)=上滾部分左上角的行、列號

(DX)=上滾部分右下角的行、列號

(BH)=顯示屬性出口參數(shù):無5、屏幕下滾(功能號7)入口參數(shù):(AH)=7 (AL) =下滾行數(shù)

(CX)=下滾部分左上角的行、列號

(DX)=下滾部分右下角的行、列號

(BH)=顯示屬性出口參數(shù):無

6、在當(dāng)前光標位置寫字符和屬性(功能號9)入口參數(shù):(AH)=9 (AL) =要寫的ASCII碼字符

(BL)=屬性值

(CX)=重復(fù)次數(shù)

(BH)=頁號出口參數(shù):無7、在當(dāng)前光標位置寫字符(屬性不變)(功能號0AH)入口參數(shù):(AH)=OAH (AL) =要寫的ASCII碼字符

(CX)=重復(fù)次數(shù)

(BH)=頁號 8、設(shè)置彩色組或背景顏色(功能號0BH)入口參數(shù):(AH)=OBH (BH)=0–設(shè)置背景色;1–設(shè)置彩色組

(BL)=背景色(0~15);彩色組(0~1)

其中:彩色組0:綠/紅/黃;彩色組1:青/品紅/白

9、寫點(功能號0CH)入口參數(shù):(AH)=0CH (AL) =彩色值(若AL的位7為1,則新的彩色值與當(dāng)前 彩色值作按位加運算)

(CX)=列號

(DX)=行號出口參數(shù):無 10、讀當(dāng)前顯示狀態(tài)(功能號0FH)入口參數(shù):(AH)=0FH出口參數(shù):(AL) =當(dāng)前顯示方式

(BH)=當(dāng)前頁號

(AH)=屏幕上的字符列數(shù)

例1:編寫一程序,讓“黑桃”字符在(0,0),(24,24)的斜線上移動。STACKSEGMENTSTACK

DB200DUP(?)STACKENDSCODE1SEGMENT ASSUMECS:CODE1,SS:STACKSTART:MOVAH,0 ;設(shè)置80X25B/W文本模式

MOVAL,2 INT10H MOVAH,15 ;讀當(dāng)前顯示狀態(tài)

INT10H

MOVCX,1 ;準備寫字符條件

MOVDX,0REP0: MOVAH,2 ;光標定位

INT10H MOVAL,6 ;寫字符

MOVAH,10 INT10H CALLDELAY ;延時

MOVAL,0 ;抹掉已寫的字符

MOVAH,10INT10H INCDH INCDL CMPDH,25 ;行號不等于25,則繼續(xù)。

JNEREP0

MOVAH,4CH INT21HDELAYPROC ;延時子程序

PUSHCX PUSHDX MOVDX,500 ;外循環(huán)計數(shù)DL500:MOVCX,4096*2 ;內(nèi)循環(huán)計數(shù)DL10MS:LOOPDL10MS DECDXJNZDL500 POPDXPOPCX RETDELAYENDPCODE1ENDS ENDSTART注意:由于CPU的工作頻率不同,延時計數(shù)應(yīng)根據(jù)需要適當(dāng)調(diào)整。

反跳回去JMPBACK: DEC DH INC DL MOVAL,6 MOVAH,10 INT10H CALLDELAY MOVAL,0 MOVAH,10 INT10H CMP DH,0 JNE JMPBACK………………

JMPBACK: DEC DH INC DL MOVAL,6 ;寫字符

MOVAH,10 INT10H CALLDELAY ;延時

MOVAL,0 ;抹掉已寫的字符

MOVAH,10 INT10H CMP DH,0 JNE JMPBACK例2:以藍色為背景,在10行20~40列顯示20個“梅花”符,梅花的顏色分別為紅、綠、黃、黑。 屬性字節(jié)

閃爍背景色前景色位76543210屬性BLRGBIRGB表1黑白方式顯示屬性字節(jié)表2彩色文本方式顯示屬性字節(jié)位號76543210屬性字節(jié)BLRGBIRGB閃爍選擇背景顏色前景顏色110

棕RGB顏色000黑001藍010綠011青100紅101品紅111白表3背景顏色組合IRGB顏色IRGB顏色0000黑1000灰0001藍1001淺藍0010綠1010淺綠0011青1011淺青0100紅1100淺紅0101品紅1101淺品紅0110棕1110黃0111白1111強度白表4前景顏色組BLIRGB顏色BLIRGB顏色00000黑81000灰10001藍91001淺藍20010綠101010淺綠30011青111011淺青藍40100紅121100淺紅50101品紅131101淺品紅60110棕141110黃70111亮灰151111白表5背景顏色組合表表6彩色分組STACKSEGMENTSTACK DB200DUP(?)STACKENDSDATASEGMENTDATDB14H,12H,1EH,10HDATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA MOVDS,AX MOVAH,0 ;設(shè)置80X25COLOR文本模式

MOVAL,3 INT10H LEASI,DAT ;取屬性表首址

MOVDI,4 MOVDX,0A13H ;光標位置

MOVAH,15 INT10H ;取顯示頁號LOPA:MOVAH,2 ADDDL,5 INCDL INT10H ;光標定位 MOVAL,5 MOVBL,[SI] MOVCX,5 MOVAH,9 ;按屬性字連續(xù)顯示5個梅花符

INT10H INCSI DECDI JNZLOPA ;顯示下一組字符

MOVAH,4CH INT21HCODEENDS ENDSTARTSTART:

mov

ax,datas

mov

ds,ax

mov

ah,0

mov

al,3

int

10h

mov

dh,0

mov

dl,0

;起始坐標位置dh=行號,dl=列號

mov

bl,0e4h

;BL為顏色效果,前景色=1110棕色,背景色=0100紅色

mov

al,0

;AL=要輸出字符的ASCII碼。此時ASCII碼=0時,表示該字符看不見;ASCII碼=‘A’時,表示該字符為在屏幕上輸出A字符。

mov

cx,25*80

;CL=每個字符顯示的次數(shù),25*80=2000個,正好整個屏幕

mov

ah,9

;9號子功能:輸出字符,且屬性改變。BL為顯示的顏色;CL為顯示次數(shù);AL為顯示的字符的ASCII碼;DX為顯示的坐標位置

int

10h

;調(diào)用中斷號為10H的中斷,該中斷為顯示中斷例3:圖形顯示程序編寫圖形顯示程序的主要步驟:(1)

選擇顯示器的圖形工作模式(2)

確定顯示區(qū)域(3)

確定算法(4)

編程實現(xiàn)通常在圖形方式下,要用的主要功能:

0號功能–設(shè)置工作方式

11號功能–設(shè)置彩色組或背景顏色

12號功能–寫點STACKSEGMENTSTACK DB200DUP(?)STACKENDSCODESEGMENT ASSUMECS:CODE,SS:STACKSTART:MOVAH,0 ;設(shè)置320X200COLOR圖形模式

MOVAL,5INT10HMOVAH,11 ;設(shè)置黃色背景

MOVBH,0 MOVBL,0EHINT10HMOVAH,11 ;選擇彩色組0MOVBH,1MOVBL,0INT10HMOVDX,0 ;準備子程序RED的入口條件

MOVCX,150CALLRED ;顯示一條垂直線

MOVDX,0MOVCX,170CALLRED MOVDX,10 LOPB:MOVCX,151LOPC:MOVAL,1;按指定顏色畫一橫線

MOVAH,12INT10HINCCXCMPCX,170JBLOPCADDDX,10CMPDX,200JBLOPBMOVAH,4CHINT21HREDPROCLOPA:MOVAH,12MOVAL,2;按指定顏色畫一垂直線

INT10HINCDXCMPDX,200JBELOPARETREDENDPCODEENDSENDSTART

(二)、鍵盤I/O中斷調(diào)用(中斷類型號:16H)BIOS中鍵盤I/O的中斷類型號為16H,有3種子功能。軟中斷指令“INT 16H”實現(xiàn)其功能調(diào)用。1.讀字符(功能號0)入口參數(shù):(AH)=0出口參數(shù):(AL)=鍵入字符的ASCII碼

2.讀字符并置ZF標志(功能號1)入口參數(shù):(AH)=1出口參數(shù):(AL)=鍵入字符的ASCII碼,若按過任一鍵(即鍵盤緩沖區(qū)不空),ZF=0,否則,ZF=1。

3.讀特殊功能鍵的狀態(tài)(功能號2)入口參數(shù):(AH)=2出口參數(shù):(AL)=特殊功能鍵的狀態(tài)

(三)、打印機I/O中斷調(diào)用(中斷類型號:17H)BIOS打印機I/O的中斷類型號為17H,有3種子功能。軟中斷指令“INT 17H”實現(xiàn)其功能調(diào)用。1.打印字符(功能號0)入口參數(shù):(AH)=0,(DX)=打印機號,(AL)=打印字符的ASCII出口參數(shù):無

2.初始化打印機(功能號1)入口參數(shù):(AH)=1,(DX)=打印機號,(AL)=初始化命令碼出口參數(shù):無

3.讀打印機狀態(tài)(功能號2)入口參數(shù):(AH)=2,(DX)=打印機號出口參數(shù):(AL)=打印機狀態(tài)6.5 磁盤文件管理程序設(shè)計

一、 概述DOS系統(tǒng)調(diào)用提供了兩種磁盤文件管理功能1、傳統(tǒng)文件管理方式2、擴充文件管理方式利用這些功能,用戶可以不必關(guān)心文件以何種形式存儲和磁盤I/O的具體細節(jié),一個簡單的調(diào)用就可很方便的實現(xiàn)對文件的操作。通常使用擴充磁盤文件管理方式(比傳統(tǒng)的文件管理用戶程序的接口簡單,讀寫操作方便,并且支持樹形目錄結(jié)構(gòu))。6.5 磁盤文件管理程序設(shè)計

二、 常用的擴充磁盤文件管理功能調(diào)用1、文件說明與文件代號擴充磁盤文件管理方式通過文件句柄實現(xiàn)對文件的操作,使用方法簡單靈活。當(dāng)建立或打開一個文件時,必須用一個ASCII-Z串(既一個以0結(jié)尾的ASCII碼串)對文件進行說明,這個串稱為路徑名。其格式如下:

[d:][path]filename[.ext]例如:PATHNM DB ‘D:\MASM\TEST1.ASM’,0

路徑名登錄系統(tǒng)后,DOS分配給文件一個16位二進制的控制字,稱為句柄,程序通過這個句柄就可以很方便的實現(xiàn)對文件進行操作。在DOS中,標準外設(shè)也作為文件并分配有標準句柄:

句柄00000001000200030004設(shè)備名標準輸入標準輸出錯誤輸出異步通信打印機6.5 磁盤文件管理程序設(shè)計

二、 常用的擴充磁盤文件管理功能調(diào)用文件代號/句柄/DOS分配給文件一個16位二進制的控制字6.5 磁盤文件管理程序設(shè)計

二、 常用的擴充磁盤文件管理功能調(diào)用2、文件特性(文件屬性)文件屬性用一個字節(jié)表示,常見的文件屬性描述如下:一個文件可以有多個屬性。例如,用DOS命令A(yù)TTRIB查看MSDOS.SYS文件的屬性,顯示結(jié)果為:SHR MSDOS.SYS /C:MSDOS.SYS屬性符號表示說明00H

普通文件01HR

只讀文件02HH

隱含文件04HS

系統(tǒng)文件6.5 磁盤文件管理程序設(shè)計

二、常用的擴充磁盤文件管理功能調(diào)用

3、錯誤返回碼擴充磁盤文件管理功能調(diào)用出口時,用標志位CF表示調(diào)用操作成功與否。CF=0,表示調(diào)用成功;CF=1,表示調(diào)用失敗,此時AX中存放有錯誤代碼,常見的錯誤代碼如下:

錯誤碼

錯誤原因1無效的功能號2文件未找到3路徑未找到4同時打開的文件太多5拒絕訪問6無效文件句柄6.5 磁盤文件管理程序設(shè)計

二、 常用的擴充磁盤文件管理功能調(diào)用4、常用的擴充磁盤文件管理系統(tǒng)功能調(diào)用(1)建立文件(功能號3CH)入口參數(shù):(AH)=3CH,DS:DX=路徑名字符串首址

(CX)=文件屬性出口參數(shù):CF=0:(AX)=文件句柄

CF=1:(AX)=錯誤碼

二、 常用的擴充磁盤文件管理功能調(diào)用4、常用的擴充磁盤文件管理系統(tǒng)功能調(diào)用(2)打開文件(功能號3DH)入口參數(shù):(AH)=3DH,DS:DX=路徑名字符串首址

(AL)=存取方式訪問碼出口參數(shù):CF=0:(AX)=文件句柄

CF=1:(AX)=錯誤碼說明: 存取方式訪問碼:00H 只讀方式

01H 只寫方式

02H 讀寫方式

6.5 磁盤文件管理程序設(shè)計6.5 磁盤文件管理程序設(shè)計

二、 常用的擴充磁盤文件管理功能調(diào)用4、常用的擴充磁盤文件管理系統(tǒng)功能調(diào)用(3)關(guān)閉文件(功能號3EH)入口參數(shù):(AH)=3EH,BX=文件句柄出口參數(shù):CF=0:操作成功CF=1:操作失敗6.5 磁盤文件管理程序設(shè)計

二、 常用的擴充磁盤文件管理功能調(diào)用4、常用的擴充磁盤文件管理系統(tǒng)功能調(diào)用(4)讀文件(功能號3FH)入口參數(shù):(AH)=3FH,(BX)=文件句柄,(CX)=要讀的字節(jié)數(shù)

DS:DX 指向存放數(shù)據(jù)的緩沖區(qū)出口參數(shù):CF=0:讀成功,(AX)=實際讀入的字節(jié)數(shù)。 CF=1:讀失敗,(AX)=錯誤碼說明:(1)通常情況下,實際讀入的字節(jié)數(shù)=要讀的字節(jié)數(shù)

除非不夠讀。

(2)緩沖區(qū)的大小應(yīng)保證容納要讀的數(shù)據(jù)

(3)文件以讀或讀寫方式打開

(4)讀文件后,文件指針將定位下一待讀字節(jié)處。

6.5 磁盤文件管理程序設(shè)計

二、 常用的擴充磁盤文件管理功能調(diào)用4、常用的擴充磁盤文件管理系統(tǒng)功能調(diào)用(5)寫文件(功能號40H)入口參數(shù):(AH)=40H,(BX)=文件句柄,(CX)=要寫的字節(jié)數(shù)

DS:DX 指向待寫數(shù)據(jù)的緩沖區(qū)出口參數(shù):CF=0:寫成功,(AX)=實際寫入的字節(jié)數(shù)。

CF=1:寫失敗,(AX)=錯誤碼說明:(1)通常情況下,實際寫入的字節(jié)數(shù)=要寫的字節(jié)數(shù) 除非磁盤滿。

(2)文件以寫或讀寫方式打開

(3)寫文件后,文件指針將定位下一待寫第一字節(jié)處。6.5 磁盤文件管理程序設(shè)計

二、 常用的擴充磁盤文件管理功能調(diào)用4、常用的擴充磁盤文件管理系統(tǒng)功能調(diào)用(6)

移動文件讀寫指針(功能號42H)入口參數(shù):(AH)=42H,(BX)=文件句柄,(AL)=移動方式

(CX:DX)=移動位移量(雙字)出口參數(shù):CF=0:成功,(DX:AX)=移動后的文件指針值。 CF=1:失敗,(AX)=錯誤碼說明:(1)文件指針(雙字)是以文件首字節(jié)為0計算的。

(2)移動方式及其意義如下:

00H 移動后文件指針值=0(文件頭)+位移量

01H 移動后文件指針值=當(dāng)前指針值+位移量

02H 移動后文件指針值=文件長度(文件尾)+位移量

(3)在第一種方式中,移動位移量總是正數(shù)。

(4)在后兩種方式中,移動位移量可正可負。該子功能不考慮文件指針是否超出范圍。

6.5 磁盤文件管理程序設(shè)計

二、 常用的擴充磁盤文件管理功能調(diào)用4、常用的擴充磁盤文件管理系統(tǒng)功能調(diào)用(7)置/取文件屬性(功能號43H)入口參數(shù):(AH)=43H, DS:DX=路徑名字符串首址

(AL)=操作模式;0:取文件屬性;1:置文件屬性

(CX)=文件屬性

[(AL)=1]出口參數(shù):(CX)=文件屬性

[(AL)=0]

二、 常用的擴充磁盤文件管理功能調(diào)用4、常用的擴充磁盤文件管理系統(tǒng)功能調(diào)用(8)

刪除文件(功能號41H)入口參數(shù):(AH)=41H,DS:DX=路徑名字符串首址出口參數(shù):CF=0:操作成功。

CF=1:操作失敗。說明:只能刪除普通文件。

6.5 磁盤文件管理程序設(shè)計6.5 磁盤文件管理程序設(shè)計

三、 磁盤文件管理程序設(shè)計舉例例1.在E盤上建立文件FILE1,假定文件屬性為0(普通文件),文件的信息從鍵盤輸入,文件結(jié)束標志為^Z(ASCII碼為1AH)。

建立文件AH=3CH接受文件信息寫文件AH=40H關(guān)閉文件AH=3EH

STACKSEGMENTSTACKDB200DUP(0)STACKENDSDATASEGMENTF_NUMDW?CERRORDB'CREATEERROR!',0AH,0DH,'$'WERRORDB'WRITEERROR!',0AH,0DH,'$'PLEASEDB'PLEASEINPUT:',0AH,0DH,'$'NOSPACEDB'NOSPACE!',0AH,0DH,'$'F_NAMEDB‘E:\FILE1',0BUFINDB32767DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVAH,3CH ;建立文件

MOVCX,0LEADX,F_NAMEINT21HJNCPAST1 LEADX,CERROR ;建立失敗

MOVAH,9INT21HJMPEXITPAST1:MOVF_NUM,AX ;文件句柄送F-NUMLEADX,PLEASE ;輸入提示

MOVAH,9INT21HLEADI,BUFININPUT:MOVAH,1INT21HMOV[DI],ALINCDICMPAL,1AH ;是否文件結(jié)束符^ZJEENDINCMPAL,0DH ;判回車,轉(zhuǎn)換成換行

JNEINPUTMOVDL,0AHMOV[DI],DLINCDIMOVAH,2 ;顯示輸出換行符

INT 21HJMPINPUTENDIN:MOVAH,40H ;寫文件

MOVBX,F_NUMLEADX,BUFINSUBDI,DXMOVCX,DIINT21HJCPWERRORCMPAX,CXJEPAST2LEADX,NOSPACE ;顯示磁盤空間不夠

MOVAH,9INT21HPAST2:MOVAH,3EH ;關(guān)閉文件

INT21HEXIT:MOVAH,4CHINT

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論