BIOS和DOS中斷功能調(diào)用-課件_第1頁
BIOS和DOS中斷功能調(diào)用-課件_第2頁
BIOS和DOS中斷功能調(diào)用-課件_第3頁
BIOS和DOS中斷功能調(diào)用-課件_第4頁
BIOS和DOS中斷功能調(diào)用-課件_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第五節(jié) BIOS和DOS中斷功能調(diào)用(教材舊P238、新P239) 一、概述 1. BIOS和DOS中斷子程層次特點2. 中斷類型分類3. 調(diào)用方法二、BIOS功能調(diào)用1設置顯示方式 ( 10H類型,00H功能 )2置光標位置 ( 10H類型,02H功能 )3清屏、清窗口 ( 10H類型,06H或07H功能 )三、 DOS系統(tǒng)功能調(diào)用 ( 21H類型中斷調(diào)用 )1顯示單字符 ( 02H功能 )2顯示字符串 ( 09H功能 )3單字符輸入 ( 01H、07H、08H功能 )4字符串輸入 ( 0AH功能 )5檢測鍵盤狀態(tài)( 0BH功能 ) 6保存中斷向量 ( 35H功能 ) (第六章介紹)7設置中

2、斷向量 ( 25H功能 )1第五節(jié) BIOS和DOS中斷功能調(diào)用1復習內(nèi)容:P339P247(新),P228P246(舊)預內(nèi)容習: P 110P140(新),P106P134(舊)作業(yè):1、預習實驗二其中:任務 1、(2)(4),2必做,任務 1、(1)(3)選做.實驗四 任務1,作為家庭作業(yè),在計算機上調(diào)通后,經(jīng)過教師檢查 簽字2復習內(nèi)容:P339P247(新),P228P246(舊)2編寫完整匯編語言程序,要求上機調(diào)試出來:(1)清屏,在10行5列上顯示“ Hello China!” (2)將0AH功能輸入的字符串, 用09H功能顯示出來。 在DOS下執(zhí)行,從鍵盤輸入123456789回

3、車,屏幕上能顯示Hello World!嗎?為什么?用在DEBUG下查看到的data段的內(nèi)容來說明。 3問題回答下面程序,匯編連接后32編寫完整匯編語言程序,要求上機調(diào)試出來: 在max DB 11,?,4 DUP(?)data SEGMENTstring DB Hello World! ,$data ENDScode SEGMENTASSUME CS:code, DS:datastart: MOV AX, data ; 置緩沖區(qū)地址于DS:DX MOV DS, AX LEA DX, maxMOV AH, 0AH ; 調(diào)用0AH輸入功能INT 21HLEA DX, stringMOV AH,

4、09H ; 調(diào)用09H顯示功能INT 21HMOV AH, 4CHINT 21H ;返回DOScode ENDS END start4max DB 11,?,4 DUP(?)d 第三節(jié) BIOS和DOS中斷功能調(diào)用 (教材舊P238、新P239) 一、概述 二、BIOS功能調(diào)用三、 DOS系統(tǒng)功能調(diào)用 ( 21H類型中斷調(diào)用 )5 第三節(jié) BIOS和DOS中斷功能調(diào)用5一、概述1BIOS 和 DOS 中斷子程層次特點2. 中斷類型分類3. 調(diào)用方法6一、概述61BIOS和DOS中斷子程層次特點用戶程序磁盤管理模塊(DOS內(nèi)核)MSDOS.SYS 系統(tǒng)功能基本輸入/輸出 BIOS 模 塊IO.S

