




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章輸入輸出和中斷輸入輸出功能是計(jì)算機(jī)的重要組成部分,是人一機(jī)交互功能的主要承擔(dān)者。 在早期的計(jì)算機(jī)系統(tǒng)中,通常把輸入輸出設(shè)備或功能作為次要的部分,而把CPU 作為主要研究對(duì)象。但現(xiàn)在隨著輸入輸出設(shè)備的日益豐富、功能要求越來越復(fù)雜, 輸入輸出部分在整個(gè)計(jì)算機(jī)系統(tǒng)中的地位也得到了進(jìn)一步提高。本章先介紹了 I/O的基本概念和I/O指令,再敘述了中斷的概念及其工作過 程,并列舉出計(jì)算機(jī)系統(tǒng)中若十個(gè)常用的中斷及其功能。8.1輸入輸出的基本概念輸入輸出是一個(gè)完整應(yīng)用程序的重要組成部分,是交互式應(yīng)用程序不可缺少 的組成部分。在用高級(jí)語言編程時(shí),程序員可直接用輸入輸出語句來完成鍵盤輸入、屏幕 顯示或打印輸
2、出等需求,而無需關(guān)心這些輸入輸出語句是如何實(shí)現(xiàn)的,因?yàn)榫幾g 程序會(huì)自動(dòng)把這些語句轉(zhuǎn)換成相應(yīng)的輸入輸出指令。但如果用匯編語言編寫程序 的話,情況就不同了,因?yàn)閰R編語言是與機(jī)器有關(guān)的程序設(shè)計(jì)語言,要編寫出具 有輸入輸出功能的代碼段就必須清楚CPU為輸入輸出提供了哪些指令,或計(jì)算 機(jī)系統(tǒng)提供了哪些可直接使用的功能調(diào)用。8.1.1 I/O端口地址I/O端口是CPU與輸入輸出設(shè)備的交換數(shù)據(jù)的場(chǎng)所,通過I/O端口,處理機(jī) 可以接受從輸入設(shè)備輸入的信息;也可向輸出設(shè)備發(fā)送信息。在計(jì)算機(jī)系統(tǒng)中, 為了區(qū)分各類不同的I/O端口,就用不同的數(shù)字給它們進(jìn)行編號(hào),這種對(duì)I/O端 口的編號(hào)就稱為I/O端口地址。按照每次
3、可交換一個(gè)字節(jié)數(shù)據(jù)的端口稱為字節(jié)端口,每次可交換一個(gè)字?jǐn)?shù)據(jù)的端 口稱為字端口。在Intel公司的CPU家族中,I/O端口的地址空間可達(dá)64K,即可有65536 個(gè)字節(jié)端口,或32768個(gè)字端口。這些地址不是內(nèi)存單元地址的一部分,不能普 通的訪問內(nèi)存指令來讀取其信息,而要用專門的I/O指令才能訪問它們。雖然 CPU提供了很大的I/O地址空間,但目前大多數(shù)微機(jī)所用的端口地址都在 03FFH范圍之內(nèi),其所用的I/O地址空間只占整個(gè)I/O地址空間的很小部分。 表8.1列舉了幾個(gè)重要的I/O端口地址。表8.1幾個(gè)重要的I/O端口地址端口地址端口名稱端口地址端口名稱020H023H中斷屏蔽 寄存器378H
4、37FH并行口 LPT2040H043H時(shí)針,計(jì)數(shù)3B0H3BBH單色顯示器器端口060H鍵盤輸入 端口3BCH3BFH并行口 LPT1061H揚(yáng)聲器(0, 3C0H3CFH VGA/EGA1位)200H20FH游戲控制 口3D0H3DFHCGA278H27FH并行曰 3F0H3F7H磁盤控制器LPT32F8H2FFH 串行曰 3F8H3FFH 串行口 COM1COM2計(jì)算機(jī)在啟動(dòng)時(shí),BIOS程序(Basic Input/Output System)將檢查計(jì)算機(jī)系 統(tǒng)中有哪些端口地址。當(dāng)發(fā)現(xiàn)有串行端口地址時(shí),BIOS就把該端口存放在以 地址40:00H開始的數(shù)據(jù)區(qū)內(nèi);當(dāng)發(fā)現(xiàn)有并行端口地址時(shí),B
5、IOS會(huì)把它 存入以 地址40:08H開始的數(shù)據(jù)區(qū)內(nèi)。每類端口有4個(gè)字的空間,對(duì)有二個(gè)串行口、二個(gè)并行口的計(jì)算機(jī)系統(tǒng),其BIOS程序?qū)⒌玫饺鐖D8.1所示的部分?jǐn)?shù)據(jù)表。圖中 03F8H、02F8H、0378H 和 0278H 分別為 COM1、COM2、LPT1 和 LPT2 的端 口地址。8.1.2 I/由于I/O端口地址和內(nèi)存單元地址是相互獨(dú)立的,這些端口地址不能普通的 訪問內(nèi)存指令來訪問其信息,所以,在CPU的指令系統(tǒng)中就專門設(shè)置了 I/O指令 來存取I/O端口的信息。按功能分類來看,I/O指令應(yīng)屬于數(shù)據(jù)傳送指令。1、輸入指令I(lǐng)N輸入指令I(lǐng)N的一般格式如下:IN AL/AX, PortNo
6、/DX該指令的作用是從端口中讀入一個(gè)字節(jié)或字,并保存在寄存器AL或AX中。 如果某輸入設(shè)備的端口地址在0255范圍之內(nèi),那么,可在指令I(lǐng)N中直接給出, 否則,要把該端口地址先存入寄存器DX中,然后在指令中由DX來給出其端口 地址。例如:IN AL, 60HIN AX, 20HMOV DX, 2F8HIN AL, DXIN AX, DX;從端口 60H讀入一個(gè)字節(jié)到AL中;把端口 20H、21H按“高高低低”組成的字讀入AX;從端口 2F8H讀入一個(gè)字節(jié)到AL中;把端口 2F8H、2F9H按“高高低低”組成的字讀入 AX2、輸出指令OUT輸出指令OUT的一般格式如下:OUT PortNo/DX,
7、 AL/AX例如:OUT61H, ALOUT20H, AXMOVDX, 3C0HOUTDX, ALOUTDX, AX該指令的作用是把寄存器AL或AX的內(nèi)容輸出到指定端口。如果某輸出設(shè) 備的端口地址在0255范圍之內(nèi),那么,可在指令OUT中直接給出,否則,要 把該端口地址先存入寄存器DX中,然后在指令中由DX來給出其端口地址。把AL的內(nèi)容輸出到端口 61H中把AX的內(nèi)容輸出到端口 20H、21H中;把AL的內(nèi)容輸出到端口 3C0H中;把AX的內(nèi)容輸出到端口 3C0H、3C1H中有關(guān)字符串的輸入輸出指令,請(qǐng)見節(jié)中的介紹。8.2中斷在計(jì)算機(jī)系統(tǒng)中,引入中斷的最初目的是為了提高系統(tǒng)的輸入輸出性能。隨
8、著計(jì)算機(jī)應(yīng)用的發(fā)展,中斷技術(shù)也應(yīng)用到計(jì)算機(jī)系統(tǒng)的許多領(lǐng)域,如:多道程序、 分時(shí)系統(tǒng)、實(shí)時(shí)處理、程序監(jiān)視和跟蹤等領(lǐng)域。中斷的基本概念下面只簡(jiǎn)單介紹與匯編語言程序設(shè)計(jì)有關(guān)的中斷知識(shí),使本章的知識(shí)具有一 定完整性。有關(guān)中斷的詳細(xì)介紹可參閱計(jì)算機(jī)組成原理課程中的相關(guān)章節(jié)。1、中斷和中斷源所謂中斷就是CPU暫停當(dāng)前程序的執(zhí)行,轉(zhuǎn)而執(zhí)行處理緊急事務(wù)的程序,并 在該事務(wù)處理完后能自動(dòng)恢復(fù)執(zhí)行原先程序的過程。在此,稱引起緊急事務(wù)的事 件為中斷源,稱處理緊急事務(wù)的程序?yàn)橹袛喾?wù)程序或中斷處理程序。計(jì)算機(jī)系統(tǒng)還根據(jù)緊急事務(wù)的緊急程度,把中斷分為不同的優(yōu)先級(jí),并規(guī)定:高優(yōu)先級(jí) 的中斷能暫停低優(yōu)先級(jí)的中斷服務(wù)程序的執(zhí)
9、行。計(jì)算機(jī)系統(tǒng)有上百種可以發(fā)出中斷請(qǐng)求的中斷源,但最常見的中斷源是:外 設(shè)的輸入輸出請(qǐng)求,如:鍵盤輸入引起的中斷,通信端口接受信息引起的中斷等; 還有一些計(jì)算機(jī)內(nèi)部的異常事件,如:0作除數(shù)、奇偶校驗(yàn)錯(cuò)等。CPU在執(zhí)行程序時(shí),是否響應(yīng)中斷要取決于以下三個(gè)條件能否同時(shí)滿足:、有中斷請(qǐng)求;、允許CPU接受中斷請(qǐng)求;、一條指令執(zhí)行完,下一條指令還沒有開始執(zhí)行。條件(1)是響應(yīng)中斷的主體。除用指令I(lǐng)NT所引 起的軟件中斷之外,其它中斷請(qǐng)求信號(hào)是隨機(jī)產(chǎn)生 的,程序員是無法預(yù)見的。程序員可用程序部分地控制條件(2)是否滿足, 即可用指令STI和CLI來允許或不允許CPU響應(yīng)可 屏蔽的外部中斷。而對(duì)于不可屏蔽
10、中斷和內(nèi)部中斷, CPU 一定會(huì)響應(yīng)它們的,程序員是無控制權(quán)的。CPU 一定會(huì)執(zhí)行這些中斷的中斷服務(wù)程序。2、斷向量表和中斷服務(wù)程序中斷向量表是一個(gè)特殊的線性表,它保存著系 統(tǒng)所有中斷服務(wù)程序的入口地址(偏移量和段地 址)。在微機(jī)系統(tǒng)中,該向量表有256個(gè)元素 (00FFH),每個(gè)元素占4個(gè)字節(jié),總共1K字節(jié),其 在內(nèi)存中的存儲(chǔ)形式及其存儲(chǔ)內(nèi)容如圖8.2所示。圖8.2中的“中斷偏移量”和“中斷段地址” 是指該中斷服務(wù)程序入口單元的“偏移量”和“段 地址”。由此不難看出:假如中斷號(hào)為n,那么, 在中斷向量表中存儲(chǔ)該中斷處理程序的入口地址的 單元地址為:4n。D號(hào)中斷偏移星L口號(hào)中斷段地址F1號(hào)中
11、斷偏移星1號(hào)中斷段地址卜-255號(hào)中斷偏移量255中斷段地址 II。號(hào)中斷服務(wù)程序1號(hào)中中斷苗程序1= SCROLL LOCK 有效1= NUM LOCK有效*J= CAPS LOG:岐有效A1= INSERT 有效1514131211109876543210圖8.5鍵盤狀態(tài)字的各位含義3、鍵盤中斷的處理過程當(dāng)用戶按鍵時(shí),鍵盤接口會(huì)得到一個(gè)代表該按鍵的鍵盤掃描碼,同時(shí)產(chǎn)生一 個(gè)中斷請(qǐng)求。鍵盤中斷服務(wù)程序先從鍵盤接口取得按鍵的掃描碼,然后根據(jù)其掃 描碼判斷用戶所按的鍵并作相應(yīng)的處理,最后通知中斷控制器本次中斷結(jié)束并實(shí) 現(xiàn)中斷返回。若用戶按下雙態(tài)鍵(如:Caps Lock、Num Lock和Scr
12、oll Lock等),則在鍵 盤上相應(yīng)LED指示燈的狀態(tài)將發(fā)生改變;若用戶按下控制鍵(如:Ctrl、Alt和Shift等),則在鍵盤標(biāo)志字中設(shè)置其 標(biāo)志位;若用戶按下功能鍵(如:F1、F2、等),再根據(jù)當(dāng)前是否又按下控制鍵來 確定其系統(tǒng)掃描碼,并把其系統(tǒng)掃描碼和一個(gè)值為0的字節(jié)存入鍵盤緩沖 區(qū);若用戶按下字符鍵(如:A、1、+、等),此時(shí),再根據(jù)當(dāng)前是否又按下控 制鍵來確定其系統(tǒng)掃描碼,并得到該按鍵所對(duì)應(yīng)的ASCII碼,然后把其系 統(tǒng)掃描碼和ASCII碼一起存入鍵盤緩沖區(qū);若用戶按下功能請(qǐng)求鍵(如:Print Screen等),則系統(tǒng)直接產(chǎn)生一個(gè)具體 的動(dòng)作。有關(guān)鍵盤中各種單鍵、組合鍵的掃描碼
13、及其相應(yīng)的ASCII碼,請(qǐng)參閱本書的 附錄5。4、DOS功能中的鍵盤輸入鍵盤輸入是一種最常用的輸入方式,所以,在DOS操作系統(tǒng)中,提供了能實(shí) 現(xiàn)各種鍵盤輸入的功能(Windows操作系統(tǒng)中仍然能用)。INT 21H中的相關(guān)功能 如下:01H帶回顯的鍵盤輸入06H控制臺(tái)的輸入/輸出:當(dāng)DL=0FFH, 表示鍵盤輸入07H不回顯、不過濾的鍵08H不回顯的鍵盤輸入盤輸入0AH鍵盤輸入字符串0BH檢查鍵盤輸入狀態(tài)0CH清除輸入緩沖區(qū)的輸入功能有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 字符功能調(diào)用類。5、BIOS中的鍵盤輸入在BIOS系統(tǒng)中,提供了中斷16H來實(shí)現(xiàn)鍵盤輸入功能。
14、其具體的功能如下:00H、10H從鍵盤讀一個(gè)字符,輸入字符不回顯01H、11H判斷鍵盤緩沖區(qū)內(nèi)是否有字符可讀02H讀取當(dāng)前鍵盤狀態(tài)字有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 鍵盤服務(wù)。6、直接操作端口的鍵盤輸入由表8.1可知:鍵盤輸入端口的地址為60H,所以,我們可以用指令I(lǐng)N從該 端口讀取當(dāng)前按鍵的掃描碼。例如:MOV DX, 60HIN AL, DX7、鍵盤輸入的舉例例8.1用鍵盤最多輸入10個(gè)字符,并存入內(nèi)存變量Buff中,若按“Enter”鍵, 則表示輸入結(jié)束。解:1、方法1.MODEL SMALLCR EQU 0DH ;定義“回車”鍵的符號(hào)名.DATABuf
15、f DB 10 DUP(?).CODE.STARTUPMOV CX, 0AHLEA BX, Buff.REPEATMOV AH, 0HINT 16H;用BIOS中的中斷功能.BREAK .IF AL=CRMOV BX, ALINC BX.UNTILCXZ.EXIT 0END2、方法2.MODEL.DATABuffDUP(?) .CODE.STARTUPLEA DX,MOV AH, INTSMALLDB10,Buff 0AH21H?, 10;注意緩沖區(qū)的定義方式;用DOS中的功能調(diào)用.EXIT 0END屏幕顯示的中斷功能顯示器是一個(gè)重要的輸出設(shè)備,它通過顯示卡與計(jì)算機(jī)系統(tǒng)相連。顯示器的 顯示屏通
16、常稱之為屏幕,現(xiàn)在常用的顯示器有14和17,常用的顯示分辨率為 800X600或1024X768等。常用的顯示卡類型為VGA、SVGA、EVGA和TVGA等, 顯示卡上也都帶有大量的顯示存儲(chǔ)器,能快速顯示精美的圖象。1、顯示模式計(jì)算機(jī)系統(tǒng)中的顯示器都有二種顯示方式:文本顯示方式和圖形顯示方式。 在DOS操作系統(tǒng)環(huán)境下,其默認(rèn)的顯示方式為文本顯示方式,而在Windows操作 系統(tǒng)環(huán)境下,其顯示方式是圖形顯示方式,其絕大多數(shù)操作界面是以圖形界面的 窗口形式出現(xiàn)的。可用的顯示模式,請(qǐng)參閱附錄3中的中斷10H之功能00H中所列。1)、文本顯示方式文本顯示方式是指以字符為最小單位的顯示方式,每個(gè)字符都是
17、以矩形塊形 式顯示的。在BIOS ROM中存有多種不同大小的字符集,主要的顯示字符集大小 為:8X8(標(biāo)準(zhǔn))、8X14 和 8X16 等。在常用的文本顯示模式(模式3)下,屏幕被劃分成25行,每行可顯示80個(gè) 字符,所以,每屏最多可顯示2000(80X25)個(gè)字符。為了便于標(biāo)識(shí)屏幕上的每 個(gè)顯示位置,我們就用其所在行和列來表示之,并規(guī)定:屏幕的左上角坐標(biāo)為(0, 0),右下角坐標(biāo)為(24, 79)。圖8.6字符顯示屬性的定義(21在顯示字符時(shí),用一個(gè)字節(jié) 存儲(chǔ)該字符的ASCII碼,用另 一個(gè)字節(jié)存儲(chǔ)的顯示屬性,即: 顯示顏色。彩色顯示器的字符 顯示屬性定義如圖8.6所示, 有關(guān)顏色值的定義,請(qǐng)
18、參閱附 錄6中的表4。存儲(chǔ)內(nèi)容與顯示位置的對(duì) 應(yīng)關(guān)系如圖8.7所小。圖8.7存儲(chǔ)內(nèi)容與顯示位置的對(duì)應(yīng)關(guān)系示意圖由上面的敘述可知:在80X25的文本顯示模式下,滿屏可顯示2000個(gè)字符, 也就需要4000個(gè)字節(jié)來存儲(chǔ)一屏的顯示信息。2)、圖形顯示方式圖形顯示是目前最常用的一種顯示方式,也是Windows操作系統(tǒng)的默認(rèn)顯示 方式。在該顯示方式下,我們可以看到優(yōu)美的圖象、VCD、瀏覽豐富多彩的網(wǎng)頁圖形顯示的最小單位是象素,對(duì)每個(gè)象素可用不同的顏色來顯示。所以,在 顯示緩沖區(qū)內(nèi)記錄的信息是屏幕各象素的顯示顏色。由于各種圖形顯示模式所能顯示的顏色和象素是不同的,它決定了顯示緩沖 區(qū)的存儲(chǔ)方式也是不同的。
19、下面給出三個(gè)具體的圖形顯示模式及其存儲(chǔ)方式,通 過它們可看出各種顯示模式在顯示緩沖區(qū)存儲(chǔ)方式上的明顯差異。、4色320X200圖形顯示模式由于每個(gè)象素只能是四種顏色之一,而四種情況用2位二進(jìn)制就可表示,所 以,一個(gè)字節(jié)可表示4個(gè)象素的顯示顏色,存儲(chǔ)一行上的所有象素信息就需要 80個(gè)字節(jié)。在具體存儲(chǔ)過程中,它又把偶數(shù)行象素和齊數(shù)行分開來存儲(chǔ)。偶數(shù)行和齊數(shù) 行的象素總數(shù)各有32000個(gè),也都需要8000個(gè)字節(jié)來存儲(chǔ),并規(guī)定:偶數(shù)行象 素從0B800:0000H開始存儲(chǔ),齊數(shù)行象素從0B800:2000H開始存儲(chǔ)。該顯示模式 的存儲(chǔ)形式如圖8.8所示。圖8.8顯示緩沖區(qū)存儲(chǔ)方式示意圖、16色640X
20、480圖形顯示模式640X480圖形顯示模式共有307200個(gè)象素,每個(gè)象素可選用16種顏色,它 需要用4位二進(jìn)制來表示。該顯示模式在存儲(chǔ)顯示信息時(shí),把該4位分在四個(gè)位 平面P1、P2、P3和P4上,所以,位平面Pi(i=1,2,3,4)共有307200個(gè)二進(jìn)制 位,即有38400個(gè)字節(jié)。其顯示緩沖區(qū)的存儲(chǔ)形式如圖8.9所示。1位二進(jìn)制位P4A001:C200H -P3A001:2C00HriP2A000:9600HrTP1A000:0000Hri7圖8.9顯示緩沖區(qū)存儲(chǔ)方式示意圖由圖8.9可看出:若要改變某個(gè)象素的顯示顏色,則需要在每個(gè)位平面上修 改其對(duì)應(yīng)的二進(jìn)制位。所以,若用操作顯示緩沖區(qū)
21、的方法來改變象素的顏色,那 么編程將困難得多。在屏幕上顯示一個(gè)點(diǎn),必須遵循以下步驟:讀入要改變的內(nèi)存單元,把位平面信息裝入顯示卡;通過圖形地址寄存器(GAR)和位屏蔽寄存器(BMR)選擇并尋址到其二進(jìn)制位;尋址并設(shè)定映像屏蔽寄存器(MMR)為0FH,在對(duì)應(yīng)象素地址填入0(黑色)來清除象素的原有顏色;通過MMR設(shè)定該象素當(dāng)前所要顏色;通過修改包含顯示信息的內(nèi)存單元來寫象素。對(duì)于該顯示模式下,改變象素方法的詳細(xì)描述和例子,請(qǐng)參閱參考書籍2、 4,或其它有關(guān)技術(shù)資料,在此不再進(jìn)一步展開敘述。若用BIOS中斷10H之功能0DH/0CH來讀/寫象素,則它可屏蔽掉各種顯示模 式的差異,用同樣的參數(shù)完成同樣
22、的功能。所以,在此建議:使用系統(tǒng)中斷的方 法來實(shí)現(xiàn)對(duì)圖形象素的操作。、256色320X200圖形顯示模式表達(dá)256種不同顏色需要8位二進(jìn)制,即一個(gè)字節(jié)。在該模式下,其顯示緩 沖區(qū)的存儲(chǔ)方式是非常簡(jiǎn)單的,即:第一個(gè)字節(jié)存儲(chǔ)第一個(gè)象素的顏色,第二個(gè) 字節(jié)存儲(chǔ)第二個(gè)象素的顏色,以此類推,所以,存儲(chǔ)滿屏象素所需要的字節(jié)數(shù)為: 320X200X1 = 64000。其顯示緩沖區(qū)的存儲(chǔ)方式如圖8.10所示。從上面三種不同圖形顯示模式的介紹,不難看出:各種顯示模式在顯示緩沖 區(qū)存儲(chǔ)方式上的明顯差異,操作象素方法的難易程度相差也很大,所以,再次建 議:程序員不要用直接操作顯示緩沖區(qū)的辦法來達(dá)到改變顯示象素的目的
23、,最好 是通過BIOS內(nèi)的中斷功能來實(shí)現(xiàn)相應(yīng)的功能,這樣,所編寫的程序能很方便地 適應(yīng)不同的圖形顯示模式。2、顯示緩沖區(qū)顯示緩沖區(qū)是用來記錄屏幕顯示信息的。在文本顯示方式下,這些顯示信息 包括:每個(gè)顯示字符的ASCII碼及其顯示屬性,如圖8.7所示。在圖形顯示方式 下,顯示緩沖區(qū)內(nèi)存儲(chǔ)每個(gè)象素的顯示顏色。在圖8.7中,我們并沒有給出具體的段地址,只用XXXX來表示其段地址。 在常用的VGA顯示方式下,計(jì)算機(jī)系統(tǒng)規(guī)定:文本顯示方式下,單色顯示器的顯示緩沖區(qū)段地址為0B000H;文本顯示方式下,彩色顯示器顯示緩沖區(qū)段地址為0B800H;圖形顯示方式下,其顯示緩沖區(qū)段地址為0A000H。3、DOS功
24、能中的屏幕輸出屏幕輸出是最常用的一種輸出形式,DOS操作系統(tǒng)提供了幾種實(shí)現(xiàn)屏幕輸出 的功能調(diào)用。INT 21H中的相關(guān)功能如下:02H顯示的字符06H控制臺(tái)的輸入/輸出:當(dāng)DL#0FFH,表示顯示字符09H在屏幕上顯示一個(gè)字符串有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 字符功能調(diào)用類。4、BIOS中的屏幕操作功能BIOS系統(tǒng)提供了中斷10H來實(shí)現(xiàn)各種屏幕處理功能。其具體的功能如下:00H設(shè)置顯示器模式01H-設(shè)置光標(biāo)形狀02H一設(shè)置光標(biāo)位置03H-讀取光標(biāo)信息05H一設(shè)置顯示頁06H、07H初始化或滾屏(向上滾屏和向下滾屏)08H屬性一讀光標(biāo)處的字符及其09H在當(dāng)前光
25、標(biāo)處按指定屬性 顯示字符0AH在當(dāng)前光標(biāo)處顯示字0CH-寫圖形象素0DH讀圖形象素0EH在Teletype模式下顯示字符0FH讀取顯示器模式10H顏色13H在Teletype模式下顯示字符串有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 顯示服務(wù)。5、屏幕輸出的舉例例8.2用直接寫屏方式在屏幕第5行、第10列以黃色(0EH)顯示字符串Hello”。解:在文本顯示方式下,每行顯示80個(gè)字符,每個(gè)字符占2個(gè)字節(jié),所以,顯 示一行需要160個(gè)字節(jié)。若在第m行、第n列位置顯示字符,則該位置所對(duì) 應(yīng)存儲(chǔ)單元的偏移量為:mX160 + nX2。.MODEL SMALL.DATAYell
26、ow EQU 0EHMSG1 DB Welcome.Count EQU $-MSG1.CODE.STARTUPMOVMOVES,AX;彩色顯示器的顯示緩沖區(qū)段地址MOVDI,5 AX, 0B800HIMUL DI, 160;5行所跳過的顯示存儲(chǔ)單元MOV CX, 10CX, 1;10列所跳過的顯示存儲(chǔ)單元SHL人八口 DI, CX ;第5行、第10列之前所跳過的所有顯示單元ADDMOV CX, CountSI, MSG1 ;CX:字符個(gè)數(shù),SI:顯示字符首地址LEAMOV“ AH, Yellow ;設(shè)置顯示屬性,即顯示顏色.REPEATLODSB;取顯示字符STOSW;向顯示緩沖區(qū)設(shè)置顯示字符
27、和屬性.UNTILCXZ.EXIT 0END例8.3用“霓虹燈”的顯示方式顯示字符串Hello”,按ESC鍵時(shí)結(jié)束程序的運(yùn) 行。解:顯示解答例8.4編寫一個(gè)輸入密碼的程序,該程序的具體要求如下:1、每輸入一個(gè)字符,顯示字符”# 表示之;2、密碼最多只有10個(gè)字符,多余的按鍵被丟棄;3、若輸入的字符串為HELLO”,則以藍(lán)色顯示W(wǎng)elcome,否則,以閃爍、 亮紅色在顯示”Invalid Password o解:顯示解答例8.5在256色320X200的圖形顯示模式下,從屏幕最左邊向最右邊,依次畫 豎線(從頂?shù)降祝?,線的顏色從1依次加1。要求用中斷調(diào)用的方法來畫線。解:顯示解答例8.6在256色
28、320X200的圖形顯示模式下,從屏幕頂?shù)狡聊坏滓来萎嫏M線(從 最左邊到最右邊),線的顏色從1依次加1。要求用直接操作顯示緩沖區(qū)的 方法來畫線。解:顯示解答打印輸出的中斷功能打印輸出是一種硬拷貝輸出,也是一種常用的輸出形式。隨著計(jì)算機(jī)應(yīng)用領(lǐng) 域的不斷擴(kuò)大,外圍設(shè)備的重視程度也越來越高。目前,打印機(jī)的種類已日益豐 富,有針式打印機(jī)、噴墨打印機(jī)和激光打印機(jī)等。從打印色彩來看,既有普通的 黑色打印,也有彩色打印??傊?,計(jì)算機(jī)打印輸出的品質(zhì)是越來越高。1、打印機(jī)狀態(tài)打印機(jī)狀態(tài)字 記錄著打印機(jī)的當(dāng) 前工作情況(或狀 態(tài)),它相當(dāng)于CPU 中的程序狀態(tài)字和 鍵盤狀態(tài)字。打印 機(jī)狀態(tài)字的各位定 義如圖8.1
29、1所示。若在某個(gè)程序 中要包含打印功 能,那么,程序員 可通過打印狀態(tài)字 來了控制打印過 程,并向使用者提 供各種有用信息。 比如:提示使用者 “打印機(jī)無紙了” 或打印機(jī)處于脫機(jī)1二打印機(jī)空閑頂1二打印機(jī)響應(yīng) 1二元紙V-1=打印機(jī)被迷 =1=打印機(jī)超時(shí)T-1二保留*1二保留*1=1們錯(cuò)誤囹8一11打印機(jī)械態(tài)宇節(jié)定義狀態(tài)(Off Line)等。圖8.11打印機(jī)狀態(tài)字節(jié)定義2、打印控制命令在打印時(shí),程序員往往要控制文本的輸出格式,比如:換頁、換行、字體或 字號(hào)等。若要實(shí)現(xiàn)對(duì)打印格式的控制,就必須要知道控制打印機(jī)的控制字符和控 制命令。一些常用的打印控制字符如表8.3所示。表8.3常用的打印控制字
30、符字符值功能描述09H水平制表符,跳到下個(gè) 制表位置0AH 換行0CH換頁0DH 回車打印機(jī)還有其它的控制命令,如:ESC命令序列,該序列由字符ESC(其ASCII 為1BH)和一些數(shù)值組成。表8.4列舉了 LQ-1600K打印機(jī)的幾個(gè)控制命令。對(duì)于 其它各類打印機(jī)的控制命令,要參閱其使用手冊(cè)。表8.4 LQ-1600K打印機(jī)的幾個(gè)控制命令控制命令命令的數(shù)值功能描述ESC 1BH 40H初始化打印機(jī)ESC 4/ESC 51BH 34H / 1BH35H設(shè)定/取消斜體打印ESC S 0/ESC S 11BH 53 0 / 1BH 53 1設(shè)定上/下角標(biāo)打印ESC T1BH 54H取消上/下角標(biāo)打
31、印ESC l n1BH 6CH n設(shè)定左邊界,n為當(dāng)前 字符的寬度3、DOS功能中的打印輸出在DOS操作系統(tǒng)中,INT 21H提供了一種打印輸出的功能調(diào)用。其具體描述 如下:05H向連接在LPT1端口上的打印機(jī)輸出一個(gè)字符40H向先前打開的文件寫入指定數(shù)量的字節(jié),可以把打印機(jī)看作為標(biāo) 準(zhǔn)的輸出文件有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 字符功能調(diào)用類。4、BIOS中的打印輸出BIOS系統(tǒng)提供了中斷17H來實(shí)現(xiàn)打印輸出功能。其具體的功能如下:00H向指定的打印機(jī)輸出一個(gè)字符01H初始化指定的打印機(jī)02H讀取指定打印機(jī)的狀態(tài)有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要
32、查閱者可參閱附錄3之 并行口服務(wù)。5、打印輸出的舉例例8.7在每頁的開始處打印“Assember Language”字符串,并空一行才打印其 它內(nèi)容。解:顯示解答例8.8當(dāng)打印機(jī)不能正常打?。ǚ怯布收希r(shí),提示使用者其原因,以便解決 打印問題。解:顯示解答串行通信口的中斷功能計(jì)算機(jī)的通信功能是現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)的最基本功能。如果計(jì)算機(jī)沒有通信功 能,計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境也就無從談起。一臺(tái)計(jì)算機(jī)與其它計(jì)算機(jī)(或設(shè)備)之間通信 除了必要的物理連接之外,它們之間通信接口的功能就是另一個(gè)極其重要的功能 模塊。從計(jì)算機(jī)通信的本質(zhì)來看,通信就是發(fā)送或接受具有一定格式的二進(jìn)制位。 這些二進(jìn)制位通過一些應(yīng)用程序一一如
33、瀏覽器一一的解釋顯示成具有不同表達(dá) 形式的文字或圖象。為了方便實(shí)現(xiàn)計(jì)算機(jī)的通信功能,在系統(tǒng)的低層或操作系統(tǒng)中都有不同程度 的支持,如:DOS、BIOS和NETBIOS等系統(tǒng)中都相應(yīng)通信功能或中斷服務(wù)。下面 僅僅介紹在匯編語言程序中如何使用通信功能,有關(guān)通信功能的詳細(xì)內(nèi)容在計(jì) 算機(jī)通信與接口技術(shù)課程會(huì)有更深入的論述。1、DOS中的通信功能INT 21H提供了對(duì)通信口 COM1操作的功能調(diào)用。其具體描述如下:03H從輔助設(shè)備讀入一個(gè)字符,該輔助設(shè)備的缺省值為COM104H向輔助設(shè)備輸出一個(gè)字符,該輔助設(shè)備的缺省值為COM1有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 字符功能
34、調(diào)用類。2、BIOS中的通信功能BIOS系統(tǒng)提供了中斷14H來實(shí)現(xiàn)對(duì)通信端口的控制能。這些具體的功能如 下:02H03H從通信口讀入字符 讀取通信口狀態(tài)00H初始化通信口 01H向通信口輸出 字符有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 串行口服務(wù)。3、通信功能的應(yīng)用舉例例8.9把字符串Hello, World從COM1端口傳輸出去。在傳輸過程中,要求傳 輸速率為9600波特,字長為8位,1位停止位,無齊偶校驗(yàn)。解:.MODEL SMALL.DATAMSG DB Hello, WorldMLen EQU $-MSG.CODE.STARTUPMOV AL, 0E3H;0
35、E39600、無齊偶校驗(yàn)、字長8位,1位停止位MOV DX, 0MOV AH, 0INT 14H;初始化通信口 COM1MOV BX, OFFSET MSGMOV CX, MLenMOV DX, 0again:MOV AL, BXMOV AH, 1INT 14HTEST AH, 80H;如果發(fā)送字符失敗,繼續(xù)發(fā)同一個(gè)字符,這里可能JNZ again;構(gòu)成死循環(huán)。在實(shí)際工作過程中,還有其它考慮。INC BXLOOP again.EXIT0END例8.10把從COM1端口讀入的字符顯示在屏幕上。如果通信端口數(shù)據(jù)未準(zhǔn)備好, 則程序處于等待狀態(tài);若傳輸出錯(cuò),則用紅色顯示字符?。解:again:MOV
36、DX,MOV AH, INT 14HTESTAH, 1H;檢測(cè)狀態(tài)字節(jié)AH的最后一位,看數(shù)據(jù)是否準(zhǔn) 備好JZ again MOV DX, 0 MOV AH, 2 INT 14H TESTAH, 80H .IF ZERO?AND AL,MOV BL,7FH15;從COM1端口讀字符;檢測(cè)讀字符是否成功;讀字符成功;屏蔽掉最高位,使之為字符;正常顏色:白色MOVAL,?MOVBL,12.ENDIFMOVBH,0MOVAH,0EHINT10HJMPagain.ELSE;顯示字符?;錯(cuò)誤顏色:紅字鼠標(biāo)的中斷功能鼠標(biāo)是現(xiàn)在計(jì)算機(jī)系統(tǒng)中的一個(gè)常用輸入設(shè)備,它為使用計(jì)算機(jī)帶來了很大 的方便,鼠標(biāo)指針的各種表
37、現(xiàn)形式還反映了系統(tǒng)(或應(yīng)用程序)當(dāng)前處于什么樣的 工作狀態(tài)。許多計(jì)算機(jī)使用者為體現(xiàn)其個(gè)性化還選擇各自喜歡的鼠標(biāo)圖形,所以, 了解和掌握計(jì)算機(jī)系統(tǒng)對(duì)鼠標(biāo)所提供的功能對(duì)理解鼠標(biāo)的各種操作也是有一定 的幫助。1、鼠標(biāo)中斷的常用功能BIOS系統(tǒng)提供了中斷33H來實(shí)現(xiàn)鼠標(biāo)中斷功能,其常用的功能如下:00H一初始化鼠標(biāo)01H顯示鼠標(biāo)指針02H 一隱藏鼠標(biāo)指針03H讀取鼠標(biāo)位置及其 按鈕狀態(tài)04H設(shè)置鼠標(biāo)指針位置 05H一讀取鼠標(biāo)按鍵信息 06H一讀取鼠標(biāo)按鈕釋放 信息07H一設(shè)置鼠標(biāo)水平邊界 08H一設(shè)置鼠標(biāo)垂直邊界 09H一設(shè)置圖形鼠標(biāo)形狀0AH設(shè)置本文鼠標(biāo)形狀0BH一讀取鼠標(biāo)移動(dòng)計(jì)數(shù)0CH為鼠標(biāo)事件設(shè)
38、置處理程序0FH設(shè)置鼠標(biāo)計(jì)數(shù)與象素比10H設(shè)置鼠標(biāo)指針隱藏區(qū)域14H一替換鼠標(biāo)事件中斷18H為鼠標(biāo)事件設(shè)置替換處理程序19H一讀取替換處理程序的地址1DH為鼠標(biāo)指針選擇顯示頁1EH一讀取鼠標(biāo)指針的顯示頁有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 鼠標(biāo)功能中斷。2、鼠標(biāo)指針的設(shè)置鼠標(biāo)指針主要有二種表現(xiàn)形式:文本鼠標(biāo)和圖形鼠標(biāo)。文本鼠標(biāo)又分為軟指 針和硬指針。軟指針是用各種字符來作鼠標(biāo)指針,而硬指針是用方塊光標(biāo)的大小 來表示鼠標(biāo)指針,其效果類似于INT 10H之功能01H設(shè)置光標(biāo)類型。圖形鼠標(biāo)的表現(xiàn)形式與文本鼠標(biāo)相比就顯得更加豐富多彩,可用各種不同的 指針形狀來反映系統(tǒng)當(dāng)前
39、所處的工作狀態(tài)和所能進(jìn)行的操作。在Windows操作系 統(tǒng)及其應(yīng)用程序中使用了很多指針形狀的變化來表達(dá)各種有用信息。鼠標(biāo)的文本軟指針與圖形指針的形成過程相一致,它需要兩部分信息:象素 掩碼和光標(biāo)掩碼。其指針形成過程如下:、用象素掩碼與當(dāng)前鼠標(biāo)所處位置的象素信息進(jìn)行“邏輯與”運(yùn)算;、光標(biāo)掩碼與步驟1的運(yùn)算結(jié)果再進(jìn)行“異或”操作,該操作所得到的 16X16位的0/1信息就構(gòu)成了當(dāng)前鼠標(biāo)指針的形狀。假設(shè)象素掩碼為全0。全0的象素掩碼與屏幕上的顯示信息“邏輯與”后, 所得結(jié)果仍為全0,全0的運(yùn)算結(jié)果再和“光標(biāo)掩碼”進(jìn)行“異或”操作,這時(shí), 所得結(jié)果顯然與“光標(biāo)掩碼”完全一樣,所以,看到的鼠標(biāo)指針形狀就
40、是光標(biāo)掩 碼所表達(dá)的指針形狀。綜合上述,可得結(jié)論:若象素掩碼為全0,那么,鼠標(biāo)的形狀就是16X16 位光標(biāo)掩碼所表示的指針形狀,鼠標(biāo)所到之處就看不到該區(qū)域內(nèi)(16X16點(diǎn)陣范 圍)的其它顯示信息。在Windows操作系統(tǒng)及其應(yīng)用程序中,在16X16點(diǎn)陣范圍內(nèi),除了看不見 被各種形狀指針覆蓋的部分之外,還能看見其它小區(qū)域,這是因?yàn)槭髽?biāo)的“象素 掩碼”取其“光標(biāo)掩碼”的反相點(diǎn)陣所致。感興趣的讀者可驗(yàn)證或證明之。、硬指針的設(shè)置設(shè)置鼠標(biāo)硬指針的中斷功能使用方式:MOVBX,1MOVCX,01HMOVDX,0FHMOVAX,0AHINT33H;硬指針;鼠標(biāo)硬指針的起始掃描線;鼠標(biāo)硬指針的結(jié)束掃描線;設(shè)置
41、文本鼠標(biāo)指針、軟指針的設(shè)置設(shè)置鼠標(biāo)軟指針的中斷功能使用方式:MOV BX,0MOV DL,AMOV DH,07FHMOV CX,0MOV AX,0AHINT 33H;軟指針;用字符A作為鼠標(biāo)指針符號(hào);置鼠標(biāo)的顏色;設(shè)置文本鼠標(biāo)指針;置象素位掩碼、圖形指針的設(shè)置設(shè)置鼠標(biāo)軟指針的中斷功能使用方式:DW 16 PMask | dup(?)DW 16 CMask | dup(?);象素位掩碼,PMask可以是CMask;光標(biāo)掩碼,二者緊相鄰MOV AX, DSMOV ES, AXLEA DX, PMask;ES:DX=象素位掩碼的起始地址MOV BX, 0MOV CX, 0;在鼠標(biāo)指針范圍內(nèi),(0,0
42、)點(diǎn)為指示點(diǎn)MOV AX, 09HINT 33H;設(shè)置圖形鼠標(biāo)指針3、鼠標(biāo)功能的應(yīng)用舉例例8.11在屏幕的右上角動(dòng)態(tài)顯示文本鼠標(biāo)的位置,即:鼠標(biāo)的任何移動(dòng)都將馬 上顯示其所處位置,按鼠標(biāo)左鍵結(jié)束程序的運(yùn)行。解:顯示解答例8.12編寫可隨時(shí)修改文本鼠標(biāo)指針符號(hào)的程序,即要求:在程序運(yùn)行過程中, 隨時(shí)在鍵盤上按什么字符,即以該字符為鼠標(biāo)指針符號(hào)。解:顯示解答讀者可把例8.11和8.12結(jié)合在一起,使之:一方面,可動(dòng)態(tài)顯示鼠標(biāo)的位 置,另一方面,也可隨時(shí)修改文本鼠標(biāo)的指針符號(hào)。改變圖形鼠標(biāo)指針是許多計(jì)算機(jī)使用者體現(xiàn)其個(gè)性的方法之一,讀者可參考 例8.12和前面的“圖形指針的設(shè)置”部分的敘述,編寫一個(gè)
43、顯示自己設(shè)計(jì)的鼠 標(biāo)指針的程序。在學(xué)習(xí)了有關(guān)文件操作知識(shí)之后,還可利用現(xiàn)有的鼠標(biāo)指針文件 來顯示鼠標(biāo)指針。目錄和文件的中斷功能中斷21H提供了許多有關(guān)目錄和文件操作的功能,其中常用的功能如下:1、操作目錄的常用功能39H創(chuàng)建目錄3BH設(shè)置當(dāng)前目錄3AH刪除目錄47H讀取當(dāng)前目錄有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 目錄控制功能。2、用文件句柄操作文件的常用功能3CH創(chuàng)建文件4EH查找到第一個(gè)文件3DH打開文件4FH查找下一個(gè)文件3EH關(guān)閉文件56H文件換名3FH讀文件或設(shè)備57H讀取/設(shè)置文件的日期和時(shí)間40H寫文件或設(shè)備5AH創(chuàng)建臨時(shí)文件41H刪除文件5BH創(chuàng)建
44、新文件42H設(shè)置文件指針67H設(shè)置文件句柄數(shù)(最多文件數(shù))43H讀取/設(shè)置文件屬性6CH擴(kuò)展的打開文件功能有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 文件操作功能。3、用FCB操作文件的常用功能0FH打開文件21H隨機(jī)讀10H關(guān)閉文件22H一隨機(jī)寫13H刪除文件23H讀取文件的大小14H一順序讀24H一設(shè)置相對(duì)記錄數(shù)15H順序?qū)?7H隨機(jī)讀塊16H創(chuàng)建文件28H一隨機(jī)寫塊17H文件換名有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 文件操作功能(FCB)和記錄操作功能(FCB)。4、磁盤絕對(duì)讀寫中斷中斷25H磁盤絕 對(duì)讀中斷中斷26H磁盤絕對(duì)寫中斷有
45、關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 其它DOS中斷。5、系統(tǒng)標(biāo)準(zhǔn)設(shè)備的句柄0000H鍵盤0001H屏幕0002H錯(cuò)誤顯示 0003HCOM1(屏幕)0004H打印機(jī)6、目錄、文件功能的應(yīng)用舉例例8.13編寫一個(gè)創(chuàng)建子目錄的程序,具體要求如下:1)、用鍵盤輸入一個(gè)目錄路徑名,若輸入的字符串為空,則程序運(yùn)行結(jié)束;2)、若目錄創(chuàng)建成功,顯示成功信息,否則,顯示創(chuàng)建失敗信息。解:顯示解答例8.14編寫一個(gè)類似TYPE命令的程序,其要求如下:1)、用鍵盤輸入文件名(可包含路徑),若輸入的字符串為空,則程序運(yùn)行 結(jié)束;2)、若輸入的文件存在,則顯示其內(nèi)容,否則,顯示文件不存在
46、的信息。解:顯示解答內(nèi)存管理的中斷功能在C/C+語言環(huán)境中,若事先不知道數(shù)據(jù)的容量,那么,可通過動(dòng)態(tài)申請(qǐng)空 間的方法來解決數(shù)據(jù)的存儲(chǔ)問題,這種動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)可用中斷21H所提供的存儲(chǔ) 管理功能來實(shí)現(xiàn)。中斷21H在內(nèi)存管理方面所提供的主要功能如下:48H分配內(nèi)存塊49H釋放內(nèi)存塊4AH重定義內(nèi)存塊的大小58H讀取/設(shè)置內(nèi)存分配策略,其最基本的分配策略有三種:第一滿 足、最好滿足和最后滿足有關(guān)中斷功能的詳細(xì)描述和調(diào)用參數(shù)在此從略,需要查閱者可參閱附錄3之 內(nèi)存分配功能。有關(guān)存儲(chǔ)分配策略的含義可參閱操作系統(tǒng)課程中“內(nèi)存管理”部分的介 紹。讀取和設(shè)置中斷向量中斷向量是系統(tǒng)用來存放中斷服務(wù)程序或系統(tǒng)參數(shù)的
47、入口地址。在通常情況 下,程序員不需要對(duì)中斷向量表作任何操作,但在開發(fā)程序時(shí),若要為某種特殊 需要而提供新的中斷處理程序時(shí),則其就必須要操作中斷向量表。1、讀取中斷向量(1)、DOS功能調(diào)用的方法DOS提供了用系統(tǒng)調(diào)用的方法來讀取中斷向量,其中斷21H之功能35H就能 讀取指定中斷號(hào)的入口地址。其使用參數(shù)如下:入口參數(shù):AH = 35H, AL=中斷號(hào)出口參數(shù):ES:BX=中斷處理程序的入口地址例8.15用功能調(diào)用的方法把中斷n的入口地址保存到雙字變量OldAddr中。解:OldAddr DDMOV AL, n;這里的n要用具體的中斷號(hào)來定MOV AH, 35HINT 21HMOV word
48、ptr OldAddr, BXMOV W;rd Ptr OldAddr+2,;把其入口地址保存在存儲(chǔ)單元中 ES(2)、直接訪問存儲(chǔ)單元的方法由前面的圖8.2不難看出:中斷向量表是存儲(chǔ)在內(nèi)存的第0段。若中斷號(hào)為 n,那么,其入口地址在表內(nèi)的偏移量為4n。例8.16用直接訪問存儲(chǔ)單元的方法把中斷n的入口地址保存到雙字變量 OldAddr 中。解:OldAddr DDMOV AX, 0HMOV ES, AX;中斷向量表存儲(chǔ)在第0段內(nèi)MOV BX, 4*nMOV AX, ES:BX;讀取中斷入口地址的偏移量MOV word ptr OldAddr, AX;保存中斷入口地址的偏移量MOV AX, ES
49、:BX+2;讀取中斷入口地址的段地址word ptr OldAddr+2,MOV心 p;保存中斷入口地址的段地址ES2、設(shè)置中斷向量(1)、DOS功能調(diào)用的方法中斷21H之功能25H可為指定的中斷號(hào)設(shè)置新的入口地址。其使用方法如下:入口參數(shù):AH=中斷號(hào),DS:DX=中斷處理程序的入口地址出口參數(shù):無例8.17用功能調(diào)用的方法把子程序NewFunc設(shè)置為中斷n的中斷處理程序。解:NewFuncPROCIRET;注意其返回指令NewFuncENDPMOV AX,SEG NewFuncMOV DS,AX;設(shè)置段地址寄存器MOV DX,OFFSET;設(shè)置偏移量NewFuncMOV AL,n;這里的n
50、要用具體的中斷號(hào)來定MOV AH,25HINT 21H(2)、直接訪問存儲(chǔ)單元的方法例8.18用直接訪問存儲(chǔ)單元的方法把子程序NewFunc設(shè)置為中斷n的中斷處理 程序。解:NewFuncPROCIRET;注意其返回指令NewFuncENDPMOV AX, 0HMOV DS, AXMOV BX, 4*nCLIMOV wrd Ptr BX, OFFSET ;設(shè)置中斷處理程序的偏移量 NewFuncMOV WOrd Ptr BX+2,SEG ;設(shè)置中斷處理程序的段地址 NewFuncSTI在上面程序段中,指令CLI是一條值得注意的指令,它用來確保隨后二條MOV 指令被連續(xù)執(zhí)行而不被打斷。這是因?yàn)閳?zhí)
51、行其第一條MOV指令后,原中斷向量表 中的入口地址就被破壞了,這時(shí),該入口地址既不是指向原處理程序,也不指向 新處理程序。如果此刻正巧發(fā)生了該類型的中斷請(qǐng)求,那么,系統(tǒng)將轉(zhuǎn)向一個(gè)非 法的位置。如果程序員能確信此時(shí)不會(huì)發(fā)生該類型的中斷請(qǐng)求,當(dāng)然也就不必插 入關(guān)中斷指令。后面的指令STI是開中斷指令,它允許CPU響應(yīng)其后的中斷請(qǐng)求。3、修改中斷向量的步驟前面,分別介紹了讀取和設(shè)置中斷入口地址的方法。在編程的實(shí)際過程中, 若要修改某個(gè)具體的中斷處理程序時(shí),一般需按下面幾步來完成:1)、讀取指定中斷的中斷處理程序入口地址,并把它保存在存儲(chǔ)單元內(nèi);2)、把用戶編寫的程序段設(shè)置為指定中斷的新處理程序;3)
52、、在用戶程序結(jié)束之前(或不需要新的處理程序時(shí)),把步驟1保存的入口 地址恢復(fù)成處理該中斷的入口地址。程序員按以上三步來編程,可保證:在其程序運(yùn)行過程中,該指定的中斷將 按新的處理程序來處理,程序結(jié)束后,中斷系統(tǒng)又恢復(fù)成原來的處理方式。所以, 這種中斷向量的改變對(duì)其它程序或使用者來說是透明的,當(dāng)然也就不會(huì)影響它們 的正常運(yùn)作。以上三步具體化的形式如下:INTNO EQU 40H;假設(shè)被修改的中斷號(hào)OldAddrDD ?NewFuncPROC;新的中斷處理程序IRETNewFuncENDPMOV AL, INTNOMOV AH, 35HINT 21HMOV word ptr OldAddr, BXMOV word ptr;步驟1:保存原入口地址OldAddr+2, ESMOV DX, OFFSET NewFuncMOV AX, SEG NewFuncMOV DS, AXMOV AL, INTNOMOV AH, 25HINT 21H;步驟2:設(shè)置新的入口地址;用戶編寫的主要程序MOV DX, word ptrMOV DS, word ptrOldAddr+2OldAddr;本指令與上一條指令能交換嗎?MOV AL, INTNOMOV AH, 25H;步驟3:恢復(fù)原入口地址INT 21HEND8.4習(xí)題8.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 租農(nóng)村廠房合同范本
- 付款委托合同范本
- 上半年電工工作總結(jié)
- 三年級(jí)下冊(cè)語文教學(xué)工作計(jì)劃
- 各種工程合同范本
- 人防工程物業(yè)管理合同范例
- 單位簡(jiǎn)易裝修合同范本
- 買房單合同范本
- 化肥質(zhì)保合同范本
- 《輪椅上的霍金》讀書心得體會(huì)
- JJG 1204-2025電子計(jì)價(jià)秤檢定規(guī)程(試行)
- 咨詢公司顧問聘用協(xié)議書
- 認(rèn)養(yǎng)一頭牛-雙寡格局下新品牌如何實(shí)現(xiàn)彎道超車
- 2024年德州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫
- 業(yè)務(wù)約定書第10號(hào):企業(yè)清產(chǎn)核資專項(xiàng)審計(jì)業(yè)務(wù)約定書
- 壓縮空氣氣體管道吹掃、試壓方案
- 《封閉煤場(chǎng)技術(shù)規(guī)程》
- 活動(dòng)供餐合同范例
- 2024-2030年中國江西省能源項(xiàng)目投資風(fēng)險(xiǎn)分析報(bào)告
- 2024年度環(huán)保企業(yè)技術(shù)總監(jiān)聘任協(xié)議書范本3篇
- 大學(xué)生勞動(dòng)實(shí)踐活動(dòng)總結(jié)
評(píng)論
0/150
提交評(píng)論