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

下載本文檔

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

文檔簡介

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

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

6.1.2輸入輸出的尋址方式一、統(tǒng)一編址(存儲(chǔ)器對應(yīng)輸入輸出方式)內(nèi)存和外設(shè)端口進(jìn)行統(tǒng)一編址,只有一個(gè)統(tǒng)一的地址空間。通常不用設(shè)置專門的輸入和輸出指令。訪問外設(shè)就好像在訪問主存一樣(地址唯一)。二、獨(dú)立編址(端口尋址的輸入輸出方式)SPCE061A片內(nèi)存儲(chǔ)器映射RAM、ROM統(tǒng)一編址。2Kword的SRAM。片內(nèi)32KWordFlashROM。6.1.2輸入輸出的尋址方式一、統(tǒng)一編址(存儲(chǔ)器對應(yīng)輸入輸出方式)二、獨(dú)立編址(端口尋址的輸入輸出方式)建立兩個(gè)地址空間,一個(gè)為內(nèi)存地址空間,一個(gè)為外設(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í),可用立即數(shù)的形式,當(dāng)I/O地址>0~255時(shí),必須使用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í),可用立即數(shù)的形式,當(dāng)I/O地址>0~255時(shí),必須使用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)特點(diǎn)一、CPU與I/O設(shè)備之間的接口信息1、數(shù)據(jù)信息(1)數(shù)字量:以二進(jìn)制形式表示的數(shù)或以ASCII碼表示的數(shù)或字符(2)模擬量:聲音信號(hào)(3)開關(guān)量:只有兩個(gè)狀態(tài)(1和0)的量,用一位二進(jìn)制數(shù)即可表示。2、狀態(tài)信息反映了當(dāng)前外設(shè)的工作狀態(tài),是外設(shè)通過接口往CPU傳送的。對于輸入設(shè)備來說,通常用準(zhǔn)備好(READY)信號(hào)來表明輸入的數(shù)據(jù)是否準(zhǔn)備就緒;對于輸出設(shè)備來說,通常用忙(BUSY)信號(hào)表示輸出設(shè)備是否處于空閑狀態(tài)。3、控制信息CPU通過接口傳送給外設(shè)的,CPU通過發(fā)送控制信息控制外設(shè)的工作。二、接口的結(jié)構(gòu)和識(shí)別1、端口:每個(gè)接口都有一組寄存器,稱這些寄存器為I/O端口(PORT),每一個(gè)端口都有一個(gè)端口地址。2、端口的類型:數(shù)據(jù)端口:對來自CPU和內(nèi)存的數(shù)據(jù)或送往CPU和內(nèi)存的數(shù)據(jù)起緩沖作用。狀態(tài)端口:存放外部設(shè)備或接口部件本身的狀態(tài)??刂贫丝冢捍娣臗PU發(fā)出的命令,以便控制接口和設(shè)備的動(dòng)作。

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

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

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

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

無條件傳送2

查詢傳送3

中斷傳送4

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

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

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

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

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

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

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

NMI

中斷控制器8259CPU

系統(tǒng)定時(shí)器INTR

鍵盤

圖形接口

保留

串行接口

保留

軟盤

打印機(jī)

中斷邏輯INTn指令I(lǐng)NTO指令除法錯(cuò)誤單步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除法錯(cuò)INTOINTn中斷類型優(yōu)先級內(nèi)部中斷

高NMI↓INTR↓單步中斷

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

8086/8088系統(tǒng)的中斷優(yōu)先級別是這樣確定的,其由高到低的順序?yàn)椋撼ㄥe(cuò)、INTn、INTO→NMI→INTR→單步級連電路連接方法6.2.3中斷矢量(向量)表

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

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

類型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中斷類型號(hào)及中斷名稱表 中斷類型號(hào)名稱中斷類型號(hào)名稱0除法錯(cuò)0EH軟盤中斷1單步中斷0FH打印機(jī)中斷2NMI10H顯示器驅(qū)動(dòng)程序3斷點(diǎn)中斷11H設(shè)備測試程序4溢出中斷12H內(nèi)存容量判斷5屏幕打印13H軟盤驅(qū)動(dòng)程序6~7(保留)14H通訊驅(qū)動(dòng)程序8時(shí)鐘中斷15H盒式帶驅(qū)動(dòng)程序9鍵盤中斷16H鍵盤驅(qū)動(dòng)程序0AH彩色圖象接口17H打印機(jī)驅(qū)動(dòng)程序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)是中斷類型號(hào),隱含的類型號(hào)為3*INT指令還把IF和TF置0,但不影響其它標(biāo)志位*IRET指令執(zhí)行完,標(biāo)志位由堆棧中取出的值確定6.2.5中斷過程:一、中斷發(fā)生時(shí),硬件自動(dòng)完成的動(dòng)作如下:(1)

取中斷類型號(hào)n;(2)

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

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

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

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

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

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

及時(shí)開中斷。(3)

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

完成中斷處理。(5)

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

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

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

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

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

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

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

……