5、YS 設備驅(qū)動ROM BIOS 基本I/O系 統(tǒng) 硬 件裝入命令處理模塊COMMAN D.COM用戶命令DOS系統(tǒng)層次結(jié)構(gòu)71BIOS和DOS中斷子程層次特點用戶程序磁盤管理模塊(D 層次特點: ROM BIOS中的中斷子程 使用IN/OUT指令直接控制外設, 實現(xiàn)與外設之間的輸入/輸出操作, 以軟件形式向其上層提供服務。 IO.SYS中的中斷子程 ( 稱基本輸入/輸出BIOS模塊) 調(diào)用ROM BIOS的基本I/O功能, 向 MSDOS.SYS提供設備驅(qū)動服務。用戶程序磁盤管理模塊(DOS內(nèi)核)MSDOS.SYS 系統(tǒng)功能基本輸入/輸出 BIOS 模 塊IO.SYS 設備驅(qū)動ROM BIOS

6、 基本I/O系 統(tǒng) 硬 件裝入命令處理模塊COMMAN D.COM用戶命令8 層次特點:用戶程序磁盤管理模塊(DOS內(nèi)核)基本輸入 MSDOS.SYS中的中斷子程 ( 稱DOS內(nèi)核模塊 )調(diào)用IO.SYS,實現(xiàn)對外設的控制。與標準外設有兩層隔離 :IO.SYS和ROM BIOS。其中21H類型的中斷子程提供了豐富的系統(tǒng)服務,稱21類型的中斷調(diào)用為DOS系統(tǒng)(功能)調(diào)用。用戶程序磁盤管理模塊(DOS內(nèi)核)MSDOS.SYS 系統(tǒng)功能基本輸入/輸出 BIOS 模 塊IO.SYS 設備驅(qū)動ROM BIOS 基本I/O系 統(tǒng) 硬 件裝入命令處理模塊COMMAN D.COM用戶命令9 MSDOS.SYS

7、中的中斷子程 用戶程序磁盤管理模塊(DO 用戶編程原則盡可能使用DOS的系統(tǒng)功能調(diào)用, 提高程序可移植性。在DOS功能不能實現(xiàn)情況下, 考慮用BIOS功能調(diào)用。在DOS和BIOS的中斷子程 不能解決問題時, 使用IN/OUT指令直接控制硬件。用戶程序磁盤管理模塊(DOS內(nèi)核)MSDOS.SYS 系統(tǒng)功能基本輸入/輸出 BIOS 模 塊IO.SYS 設備驅(qū)動ROM BIOS 基本I/O系 統(tǒng) 硬 件裝入命令處理模塊COMMAN D.COM用戶命令10 用戶編程原則用戶程序磁盤管理模塊(DOS內(nèi)核)基本輸入/輸2. 中斷類型分類 向量表中的中斷類型分為七類: 處理CPU特殊操作( 除0、溢出 )的

8、00H、04H類型。 為DEBUG調(diào)試程序設置的單步( 01H )、斷點( 03H )類型。 處理CPU的NMI引腳信號的02H類型。 非屏蔽硬中斷子程 處理CPU的INTR引腳信號的080FH類型。 可屏蔽類型硬中斷子程 用INT指令調(diào)用的中斷子程 BIOS功能調(diào)用(如101AH)DOS功能調(diào)用 (如 21H)NMIINTR8088112. 中斷類型分類NMIINTR11 保留類型為DOS系統(tǒng)保留 1)指現(xiàn)在未用到,以后系統(tǒng)可能會用到。 2)已用到,但不向用戶公開。為用戶保留 1)被系統(tǒng)子程嵌套調(diào)用了的類型 ( 如1BH、1CH )。 使用戶在系統(tǒng)功能基礎上擴充功能。 2)系統(tǒng)未占用類型 (

9、 如 60H67H )。 非中斷向量類型對應向量表中的4個單元存放的不是中斷向量。 (如1DH、1EH、1FH、41H、46H、22H) 通常是一些參數(shù)表的地址信息.12 保留類型12 中斷向量分配表13 中斷向量分配 調(diào)用方法設置入口參數(shù)在AH設置功能號m執(zhí)行中斷指令INT N分析、應用出口參數(shù)163. 調(diào)用方法設置入口參數(shù)在AH設置功能號m執(zhí)行中斷指令IN例1 單字符顯示功能調(diào)用MOV DL, A ;設置入口參數(shù)MOV AH, 02H ;設置功能號 INT 21H ;執(zhí)行中斷調(diào)用 例2 單字符輸入功能調(diào)用MOV AH, 01H ;設置功能號 INT 21H ;執(zhí)行

