版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,第八章 輸入與輸出程序設(shè)計,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,第一節(jié):IO設(shè)備的數(shù)據(jù)傳送方式,輸入輸出設(shè)備都通過一個硬件接口或控制器和CPU相連。例如軟磁盤通過軟盤控制器和CPU連接起來;終端顯示器通過數(shù)據(jù)接口和CPU連接起來。這些接口和控制器都能支持輸入輸出IN、OUT與外部設(shè)備交換信息。這些信息包括控制、狀態(tài)和數(shù)據(jù)三種不同性質(zhì)的信息,它們必須按不同的端口地址分別傳送。,控制信息輸出到IO接口 : 告訴接口和設(shè)備要做什么工作,狀態(tài)信息 的讀?。罕硎綢/O設(shè)備當前的狀態(tài),數(shù)據(jù)信息的傳輸 :
2、是IO設(shè)備和CPU真正要交換的信息。,常用的輸入輸出方式 : 1、查詢輸入輸出; 2、中斷輸入輸出 ; 3、DMA方式,DMA方式:也稱為成組數(shù)據(jù)傳送方式。主要適用于些高速的IO設(shè)備,如磁帶、磁盤、模數(shù)轉(zhuǎn)換器等設(shè)備。DMA方式能使IO設(shè)備直接和存儲器進行成批數(shù)據(jù)的快速傳送。每個字節(jié)一到達端口,就直接從接口送到存儲器,同樣,接口和它的DMA控制器也能直接從存儲器取出字節(jié)并把它送到IO設(shè)備中去。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,第二節(jié):程序直接控制IO方式,IO端口的地址編碼:計算機的外部設(shè)備和大容量存儲設(shè)備都是通過接口連接到系統(tǒng)上,每個
3、端口由一組寄存器組成,這些寄存器都分配有一個地址編碼,該編碼稱為IO端口的地址編碼 。計算機的CPU和內(nèi)存就是通過這些端口和外部設(shè)備進行通訊的。,IO接口中有用作數(shù)據(jù)緩沖的數(shù)據(jù)寄存器,有用做保存設(shè)備和接口的狀態(tài)信息,供CPU對外設(shè)進行測試的狀態(tài)寄存器;還有用來保存CPU發(fā)出的命令以控制接口和設(shè)備的操作的命令寄存器。它們都分配有各自的端口號,CPU就是通過不同的端口號來選擇外部設(shè)備的,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,端口數(shù)量: 在IBM PC中, 1M空間的低16位地址線有效,因此這個I/O空間允許設(shè)置64K (65536) 個8位端口或32K(32768)個16位端口。,PC機的
4、部分端口地址(16進制),第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,一、 I/O指令,PC機的IO指令I(lǐng)N和OUT,這兩條指令既可以傳送字節(jié)也可以傳送字,并且都有直接端口尋址和間接端口尋址兩種方式。 如下所示:,直接端口尋址方式 :端口地址PORT是一個8位的立即數(shù),其范圍是0一255。,間接尋址方式 :端口地址在DX中,其范圍為0一65535 。,另外要注意的是,I/O指令中使用的寄存器必須是AL或AX。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,用IN指令可以從一個數(shù)據(jù)寄存器輸入數(shù)據(jù)或從狀態(tài)寄存器輸入接口和外沒的狀態(tài)。 例如 下面兩條指令能把一個字從端口地址0028和0029傳送到
5、存儲器的DATA_WORD單元中。,例 測試某狀態(tài)寄存器(端口地址為27H)的第2位是否為1,若為1,則轉(zhuǎn)移到ERROR進行處理。,OUT指令用來輸出數(shù)據(jù)或給一個指定的IO端口傳送命令信息。,例 某接口的命令寄存器(端口地址為126H)的第7位控制成組數(shù)據(jù)傳送 。,注意:DOS功能調(diào)用或BIOS例行程序,其例行程序本身也是用IN和OUT指令與外部設(shè)備進行數(shù)據(jù)交換的。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,二、 I/O直接數(shù)據(jù)傳輸舉例,例 SOUND程序 (發(fā)聲程序),基本原理: 程序通過IO指令使設(shè)備控制寄存器(IO端口地址為61H)的第1位交替為0和l,而端口6lH的第1位和揚聲器的
6、脈沖門相連,當?shù)?位由0變?yōu)?,延遲一會又由0變?yōu)?時,脈沖門就先打開后關(guān)閉,產(chǎn)生了一個脈沖電流。這個脈沖電流被放大后送到揚聲器使之發(fā)出了聲音。61H端口的第0位和一個振蕩器(2號定時器)相連,現(xiàn)在不用振蕩器產(chǎn)生聲音,所以把第0位置零。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,程序:,soundprogram segment assume cs:soundprogram main proc far start: mov bx, 0f350h mov dx, 2300h in al, 61h mov ah, al and al, 11111100b;關(guān)斷定時器通道2的門控 sound: x
7、or al, 2;觸發(fā)61H端口第1位 out 61h, al mov cx, dx;(dx)=控制脈寬的計數(shù)值 wait1: loop wait1;延時循環(huán) dec bx; (bx)=脈沖持續(xù)的時間 jnz sound mov al, ah out 61h, al;恢復61H端口 mov ax,4c00h int 21h main endp soundprogram ends end start,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,例 COMM程序,基本原理 這是一個關(guān)于INS8250串行通訊口IO的例子。它的數(shù)據(jù)寄存器的端口地址是03F8H ,狀態(tài)寄存器的端口地址是03FDH。其
8、中0位是輸入數(shù)據(jù)準備位,5位是輸出數(shù)據(jù)準備位。下列是串行口輸入輸出程序。,輸出子過程:,讀取子過程:,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,以上CPU與外部設(shè)備交換信息的方式稱為查詢方式或等待方式。 造成CPU必須查詢等待的主要原因是許多外設(shè)的工作速度比較低如磁盤、打印機等,它們通過按鍵或打印頭的機械動作輸入或輸出一個數(shù)據(jù),其速度是很慢的,而OUT執(zhí)行指令的速度是它的幾千倍乃至上萬倍,所以則在接收或發(fā)送數(shù)據(jù)之前必須要了解外設(shè)的狀態(tài),看外設(shè)是否已經(jīng)準備好。當外沒還沒有準備好以前,CPU就要等待,不能做別的操作。為了提高CPU的工作效率,我們可采用中斷方式傳送數(shù)據(jù)。關(guān)于中斷,我們將在下一節(jié)
9、中做詳細介紹。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,第三節(jié):中斷傳送方式,什么是中斷:中斷是一種使CPU中止正在執(zhí)行的程序而轉(zhuǎn)去處理特殊事件的操作。 什么是中斷源:引起中斷的事件 。 中斷的優(yōu)點:避免因反復查詢外部設(shè)備的狀態(tài)而浪費時問,從而提高了CPU的效率。,外中斷:由外設(shè)控制器或協(xié)處理器(8087/80287)引起的中斷一般稱為外中斷 。 內(nèi)中斷:中斷指令I(lǐng)NT產(chǎn)生的中斷,或由CPU的某些錯誤結(jié)果產(chǎn)生的中斷稱為內(nèi)中斷,80868088的中斷源如下圖所示 :,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,非屏蔽中斷:是為電源錯、內(nèi)存或I
10、O總線的奇偶錯等異常事件的中斷保留的。,外部設(shè)備的中斷是通過Inter 8259A可編程中斷控制器(PIC)連到主機上。CPU通過一組IO端口控制8259A,而8259A則通過INTR管腳給CPU傳送中斷信號。這種外中斷類型的分配由硬件連線實現(xiàn),中斷20H到3FH用于調(diào)用DOS功能例行程序,其它中斷號小于20H或大于3FH的中斷,用于調(diào)用IBM PC ROM BIOS或一些應(yīng)用軟件,一、 中斷向量表,我們給每種中斷都安排一個中斷類型號。IBM PC中斷系統(tǒng)能處理256種類型的中斷,類型號為00FFH。每種類型的中斷都由相應(yīng)的中斷處理程序來處理,中斷向量表就是各中斷類型的處理程序的地址表。如左圖
11、所示:,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,存儲器的低1.5K字節(jié),地址從0到5FFH為系統(tǒng)占用,其中最低1K字節(jié),地址從0到3FFH存放中斷向量。中斷向量表中的256項中斷向量對應(yīng)256種中斷類型,每項占用四個字節(jié),其中兩個字節(jié)存放中斷處理程序的段地址(16位),另兩個字節(jié)存放偏移地址(16位)。因為各處理程序的段地址和偏移地址在中斷向量表中按中斷類型號順序存放,所以每類中斷向量的地址可由中斷類型乘以4計算出來。例如,報警中斷的中斷類型為4AH,它的中斷向量地址為4AH4128H,即128H,129H兩字節(jié)存放的是報警中斷處理程序的偏移地址12AH,l2BH兩字節(jié)存放的是報警中斷處
12、理程序的段地址,取出段地址和偏移地址。CPU就可轉(zhuǎn)入中斷處理程序。,中斷操作的5個步驟 :,(1)取中斷類型號 (2)計算中斷向量地址 (3)取中斷向量,偏移地址送IP段地址送CS (4)轉(zhuǎn)入中斷處理程序 (5)中斷返回到INT指令的下一條指令,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,二、設(shè)量中斷向量,下表列出了IBM PC各類中斷的地址分配:,用戶可以利用保留的中斷類型號擴充自己需要的中斷功能,對新增加的中斷功能要在中斷向量表中建立相應(yīng)的中斷向量。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,指令來為中斷類型N設(shè)置中斷向量:,;要設(shè)置的中
13、斷子過程,;設(shè)置新中斷向量(地址),注意:如果新的中斷功能只供自己使用,或用自己編寫的中斷處理程序代替系統(tǒng)中的中斷處理功能時,要注意保存原中斷向量,在設(shè)置自己的中斷向量時,應(yīng)先保存原中斷向量再設(shè)置新的中斷向量,在程序結(jié)束之前恢復原中斷向量。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,在實際編程過程中,在檢查或設(shè)置任何中斷向量時,總是避免直接使用中斷向量的絕對地址,而是使用DOS功能調(diào)用(21H)存取中斷向量。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,三、中斷過程,當今斷發(fā)生時,由硬件自動完成下列動作: 1. 取中斷類型號N 2. 標志寄存器(PSW)內(nèi)容入棧 3. 當前代碼段寄存器(
14、cs)內(nèi)容入棧 4. 當前指令計數(shù)器(IP)內(nèi)容入棧 5. 禁止外部中斷和單步中斷(IF0,TF0) 6. 從中斷向量表中取4N的字節(jié)內(nèi)容送IP,取4N+2的字節(jié)內(nèi)容送CS。 轉(zhuǎn)中斷處理程序,中斷發(fā)生的過程很象我們所熟悉的子程序調(diào)用,不同的是在保護中斷現(xiàn)場時,除了保存返回地址CS:IP之外,還保存了標志寄存器PSW的內(nèi)容。因為標志寄存器記錄了中斷發(fā)生時,程序指令運行的結(jié)果特征。當CPU處理完中斷請求返回原程序時,要保證原程序工作的連續(xù)性和正確性。所以中斷發(fā)生時,PSW的內(nèi)容也要保存起來,另一個不同點是,在中斷發(fā)生時,CPU還自動清除了IF位和TF位,這樣設(shè)計的目的是使CPU轉(zhuǎn)入中斷處理程序后,
15、不允許再產(chǎn)生新的中斷,如果在執(zhí)行中斷處理程序的過程中,還允許外部的中斷,可以通過STI指令再把IF設(shè)置為1。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,編寫中斷處理程序和編寫子程序一樣,所使用的匯編語言指令沒有特殊限制,只是中斷處理程序返回時使用IRET指令。這條指令的工作步驟相中斷發(fā)生時的工作步驟正好相反。它首先把IP、CS和PWS的內(nèi)容出棧,然后返回到中斷發(fā)生時緊接著的下一條指令。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,四、內(nèi)部過程,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,五、外過程,外部中斷主要有兩種來源,一種是非屏蔽中斷(NMl),另一種是來自各種外部設(shè)備的中斷,由外
16、部設(shè)備的請求引起的中斷也稱為可屏蔽中斷。,但是從外設(shè)發(fā)出中斷請求到CPU響應(yīng)中斷,有兩個控制條件是起決定作用,一是該外設(shè)的中斷請求是否屏蔽,一個是CPU是否允許響應(yīng)中斷。這兩個條件分別由8259A的中斷屏蔽寄存器(IMR)和標志寄存器(PSW)中的中斷允許位IF控制。,中斷屏蔽寄存器的IO端口地址是21H,它的8位對應(yīng)控制8個外部設(shè)備,如左圖所示 :,通過設(shè)置這個寄存器的某位為0或為1來允許或禁止某外部設(shè)備的中斷。某位為0表示允許某種外設(shè)中斷請求,某位為1表示某種外設(shè)的中斷請求被屏蔽(禁止)。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,例如,只允許鍵盤中斷,可設(shè)置如下中斷屏蔽字:,如果系統(tǒng)
17、中要新增設(shè)鍵盤中斷,則可用下列指令實現(xiàn):,注意:在編寫中斷程序時,應(yīng)在主程序的初始化部分設(shè)置好中斷屏蔽寄存器,以確定允許用中斷方式工作的外部設(shè)備。外部設(shè)備向CPU發(fā)出中斷請求,CPU是否響應(yīng)還與標志寄存器中的中斷標志位IF有關(guān)。如果IF = 0,CPU就禁止響應(yīng)任何外設(shè)的中斷 。,如果IF1測允許CPU響應(yīng)外設(shè)的中斷請求,有兩條指令能設(shè)置或清除IF位。,允許CPU響應(yīng)外設(shè)的中斷請求(IF1)也叫做開中斷,反之叫做關(guān)中斷(1F0)。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,當任何類型的中斷發(fā)生時,當前的PSW要保存入棧,然后清除IF位進入中斷處理程序。如果允許在一個中斷處理程序的執(zhí)行過程中
18、發(fā)生外中斷,則必須用一條STI指令開中斷。當執(zhí)行到中斷返回指令I(lǐng)RET,又取出PSW先前的值,其中IF為1,CPU將允許外中斷再次發(fā)生。,有一種特殊的外部中斷和IF標志位無關(guān),這就是非屏蔽中斷,非屏蔽中斷的類型號為2,CPU不能禁止非屏蔽中斷,如果系統(tǒng)使用了這種類型的中斷,那么CPU總會響應(yīng)的,所以非屏蔽中斷主要用于一些緊急的故障處理,如電源掉電等。另外計算機內(nèi)部的實時鐘希望能不停地計時,所以也可以把非屏蔽中斷提供給實時鐘。 。,在一次外中斷處理結(jié)束之前,還應(yīng)給8259A可編程中斷控制器的中斷命令寄存器發(fā)出中斷結(jié)束命令(EOI)。中斷命令寄存器的IO端口地址為20H,如下圖所示。,它的各控制位
19、可動態(tài)地控制中斷處理過程,其中L2 - L0三位指定IR0IR7中具有最低優(yōu)先級的中斷請求。6位和7位控制IR 0一IR 7的中斷優(yōu)先級的順序。5位(EOI)是中斷結(jié)束位。當EOI位為1時當前正在處理的中斷請求就被清除,所以在中斷處理完成后,必須把中斷結(jié)束位置為1,否則以后將屏蔽掉對同級中斷或低級中斷的處理。當然在必要的時候,在中斷處理程序中也可利用EOI命令清除當前的中斷請求,使得在中斷處理的過程中又能響應(yīng)同級或低級中斷。結(jié)束外中斷用下面的指令:,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,六、中斷優(yōu)先級和中斷嵌套,中斷源事先安排一個中斷優(yōu)先級次序,當多個中斷源同時申請中斷時,CPU先比較
20、它們的優(yōu)先級,然后從優(yōu)先級高到低的次序來依次處理各個中斷源的中斷請求。,IBMPC規(guī)定中斷的優(yōu)先級次序為:,可屏蔽中斷的優(yōu)先權(quán)又分為八級,在正常的優(yōu)先級方式下,優(yōu)先級次序是,8259A的中斷命令寄存器的6位和7位能控制各中斷請求端的優(yōu)先級次序。在發(fā)出一個EOI命令時,7位(R)和6位(SL)有四種組合,其含義如下:,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,外中斷的優(yōu)先級次序一般在正常優(yōu)先級方式下(R0,SL0),但在必要的情況下,設(shè)置中斷命令寄存器能改變IR0IR7的優(yōu)先級次序。 例如,IR0IR7原為正常的優(yōu)先級次序,現(xiàn)在要使IR4成為最低級的中斷請求,則給端口21H送命令碼:1110
21、0100即Rl,SL1,EOI1L2L1L0100,這樣,各中斷優(yōu)先級就依次右循環(huán)到IR4為最低優(yōu)先級的位置上:,如果再送一個命令碼:10100000,則優(yōu)先級次序再向左循環(huán)一個位置,成為,正在運行的中斷處理程序,又被其它中斷源中斷,這種情況叫做中斷嵌套。IBMPC機沒有規(guī)定中斷嵌套的深度(中斷程序又被中斷的層次),但在實際使用時,多重的中斷嵌套要受到堆棧容量的限制,所以在編寫中斷程序時,一定要考慮有足夠的堆棧單元來保存多次中斷的斷點及各寄存器的內(nèi)容。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,注意: 一個正在執(zhí)行的中斷處理程序,在開中斷(IF1)的情況下,能被優(yōu)先級高于它的中斷源中斷,但
22、如果要被同級或低級的中斷源中斷,則必須發(fā)出EOI命令,清除正在執(zhí)行的中斷請求,才能響應(yīng)同級或低級的中斷。,假定在主程序的執(zhí)行過程中,IR2和IR4的中斷請求同時發(fā)生,而后IR1的中斷請求又到達,最后IR3的中斷請求也到達。 中斷執(zhí)行次序如下:,首先,CPU響應(yīng)優(yōu)先級高的IR2轉(zhuǎn)去執(zhí)行IR2的中斷處理程序。進入IR2處理程序后,IF被置為1。當IRl的中斷請求到達后,因IRl的優(yōu)先級高于IR2,CPU就立即中斷IR2的程序,轉(zhuǎn)去執(zhí)行IRl的處理程序。,在IR1處理程序中CPU指令發(fā)出了EOI命令,結(jié)束了IR1的中斷請求。返回IR2處理程序后,同樣由于發(fā)出EOI命令清除了IR2的中斷請求,所以在較
23、低級的中斷請求ER4到達后,即轉(zhuǎn)向處理IR4的中斷請求。在IR4處理程序的執(zhí)行過程中,IR3的中斷請求到達,當判斷IF已被置為1,則又中斷了IR4的程序,轉(zhuǎn)去執(zhí)行IR3的程序。在IR3程序中,也發(fā)出了開中斷指令(STI)和中斷結(jié)束命令(EOI),最后IRET指令使其返回到IR4程序,IR4在返回IR2之前也發(fā)出了EOI命令,結(jié)束了IR4的中斷請求。IR2中斷請求在前面已被清除,所以IR4執(zhí)行完后,IR2繼續(xù)執(zhí)行直到返回主程序。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,七、中斷處理程序,對于外部中斷過程,主程序為中斷所做的準備工作和硬件(包括CPU和外設(shè)接口)自動完成的動作 :,對一般指令
24、,只要一條指令的執(zhí)行周期結(jié)束即可響應(yīng)中斷。對以下指令特殊控制: 1、對加重復前綴的串指令(如REP MOVSB)要作為一條指令處理,但不是把串操作全部重復執(zhí)行完,而是執(zhí)行一次重復后,串指令即可響應(yīng)中斷。2、對于MOV指令和POP指令,如果處理對象為段寄存器時,那么本指令執(zhí)行完后,執(zhí)行完下一條執(zhí)行才能響應(yīng)中斷請求。3、對于開中斷指令STI和中斷返回指令,也要在這些指令執(zhí)行完后,再執(zhí)行一條指令才響應(yīng)中斷。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,中斷處理子程序的步驟 :,(1)保存寄存器內(nèi)容 (2)如允許中斷嵌套,則開中斷(STI) (3)處理中斷 (4)關(guān)中斷 (5)送中斷結(jié)束命令(EOI
25、)給中斷命令寄存器 (6)恢復寄存器內(nèi)容 (7)返回被中斷的程序(IRET),八、中斷處理程序舉例,例 編寫一個中斷處理程序,要求在主程序運行的過程中,每隔10秒鐘響鈴一次,同時在屏幕上顯示出信息“The bell is ring”,連續(xù)響5次退出。,原理:在系統(tǒng)定時器(中斷類型為8)的中斷處理程序中,有一條中斷指令I(lǐng)NT 1CH,時鐘中斷每發(fā)生一次(約每秒中斷l(xiāng)82次),都要調(diào)用一次中斷類型1CH的處理程序。在ROM BIOS中,1CH的處理程序只有一條IRET指令,實際上它并沒有做任何工作,只是為用戶提供了一個中斷類型號。如果用戶有某種定時周期性的工作需要完成,就可利用系統(tǒng)定時器的中斷間隔
26、,用自己設(shè)計的處理程序來代替原有的1C程序。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,程序:,dseg segment count dw 5 ;控制連續(xù)響鈴5次 mess db the bell is ring,0dh,0ah,$ ;在屏幕上顯示的字符串 dseg ends cseg segment assume cs:cseg , ds:dseg main proc far start: mov ax , dseg mov ds , ax mov al , 1ch ;保存1Ch原中斷向量進入堆棧中 mov ah , 35h int 21h push es push bx push ds
27、;把響鈴過程設(shè)置為1Ch中斷向量 mov dx,offset ring mov ax,seg ring mov ds,ax mov al,1ch mov ah,25h int 21h pop ds,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,in al ,21h ;允許定時器中斷 and al , 11111110b out 21h , al sti ;允許CPU響應(yīng)中斷 mov di , 20000 ;主過程的時間延遲,以便在該時間延遲內(nèi)進行定時中斷處理 delay1: mov si , 30000 delay2: dec si jnz delay2 cmp di, 0 jz exit d
28、ec di jnz delay1 pop dx;恢復原來的中斷向量 pop ds mov al ,1ch mov ah ,25h int 21h mov ax , 4c00h int 21h main endp,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,ring proc near push ds;保存寄存器內(nèi)容 push ax push cx push dx mov ax , dseg mov ds, ax sti;允許CPU響應(yīng)中斷 cmp count , 0 jz exit dec count mov dx , offset mess;顯示字符串信息,字符串必須以$結(jié)束 mov ah
29、 ,09h int 21h mov dx , 100;發(fā)聲控制 in al ,61h and al ,11111100b sound: xor al , 02h out 61h , al,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,mov cx ,1400 wait1: loop wait1 dec dx jnz sound exit: cli pop dx pop cx pop ax pop ds iret ring endp cseg ends end start,IBM PC系列計算機的鍵盤是一個智能鍵盤,鍵盤內(nèi)有一片Intel 8048(或8049)單片機(處理器),負責對整個鍵盤上
30、的字符鍵、功能鍵、控制鍵和組合鍵進行管理。,鍵盤I/O,敲鍵,鍵盤中斷響應(yīng)流程,利用DOS功能調(diào)用 BIOS中斷調(diào)用,當在鍵盤上“按下”或“放開”一個鍵時,如果這時允許鍵盤發(fā)出中斷請求并且IF=1,就會產(chǎn)生09H類型的硬件中斷,CPU將執(zhí)行INT 09H指令,轉(zhuǎn)入BIOS鍵盤中斷服務(wù)程序處理用戶的鍵盤輸入 。,掃描碼和ASCII碼,60H輸入端口:,D7=1 按鍵已放開,稱為斷碼 D7=0 鍵已按下,稱為通碼,D6-D0位是按鍵的掃描碼。,鍵盤上的每一個鍵都對應(yīng)惟一的掃描碼 ,掃描碼與鍵盤按鍵對應(yīng)關(guān)系如表5-5所示。,BIOS和DOS鍵盤中斷功能,BIOS中斷調(diào)用(INT 16H)和DOS系統(tǒng)
31、調(diào)用(INT 21H)都提供了鍵盤中斷功能,從鍵盤緩沖區(qū)獲取鍵入字符的掃描碼或ASCII碼返回給用戶應(yīng)用程序。,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,例 要求改變鍵盤中斷向量,實現(xiàn)下列目的: (1) 從鍵盤上接收掃描碼,并在屏幕上顯示掃描碼的十六進制; (2) 將掃描碼存入緩沖區(qū)內(nèi),在有限時間內(nèi),當緩沖區(qū)滿時,給出buffer overflow信息,當緩沖區(qū)不滿時,給出buffer not overflow信息. (3) 緩沖區(qū)的大小為16字節(jié)。,dseg segment addr_point dw ? count dw ? buffer db 0fh dup( ) prompt db
32、 please enter the character : db 0dh,0ah,$ message db buffer overflow,0dh,0ah,$ messageb db buffer not overflow,0dh,0ah,$ save_ip9 dw ? save_cs9 dw ? dseg ends cseg segment assume cs:cseg , ds:dseg,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,main proc far start: mov ax , dseg mov ds , ax mov ax , offset buffer ;初始化緩沖區(qū)地址
33、和緩沖區(qū)字符數(shù)量 mov addr_point , ax mov count , 0 ;* mov al , 09h ;保存9h的中斷向量 mov ah , 35h int 21h mov save_ip9 , bx mov save_cs9 , es mov dx , offset kbint ;把過程kbint地址設(shè)置成09h的中斷向量 push ds mov ax , seg kbint mov ds , ax mov al , 09h mov ah , 25h int 21h pop ds,第一章 基礎(chǔ)知識,第八章 輸入與輸出程序設(shè)計,in al , 21h ;允許鍵盤中斷 and al , 0fdh out 21h , al mov ah , 09h ; 屏幕上顯示提示信息 lea dx , prompt int 21h ;* sti ;允許CPU響應(yīng)外部中斷 ;* mov di , 0f000h ;主過程等待鍵盤的輸入和打印機的輸出 mainp: mov si , 0f000h mainp1: de
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廚藝培訓中心管理制度
- 窗口單位培訓管理制度
- 賓館人員選聘培訓制度
- 鋼琴培訓班內(nèi)部制度
- 藥企員工培訓管理制度
- 管培生培訓請假制度規(guī)定
- 中糧集團年度培訓制度
- 瓦斯防治培訓制度及流程
- 培訓機構(gòu)安保用品管理制度
- 培訓班學員缺課回訪制度
- 車間電纜整改方案模板(3篇)
- 徐州村務(wù)管理辦法
- 廣東省惠州市2026屆高三上學期第一次調(diào)研考試 歷史 含答案
- 政協(xié)機車輛管理辦法
- 食品加工助劑管理辦法
- DB50∕T 1604-2024 地質(zhì)災害防治邊坡工程結(jié)構(gòu)可靠性設(shè)計規(guī)范
- 非現(xiàn)場執(zhí)法培訓課件
- 中國電氣裝備資產(chǎn)管理有限公司招聘筆試題庫2025
- 糖尿病足的護理常規(guī)講課件
- 2025年高考英語復習難題速遞之語法填空(2025年4月)
- 2025外籍工作人員勞動合同范本
評論
0/150
提交評論