25H號(hào)DOS功能調(diào)用:入口參數(shù):(AH)=25H;(AL)=中斷類型號(hào);(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號(hào)DOS功能調(diào)用:入口參數(shù):(AH)=35H;(AL)=中斷類型號(hào);出口參數(shù):(ES)=讀取的中斷向量的段地址。(BX)=讀取的中斷向量的偏移地址。功能:讀取指定中斷的中斷向量

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

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

MOV WORDPTROLDVECTOR,BX … …例:利用DOS保留的空中斷類型號(hào)45H作為新增加的軟中斷類型號(hào),其功能是將AX中的十六位無符號(hào)二進(jìn)制數(shù)以四位十六進(jìn)制形式在顯示器輸出,其參數(shù)如下: 入口參數(shù):AX中是待顯示的無符號(hào)二進(jìn)制數(shù)。 出口參數(shù):對應(yīng)的十六進(jìn)制數(shù)已在顯示器輸出。45H軟中斷處理程序名:INTR45;設(shè)置和調(diào)用45H號(hào)軟中斷的程序: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] ;準(zhǔn)備入口條件

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;保護(hù)現(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ū)動(dòng)程序和許多常用的例行程序,它們一般以中斷程序的形式存在。程序員不必知道外部設(shè)備的物理特性和邏輯結(jié)構(gòu)細(xì)節(jié)(端口地址、命令及狀態(tài)格式等),也可以控制各種輸入輸出操作。如:INT 10H為顯示器驅(qū)動(dòng);INT 17H為打印機(jī)驅(qū)動(dòng)等。BIOS程序直接建立在硬件基礎(chǔ)上,DOS則建立在BIOS基礎(chǔ)上。6.4 BIOS中斷調(diào)用

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

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

(一)、顯示器I/O中斷調(diào)用(中斷類型號(hào):10H)BIOS中顯示驅(qū)動(dòng)的中斷類型號(hào)為10H,有16種子功能。軟中斷指令“INT 10H”實(shí)現(xiàn)其功能調(diào)用。1、設(shè)置顯示方式(功能號(hào)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的標(biāo)準(zhǔn)顯示器接口板有兩種:單色顯示器和并行打印機(jī)接口板,能顯示黑白字母、數(shù)字及方塊圖形字符,即以文本方式工作;彩色、圖形監(jiān)視器接口板,可以以黑白或彩色文本方式或圖形方式工作。2、設(shè)置光標(biāo)大?。üδ芴?hào)1)入口參數(shù):(AH)=1(CH) =光標(biāo)頂值(0~11)(CL)=光標(biāo)底值(1~12)

出口參數(shù):無

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

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

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

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

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

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

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

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

(BL)=屬性值

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

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

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

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

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

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

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

(CX)=列號(hào)

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

(BH)=當(dāng)前頁號(hào)

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

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

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

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

INT10H

MOVCX,1 ;準(zhǔn)備寫字符條件

MOVDX,0REP0: MOVAH,2 ;光標(biāo)定位

INT10H MOVAL,6 ;寫字符

MOVAH,10 INT10H CALLDELAY ;延時(shí)

MOVAL,0 ;抹掉已寫的字符

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

JNEREP0

MOVAH,4CH INT21HDELAYPROC ;延時(shí)子程序

PUSHCX PUSHDX MOVDX,500 ;外循環(huán)計(jì)數(shù)DL500:MOVCX,4096*2 ;內(nèi)循環(huán)計(jì)數(shù)DL10MS:LOOPDL10MS DECDXJNZDL500 POPDXPOPCX RETDELAYENDPCODE1ENDS ENDSTART注意:由于CPU的工作頻率不同,延時(shí)計(jì)數(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 ;延時(shí)

MOVAL,0 ;抹掉已寫的字符

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

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

棕RGB顏色000黑001藍(lán)010綠011青100紅101品紅111白表3背景顏色組合IRGB顏色I(xiàn)RGB顏色0000黑1000灰0001藍(lán)1001淺藍(lán)0010綠1010淺綠0011青1011淺青0100紅1100淺紅0101品紅1101淺品紅0110棕1110黃0111白1111強(qiáng)度白表4前景顏色組BLIRGB顏色BLIRGB顏色00000黑81000灰10001藍(lán)91001淺藍(lán)20010綠101010淺綠30011青111011淺青藍(lán)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 ;光標(biāo)位置

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

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

;起始坐標(biāo)位置dh=行號(hào),dl=列號(hào)

mov

bl,0e4h

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

mov

al,0

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

mov

cx,25*80

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

mov

ah,9

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

int

10h

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

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

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

確定算法(4)

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

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

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

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

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

MOVBH,0 MOVBL,0EHINT10HMOVAH,11 ;選擇彩色組0MOVBH,1MOVBL,0INT10HMOVDX,0 ;準(zhǔn)備子程序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)用(中斷類型號(hào):16H)BIOS中鍵盤I/O的中斷類型號(hào)為16H,有3種子功能。軟中斷指令“INT 16H”實(shí)現(xiàn)其功能調(diào)用。1.讀字符(功能號(hào)0)入口參數(shù):(AH)=0出口參數(shù):(AL)=鍵入字符的ASCII碼

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

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

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

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

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

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

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

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

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

句柄00000001000200030004設(shè)備名標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸出錯(cuò)誤輸出異步通信打印機(jī)6.5 磁盤文件管理程序設(shè)計(jì)

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

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

普通文件01HR

只讀文件02HH

隱含文件04HS

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

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

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

錯(cuò)誤碼

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

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

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

CF=1:(AX)=錯(cuò)誤碼

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

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

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

01H 只寫方式

02H 讀寫方式

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

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

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

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

除非不夠讀。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(CX)=文件屬性

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

[(AL)=0]

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

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

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

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

三、 磁盤文件管理程序設(shè)計(jì)舉例例1.在E盤上建立文件FILE1,假定文件屬性為0(普通文件),文件的信息從鍵盤輸入,文件結(jié)束標(biāo)志為^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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論