10、中斷調(diào)用CMP AL, 0DH ;分析、應用出口參數(shù)JZ exit、17例1 單字符顯示功能調(diào)用17二、BIOS功能調(diào)用 基本輸入/輸出模塊BIOS:實現(xiàn)對輸入/輸出設備的控制,內(nèi)含0 1CH 等類型中斷子程,包括顯示器、磁盤、鍵盤、打印機等標準外設的驅(qū)動程序。 (參看中斷類型分配表) BIOS功能調(diào)用指對BIOS模塊中的中斷子程的調(diào)用。18二、BIOS功能調(diào)用18 有關(guān)顯示器 顯示器通過顯卡(顯示適配器)連接到計算機上。 單色顯示器只能顯示黑白兩色。 彩色顯示器能顯示多種顏色。19 有關(guān)顯示器19 屏幕上各象素的顯示信息,存放在顯示緩沖區(qū)(顯存)中。640KB RAM 基本內(nèi)存0000:00

11、00 0040:0000 0050:0000 0070:0000 A000:0000 B000:0000 C800:0000 F600:0000 FE00:0000 FE00:1FFF顯示緩存區(qū)( 顯存)硬盤驅(qū)動器控制ROM32KB ROM BASIC8KB ROM BIOSIO.SYS模塊COMMAND.COM常駐模塊MSDOS.SYS模塊用戶程序空間COMMAND.COM暫駐模塊256KB ROMDOS工作區(qū)ROM BIOS工作區(qū)128KB RAM 保留區(qū)1KB中斷向量表20 屏幕上各象素的顯示信息,存放在顯示緩沖區(qū)(顯存)中。64 顯示器有兩種顯示方式: 圖形方式:將屏幕劃分為 mn的點

12、陣,在每個點的位置顯示象素,一個點是一個象素。文本方式將屏幕劃分為若干行和列,在每個網(wǎng)格位置上顯示象素,一個字符是一個象素。21 顯示器有兩種顯示方式:圖形方式:文本方式21文本方式將屏幕劃分為 m列和n行 (m n),在每個網(wǎng)格位置上顯示象素,一個字符是一個象素。8025 文本方式A0列0行79列24行BC22文本方式8025 文本方式A640480 圖形方式640 點480點圖形方式:將屏幕劃分為 mn的點陣,在每個點的位置顯示象素,一個點是一個象素。23640480 圖形方式640 點480點圖形方式:在文本方式下,對應屏幕上的每個字符, 在顯示緩沖區(qū)中占用兩個單元:一個存放ASCII碼

13、, 一個存放顯示屬性。41H07H42H07H61H70H62H70H、顯示緩沖區(qū)(顯存)字符A, 黑底白字字符B, 黑底白字字符a, 白底黑字字符b, 白底黑字24在文本方式下,41H07H42H07H61H70H62H70例 10000111B 或 87H 表示黑底白字,閃爍 01110000B 或70H 表示白底黑字,不閃爍16種0000 黑 1000 灰 0010 綠 1010 淺綠0100 紅 1100 淺紅0111 灰白 1111 白BLRGBIRGB閃爍背景前景765432108種000 黑 010 綠 100 紅111 白0 不閃爍1 閃爍屬性字節(jié)的含義:2516種BLRGBI

14、RGB閃爍背景前景76543210屬性字節(jié) 據(jù)顯存大小,可存儲若干頁的字符象素。 例 16KB 顯存能存儲: 8025方式,4頁( 0 3 ), 802524 =16000 4025方式,8頁( 0 7 ), 402528 =1600026 據(jù)顯存大小,可存儲若干頁的字符象素。261設置顯示方式入口參數(shù) AL = 顯示方式值 00 4025 黑白文本方式 01 4025 彩色文本方式 02 8025 黑白文本方式 03 8025 彩色文本方式 04 320320 彩色圖形方式 功能號 AH = 00H類型號 10H出口參數(shù) 無 實現(xiàn)功能 將顯示方式設置為指定形式例 將顯示方式設置為 8025

15、彩色文本方式 MOV AL, 03H MOV AH, 00 INT 10H271設置顯示方式入口參數(shù) AL = 顯示方式值例 2. 清屏、清窗口功能入口參數(shù) AL = 0 CH = 窗口左上角行號 CL =窗口左上角列號 DH = 窗口右下角行號 DL =窗口右下角列號 BH = 窗口屬性功能號 AH = 06H 或 AH = 07H類型號 10H出口參數(shù) 無 實現(xiàn)功能 按給定屬性清除指定的窗口內(nèi)容282. 清屏、清窗口功能入口參數(shù) AL = 028例 清除屏幕顯示,將其屬性置為反白(白底黑字)顯示。MOV AL, 0 ;清屏功能 MOV BH, 70H ;白底黑字 MOV CH, 0 ;左上

16、角 行號MOV CL, 0 ;左上角 列號 MOV DH, 24 ;右下角 行號 MOV DL, 79 ;右下角 列號 MOV AH, 6 ;功能號 INT 10H ;中斷調(diào)用29例 清除屏幕顯示,將其屬性置為反白(白底黑字)顯示。23. 置光標位置 光標控制開始顯示的位置, 計算機有專門的硬件控制光標的顯示大小、位置。 光標只在文本方式中出現(xiàn),在圖形方式下光標消失。0列0行79列24行5列1列1行2行303. 置光標位置0列0行79置光標位置 入口參數(shù) DH = 行號 DL = 列號 BH = 頁號 功能號 AH= 02H 類型號 10H 出口參數(shù) 無 實現(xiàn)功能 將光標設置在指定的位置31置

17、光標位置31例 將光標設置在2行5列的位置MOV DH, 2MOV DL, 5MOV BH, 0MOV AH, 2INT 10H0列0行79列24行5列1列1行2行32例 將光標設置在2行5列的位置三、DOS系統(tǒng)功能調(diào)用 (21H類型中斷調(diào)用)1顯示單字符 ( 02H功能 )2顯示字符串 ( 09H功能 )3單字符輸入 ( 01H、07H、08H功能 )4字符串輸入 ( 0AH功能 )5檢測鍵盤狀態(tài) ( 0BH功能 )6保存中斷向量 ( 35H功能 ) (第六章介紹)7設置中斷向量 ( 25H功能 )33三、DOS系統(tǒng)功能調(diào)用 (21H類型中斷調(diào)用)331. 顯示單字符 ( 02H功能 ) 入

18、口參數(shù) DL = 要顯示字符的ASCII 碼 功能號 AH=02H類型號 INT 21H出口參數(shù) 無實現(xiàn)功能 顯示指定字符,光標隨動。例 顯示字符A MOV DL, A MOV AH, 02H INT 21H341. 顯示單字符 ( 02H功能 )例 例 使光標回到下一行的行首。MOV DL , 0DH ;顯示回車符MOV AH , 02HINT 21HMOV DL , 0AH ;顯示換行符MOV AH , 02HINT 21HH e l l o W o r l d 35例 使光標回到下一行的行首。2. 顯示字符串 ( 09H功能 )入口參數(shù) 定義要顯示的字符串, 字符串尾應為$,作為結(jié)束顯示

19、的標志。 DS : DX = 字符串的首地址功能號 AH = 09 H類型號 21H出口參數(shù) 無實現(xiàn)功能 顯示字符串,遇 $ 停止顯示,光標隨動。362. 顯示字符串 ( 09H功能 )36例 編程顯示字符串 Tsinghua Universitydata SEGMENT ;定義顯示的子符串stri DB Tsinghua University, $data ENDScode SEGMENT ASSUME CS:code, DS:datastart: MOV AX, data ;置緩沖區(qū)地址于DS:DX MOV DS, AX LEA DX, stri MOV AH, 09H ;調(diào)顯示功能 IN

20、T 21H MOV AH, 4CH ;返回DOS INT 21H code ENDS END start37例 編程顯示字符串 Tsinghua Unive 有關(guān)鍵盤 鍵盤通過鍵盤接口電路與計算機連接。 鍵盤上的鍵有三種類型: 字符鍵 AZ, 09等 功能鍵 F1F12, Page Up等 組合控制鍵 Shift, Ctrl, Alt等 鍵盤上的每個鍵都有一個掃描碼。 據(jù)掃描碼可確定操作的是哪個鍵、是按下鍵還是釋放鍵; 掃描碼用一個字節(jié)表示。低7位是掃描碼的數(shù)字編碼, 與鍵盤上的鍵一一對應;最高位D7位表示鍵的操作狀態(tài):當按下鍵時, D7=0 ; 當釋放鍵時, D7=138 有關(guān)鍵盤 鍵盤上的

21、每個鍵都有一個掃描碼。38 鍵盤中斷子程功能(09H類型中斷子程) 從鍵盤接口讀取操作鍵的掃描碼; 將掃描碼轉(zhuǎn)換成字符碼; 大部分鍵的字符碼為ASCII碼, 無ASCII碼鍵(如組合鍵Shift、Ctrl等)的字符碼為0。 將鍵的掃描碼、字符碼存放在鍵盤緩沖區(qū), 供其它有關(guān)鍵盤的中斷子程應用。 鍵盤接口對按下鍵和釋放鍵均向計算機發(fā)出中斷申請, 如果中斷響應條件滿足, CPU轉(zhuǎn)去執(zhí)行鍵盤中斷子程。 鍵盤中斷子程類型號為09H。39 鍵盤中斷子程功能(09H類型中斷子程) 鍵盤接口對按3. 單字符輸入 ( 01H、07H、08H功能) 入口參數(shù) 無 功能號 AH = 01H 類型號 21H 出口參

22、數(shù) AL = 鍵入字符的ASCII碼 實現(xiàn)功能 等待從鍵盤輸入一個字符, 并在屏幕上回顯,光標移動, 檢測Ctrl-Break鍵403. 單字符輸入 ( 01H、07H、08H功能)40例 利用鍵盤輸入的字符產(chǎn)生分支: MOV AH, 1 ;等待從鍵盤輸入 INT 21H CMP AL, Y ;是Y? JZ yes CMP AL, y ;是y? JZ yes no: . . . . . . JMP exit yes: . . . . . . exit: . . . 41例 利用鍵盤輸入的字符產(chǎn)生分支:41例 在中斷向量表中查找從鍵盤輸入的字符, 并將其個數(shù)用二進制形式顯示出來。( scansk

23、ey.asm)code SEGMENT ;代碼段開始 ASSUME CS:code begin: MOV AX, 0000H ;設置查找首地址 MOV DS, AX MOV SI,0000H MOV CX,0400H ;設置查找長度 MOV BX,0 ;計算值初值 MOV AH,01H ;從鍵盤輸入 INT 21H ;輸入關(guān)鍵字 MOV DL,AL ;保存在DL中 next: LODSB ;從串取 CMP AL, DL ;與關(guān)鍵字比較 JNZ point INC BX ;計算值加1 point: LOOP next ;查找結(jié)束? CALL display ;調(diào)用顯示子程 MOV AH,4CH

24、;調(diào)用4CH功能 INT 21H ;返回DOS;用二進制顯示BX內(nèi)容子程 display PROC MOV CX, 16 ;顯示位數(shù) rotate: ROL BX, 1 MOV DL, BL AND DL, 01H ADD DL, 30H MOV AH, 2H INT 21H LOOP rotate RET ;子程返回 display ENDP code ENDS ;代碼段結(jié)束 END begin42例 在中斷向量表中查找從鍵盤輸入的字符,co 入口參數(shù) 無 功能號 AH = 07H類型號 21H出口參數(shù) AL = 鍵入字符的ASCII碼實現(xiàn)功能 等待從鍵盤輸入一個字符, 不在屏幕上回顯, 不

25、檢測Ctrl-Break鍵43 入口參數(shù) 無 43例 用不帶回顯功能輸入密碼時: input: MOV AH, 07H ;等待從鍵盤輸入 INT 21H MOV DI, AL ;存入緩沖區(qū) CMP AL, 0DH ;是回車符? JNZ input ;不是,繼續(xù)輸入 check: 、 、 44例 用不帶回顯功能輸入密碼時:444. 字符串輸入 ( 0AH 功能 ) 入口參數(shù) DS : DX = 緩沖區(qū)的首地址 ( DS :DX ) = 限制最多輸入的字符數(shù) 功能號 AH = 0AH 類型號 21H 出口參數(shù) ( DS : DX+1 ) = 實際鍵入的字符(不含回車符) 從( DS : DX+2

26、)開始順序存放鍵入的字符串, 回車符0DH為串尾最后一字符。 實現(xiàn)功能 等待從鍵盤輸入字符串,并存入設定的緩沖區(qū)內(nèi), 同時回顯字符串,光標隨著移動, 回車符使光標回到行首。 注意事項:應按要求先定義緩沖區(qū),再調(diào)用。454. 字符串輸入 ( 0AH 功能 )45例 應用0AH功能輸入字符串。 data SEGMENT ;定義緩沖區(qū)max DB 11 ;定義限制最多輸入個數(shù)lenth DB ? ;用于存放實際輸入個數(shù)stri DB 11 DUP(?) ;用于存放輸入的字符串data ENDScode SEGMENT ASSUME CS:code, DS:datastart: MOV AX , da

27、ta ;置緩沖區(qū)地址于DS:DX MOV DS , AX LEA DX , max MOV AH , 0AH INT 21H ;調(diào)0A輸入功能 MOX CH , 0 MOV CL , lenth ;取字符串長度放CX中 LEA BX , stri ;取字符串首址于BX中 MOV AL , BX ;應用輸入字符 、 code ENDS 46例 應用0AH功能輸入字符串。 data Sdata SEGMENT ;定義緩沖區(qū)max DB 11 ;定義限制最多輸入個數(shù)lenth DB ? ;用于存放實際輸入個數(shù)stri DB 11 DUP(?) ;用于存放輸入的字符串data ENDS從鍵盤輸入ABC

28、D, 回車,內(nèi)存的存放結(jié)果:0B04414243440D00max07000000000000000080a0b0f12345690c0d0elenthstri地址內(nèi)容DS:DX47data SEGMENT ;定義緩沖如下編程與上例相同: data SEGMENT max DB 11 等價于: DB ? max DB 11, ?, 11 DUP(?) DB 11 DUP(?) data ENDS code SEGMENT ASSUME CS:code, DS:datastart: MOV AX, data ;置緩沖區(qū)地址于DS:DX MOV DS, AX LEA DX, max MOV AH,

29、 0AH ;調(diào)輸入功能 INT 21H MOX CH, 0 MOV CL, max+1 ;取字符串長度放CX中 LEA BX, max+2 ;取字符串首址于BX中 MOV AL, BX ;應用輸入字符 、 code ENDS48如下編程與上例相同: data SEGMENT data SEGMENTmax DB 11 DB ? DB 11 DUP(?)data ENDS從鍵盤輸入ABCD, 回車,內(nèi)存的存放結(jié)果:等價于max DB 11,?,11 DUP(?)0B04414243440D00max07000000000000000080a0b0f12345690c0d0e地址內(nèi)容DS:DX49

30、data SEGMENT等價于0B044142434400AH功能執(zhí)行過程: 若(DS:DX)字節(jié)單元的值為0,則不等待從鍵盤輸入,結(jié)束調(diào)用。 若(DS:DX) 字節(jié)單元的內(nèi)容大于0,則等待從鍵盤輸入, 并把輸入鍵的ASCII碼順序存放在DS : DX+2開始的單元, 按回車鍵表示結(jié)束輸入。 當按下鍵的個數(shù)超過( DS : DX )中值,發(fā)出警告聲 嘟嘟 , 不再接收輸入的數(shù)據(jù), 直到輸入回車鍵。 將實際輸入的字符個數(shù)(不包括回車鍵)填入(DS:DX+1), 結(jié)束調(diào)用。DS:DX00000000000000000000000000000000500AH功能執(zhí)行過程:DS:DX000000000

31、0000000AH功能注意事項: 輸入的字符均帶回顯,且光標隨字符移動。 當輸入回車符結(jié)束時,也回顯回車符。表現(xiàn)為功能調(diào)用結(jié)束后,光標回到了行首。 回車符0DH作為一個輸入的字符存放在字符串尾, 但計數(shù)輸入個數(shù)時,不包括回車鍵。 實際最多能輸入的字符數(shù) = 限制的最多數(shù)-1 (回車符占一個) 執(zhí)行完0AH功能后,DS和DX的值不變, DS:DX仍指向緩沖區(qū)的首地址。 整個緩沖區(qū)的大小應為:限制的最多數(shù) +2 max DB 11, ? , 11 dup (?)510AH功能注意事項:51例 利用DEBUG查看0A功能輸入結(jié)果。data SEGMENT max DB 11, ?, 11 DUP(?

32、) data ENDScode SEGMENT ASSUME CS:code, DS:datastart: MOV AX, data ;置緩沖區(qū)地址于DS:DX MOV DS, AX LEA DX, max MOV AH, 0AH ;調(diào)輸入功能 INT 21H MOV CH, 0 MOV CL, max+1 ;取輸入長度到CX中 MOV AH, 4CH ;返回DOS INT 21Hcode ENDS END start52例 利用DEBUG查看0A功能輸入結(jié)果。data D:MASMDEBUG TEST0a.exe ;裝入執(zhí)行文件-U ;反匯編程序 129E:0000 B89D12 MOV A

33、X , 129D129E:0003 8ED8 MOV DS , AX129E:0005 8D160000 LEA DX , 0000129E:0009 B40A MOV AH , 0A129E:000B CD21 INT 21129E:000D B500 MOV CH , 00129E:000F 8A0E0100 MOV CL , 0001129E:0013 B44C MOV AH , 4C129E:0015 CD21 INT 21 、-D 129D:0 L10 ;查看程序執(zhí)行前緩沖區(qū)內(nèi)容 129D:0000 0B 00 00 00 00 00 00 00-00 00 00 00 00 00

34、00 00 -G 000D ;執(zhí)行程序 Hello ;從鍵盤輸入字符串 Program terminated normally-D 129D:0 L10 ;查看程序執(zhí)行后緩沖區(qū)內(nèi)容 129D:0000 0B 05 48 65 6C 6C 6F 0D-00 00 00 00 00 00 00 00 .Hello-53D:MASMDEBUG TEST0a.exe 思考:1. 若將程序改為如下形式, 設想程序執(zhí)行的結(jié)果。data SEGMENT max DB 100H DUP ( ? ) data ENDScode SEGMENT ASSUME CS:code, DS:datastart: MOV

35、AX, data ;置緩沖區(qū)地址于DS:DX MOV DS, AX LEA DX, max MOV AH, 0AH ;調(diào)輸入功能 INT 21H MOV AH, 4CH ;返回DOS INT 21Hcode ENDS END start54思考:data SEGMENT 54結(jié)果是:不等待輸入,結(jié)束0AH功能調(diào)用。0000000000000000max07000000000000000080a0b0f12345690c0d0e地址內(nèi)容DS:DX注意:由于DS:DX限制輸入最大字符數(shù)為0, 所以不等待輸入, 結(jié)束0AH功能調(diào)用。原因是:55結(jié)果是:不等待輸入,結(jié)束0AH功能調(diào)用。00000000

36、002. 若將程序改為如下形式, 設想程序執(zhí)行的結(jié)果。data SEGMENT max DW 100H,? ,100H DUP ( ? ) ;定義為字類型data ENDScode SEGMENT ASSUME CS:code, DS:datastart: MOV AX, data ;置緩沖區(qū)地址于DS:DX MOV DS, AX LEA DX, max MOV AH, 0AH ;調(diào)輸入功能 INT 21H MOV AH, 4CH ;返回DOS INT 21Hcode ENDS END start562. 若將程序改為如下形式, 設想程序執(zhí)行的結(jié)果。data 結(jié)果是:不等待輸入,結(jié)束0AH功能

37、調(diào)用。0001000000000000max07000000000000000080a0b0f12345690c0d0e地址內(nèi)容DS:DX注意:0AH功能以字節(jié)類型應用DS:DX指向的緩沖區(qū)。 并不隨緩沖區(qū)類型定義的變化而變化。原因是:57結(jié)果是:不等待輸入,結(jié)束0AH功能調(diào)用。0001000000例 編程從鍵盤輸入字符串,給出顯示提示Please input:data SEGMENT stri DB Please Input :,$max DB 11, ?, 11 DUP(?)data ENDScode SEGMENT ASSUME CS:code, DS:datastart: MOV AX

38、, data ;置緩沖區(qū)地址于DS:DX MOV DS, AX LEA DX, stri MOV AH, 09H ;顯示提示 INT 21H LEA DX, max ;等待從鍵盤輸入 MOV AH, 0AH INT 21H MOV AH, 4CH INT 21H code ENDS END start利用DOS 功能調(diào)用,編寫小程序58例 編程從鍵盤輸入字符串,給出顯示提示Please iD:MASMDEBUG e0a09.exe-U ;查看程序129F:0000 B89D12 MOV AX,129D129F:0003 8ED8 MOV DS,AX129F:0005 8D160000 LEA

39、DX ,0000129F:0009 B409 MOV AH ,09129F:000B CD21 INT 21129F:000D 8D160F00 LEA DX ,000F129F:0011 B40A MOV AH , 0A129F:0013 CD21 INT 21129F:0015 B44C MOV AH , 4C129F:0017 CD21 INT 21 -D 129D:0 L20 ;執(zhí)行程序前查看 data段內(nèi)容129D:0000 50 6C 65 61 73 65 20 49-6E 70 75 74 20 3A 24 0B Please Input :$.129D:0010 00 00

40、00 00 00 00 00 00-00 00 00 00 00 00 00 00 -G ;執(zhí)行程序 Please Input :Hello!Program terminated normally-D 129 D:0 L20 ;執(zhí)行程序后查看 data段內(nèi)容 129D:0000 50 6C 65 61 73 65 20 49-6E 70 75 74 20 3A 24 0B Please Input :$.129D:0010 06 48 65 6C 6C 6F 21 0D-00 00 00 00 00 00 00 00 .Hello!-59D:MASMDEBUG e0a09.exe59data段

41、內(nèi)存情況:striPlease Input:$0B06Hello!0D0000000000000000max60data段內(nèi)存情況:striPlease Input:$0B思考:程序中少了一個 $ 符的后果。data SEGMENT stri DB Please Input :max DB 11, ?, 11 DUP(?)data ENDScode SEGMENT ASSUME CS:code, DS:datastart: MOV AX, data ;置緩沖區(qū)地址于DS:DX MOV DS, AX LEA DX, stri MOV AH, 09H ;顯示提示 INT 21H LEA DX, m

42、ax ;等待從鍵盤輸入 MOV AH, 0AH INT 21H MOV AH, 4CH INT 21H code ENDS END start61思考:程序中少了一個 $ 符的后果。data data SEGMENT stri DB Please Input :max DB 11, ?, 11 DUP(?)data ENDSstriPlease Input:0B0000000000000000000000000000000000maxB8A8128ED88D160000B409CD218D160Estart 注意:09H功能只在遇到$符才結(jié)束顯示。62data SEGMENT striPleas5檢測鍵盤狀態(tài) ( 0BH功能 )入口參數(shù) 無功能號 AH= 0BH類型號 21H出口參數(shù) AL= FFH , 表示有鍵按下。 AL= 0 , 表示無鍵按下。實現(xiàn)功能 檢測鍵盤狀態(tài)(通過檢測鍵盤緩沖區(qū)實現(xiàn))635檢測鍵盤狀態(tài) ( 0BH功能 )63例 利用0B功能實現(xiàn)按鍵退出循環(huán)。 、continue: 、 、 、 MOV AH, 0BH ;檢測鍵盤緩沖區(qū)是否有鍵按下 INT 21H CMP AL, 0FFH JNZ continue ;無鍵按下繼續(xù)循環(huán) 、 、 MOV AH, 4CH INT 21H64

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論