新編1632位微型計(jì)算機(jī)原理及應(yīng)用(李繼燦主編)第5章PPT學(xué)習(xí)教案_第1頁(yè)
新編1632位微型計(jì)算機(jī)原理及應(yīng)用(李繼燦主編)第5章PPT學(xué)習(xí)教案_第2頁(yè)
新編1632位微型計(jì)算機(jī)原理及應(yīng)用(李繼燦主編)第5章PPT學(xué)習(xí)教案_第3頁(yè)
新編1632位微型計(jì)算機(jī)原理及應(yīng)用(李繼燦主編)第5章PPT學(xué)習(xí)教案_第4頁(yè)
新編1632位微型計(jì)算機(jī)原理及應(yīng)用(李繼燦主編)第5章PPT學(xué)習(xí)教案_第5頁(yè)
已閱讀5頁(yè),還剩157頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、會(huì)計(jì)學(xué)1新編新編1632位微型計(jì)算機(jī)原理及應(yīng)用位微型計(jì)算機(jī)原理及應(yīng)用(李繼李繼燦主編燦主編)第第5章章 . 486 DATA SEGMENT USE16 N1 DB x x N2 DB x x SUM DB ? DATA ENDS STACK_ SEGMENT STACK STACK USE16 DB 128 DUP (?) STACK_ ENDS 第1頁(yè)/共162頁(yè) BEG: MOV AX, DATA MOV DS, AX MOV AX,STACK_ MOV SS, AX MOV SP, 128 MOV AL,N1 ADD AL,N2 MOV SUM, AL MOV AH, 4CH INT

2、21H CODE ENDS END BEG 可省CODE SEGMENT USE16 ASSUME CS:CODE, DS:DATA ,SS:STACK_第2頁(yè)/共162頁(yè) 說(shuō)明: . EXE文件中堆棧段的設(shè)置 本例以“STACK_”為段名的邏輯段,選用了 “STACK” 鏈接參數(shù),DOS自動(dòng)認(rèn)為“ STACK_”段為堆棧段。 所以, DOS將自動(dòng)給SS:SP賦初值 因此,源程序給SS:SP賦初值的三條語(yǔ)句是多余的。 鏈接程序要求: . EXE文件中的源程序必須有堆棧段, 否則鏈接時(shí)將給出警告信息 Warning no stack segment 但這不代表源程序有錯(cuò),僅僅是警告而已第3頁(yè)/共

3、162頁(yè) 如果源程序中不設(shè)置堆棧段(在鏈接時(shí),會(huì)給出錯(cuò)誤 信息), DOS將自動(dòng)給程序分配最少128 字節(jié)的堆棧 區(qū),故源程序中,如果沒(méi)有大量數(shù)據(jù)壓棧的話,可以不 設(shè)置堆棧段,從而簡(jiǎn)化程序。二 . COM文件的編程格式 1. 匯編語(yǔ)言規(guī)定: COM文件的源程序只能有一個(gè)段: 代碼段, 不允許 有堆棧段 在代碼段偏移地址=100H處, 必須是程序的啟動(dòng)指令 程序中使用的數(shù)據(jù)可以放在代碼段的開(kāi)始或結(jié)尾 第4頁(yè)/共162頁(yè) . 486 . 486CODE SEGMENT USE16 CODE SEGMENT USE16 ASSUME CS: CODE ASSUME CS: CODE ORG 100H

4、 ORG 100HBEG: JMP START BEG: MOV AL, N1N1 DB XX ADD AL, N2 N2 DB XX MOV SUM, ALSUM DB ? MOV AH, 4CHSTART: MOV AL, N1 INT 21H ADD AL, N2 N1 DB XX MOV SUM, AL N2 DB XX MOV AH, 4CH SUM DB ? INT 21H CODE ENDS CODE ENDS END BEG END BEG2. 例: 上例, 寫成COM格式源程序第5頁(yè)/共162頁(yè)3. COM文件的生成 設(shè)上例的文件名為 N1ADDN2. ASM 編輯生成 N1

5、ADDN2. ASM 調(diào)用 TASM. EXE 生成 N1ADDN2. OBJ TASM N1ADDN2 調(diào)用 TLINK. EXE 生成 N1ADDN2. COM TLINK N1ADDN2 / t 注意:鏈接參數(shù)為小寫字母 t 第6頁(yè)/共162頁(yè)三. EXE 文件、COM文件的內(nèi)存映像INT 20H.數(shù)據(jù)段代碼段堆棧段DS=ESCS:IPSS:SP PSP用戶程序EXE文件內(nèi)存映像1.EXE文件的內(nèi)存映像 DOS把EXE文件調(diào)入內(nèi)存之后,自動(dòng)在目標(biāo)程序上方(低地址處)生成一個(gè)有256字節(jié)的數(shù)據(jù)塊程序段前綴(PSP) DOS令DS=ES=PSP段基址,即DS用戶數(shù)據(jù)段段基址, ES用戶附加段

6、段基址 DOS令CS:IP=代碼段啟動(dòng)指令的邏輯地址第7頁(yè)/共162頁(yè)三. EXE 文件、COM文件的內(nèi)存映像INT 20H.數(shù)據(jù)段代碼段堆棧段DS=ESCS:IPSS:SP PSP用戶程序EXE文件內(nèi)存映像1.EXE文件的內(nèi)存映像 DOS令SS:SP=用戶堆棧段(如果有堆棧段的話)棧頂?shù)倪壿嫷刂?所以: 用戶程序必須給DS賦值,使DS=用戶數(shù)據(jù)段段基址;用戶程序必須給ES賦值,使ES=用戶附加段段基址FS=GS=0,如果用戶程序使用了FS、GS附加段,則必須給FS、GS賦初值第8頁(yè)/共162頁(yè)三. EXE 文件、COM文件的內(nèi)存映像INT 20H.代碼段堆棧段 00 H00 HCS=DS=E

7、S=SSIP=100HSPPSP64K-256COM文件內(nèi)存映像2. COM文件內(nèi)存映像COM文件調(diào)入內(nèi)存后,DOS也在其上方生成一個(gè)PSP CS=DS=SS=ES=PSP段基址,即用戶程序的代碼段、數(shù)據(jù)段、ES附加段和堆棧區(qū)都在一個(gè)64k的邏輯段中 DOS自動(dòng)使IP=100H,自動(dòng)執(zhí)行偏移地址為100H處的那條指令第9頁(yè)/共162頁(yè)三. EXE 文件、COM文件的內(nèi)存映像INT 20H.代碼段堆棧段 00 H00 HCS=DS=ES=SSIP=100HSPPSP64K-256COM文件內(nèi)存映像2. COM文件內(nèi)存映像DOS自動(dòng)使S P = F F F E H , 且SS:SP=SS:SP+1

8、=0,這就意味在COM文件中代碼段以下,FFFEH以上這一片存儲(chǔ)單元都是用戶的堆棧區(qū) FS=GS=0第10頁(yè)/共162頁(yè)四.程序段前綴 PSP PSP是一個(gè)有256字節(jié)的數(shù)據(jù)塊,由DOS在裝載可執(zhí)行文件時(shí)自動(dòng)生成。DOS通過(guò)PSP向用戶程序傳遞數(shù)據(jù),PSP是程序運(yùn)行不可缺少的部分 每一個(gè)可執(zhí)行文件都伴隨有自己的PSP五. 返回DOS的基本方法 對(duì)于EXE文件和COM文件,返回DOS最常用的方法 是調(diào)用“INT 21H ”的4CH功能。除此之外: 1.對(duì)于COM文件還有以下3種方法可以返回DOS,即: 直接執(zhí)行INT 20H;第11頁(yè)/共162頁(yè) 調(diào)用INT 21H的0號(hào)功能; 執(zhí)行RET指令。

9、如果此時(shí)SP仍然等于FFFEH的話 (程序中規(guī)范的使用堆棧,在執(zhí)行RET之前把進(jìn)棧的 數(shù)據(jù)全部彈出,則SP必然等于FFFEH),CPU將無(wú)條件 轉(zhuǎn)入PSP的首單元,執(zhí)行那里的INT 20H,返回DOS。2. 對(duì)于EXE文件的編程格式,還有一種返回DOS的方法, 就是在需要返回DOS的時(shí)候,設(shè)法使CPU轉(zhuǎn)到PSP首 單元,執(zhí)行那里的INT 20指令。為此,源程序必須采取 下面的3項(xiàng)措施,缺一不可: 把代碼段包含在一個(gè)遠(yuǎn)過(guò)程之中; 在給DS賦初值之前,用下列3條指令把PSP首單元的 物理地址壓入棧頂,即: 第12頁(yè)/共162頁(yè) PUSH DS MOV AX, 0 PUSH AX 在采取了以上兩條措

10、施之后,程序在需要返回DOS的地 方執(zhí)行一條RET指令即可返回DOS。因?yàn)檫@條RET指令 是遠(yuǎn)過(guò)程中的返回指令,它將從棧頂彈出4個(gè)字節(jié),即把 PSP首單元的物理地址反彈到CS:IP之中,從而使CPU轉(zhuǎn) 移到PSP首單元,執(zhí)行那里的INT 20H,再返回DOS。 綜上所述,雖然返回DOS有好幾種方法,但是調(diào)用 INT 21H 的4CH功能,是返回DOS的最常用的方法,它的 優(yōu)點(diǎn)是簡(jiǎn)單、通用,而且有利于組織批處理文件。第13頁(yè)/共162頁(yè)BIOS/DOS調(diào)用模式: MOV AH,功能號(hào) 設(shè)置入口參數(shù) INT n 分析出口參數(shù)BIOS/DOS功能調(diào)用子程序調(diào)用結(jié)束后一般都有出口參數(shù),這些出口參數(shù)常放

11、在寄存器中,通過(guò)出口參數(shù)可以知道功能調(diào)用的成功與否。其中n值因子程序不同而可能不同,比如:ROM BIOS有n=51FH,DOS有n=20H,21H,232AH,2EH,2FH,33H和67H等幾種情況。有的n只對(duì)應(yīng)一個(gè)子程序,有的n對(duì)應(yīng)很多子程序,第14頁(yè)/共162頁(yè).2 DOS系統(tǒng)I/O功能調(diào)用 在DOS功能子程序調(diào)用中,我們把通過(guò)INT21H來(lái)實(shí)現(xiàn)的子程序調(diào)用成為DOS系統(tǒng)功能調(diào)用。第15頁(yè)/共162頁(yè)調(diào)用模式: MOV AH,功能號(hào) 設(shè)置入口參數(shù) INT 21H 分析出口參數(shù)AH=?執(zhí)行1#子程序執(zhí)行2#子程序IRET21H型中斷服務(wù)程序=1=2第16頁(yè)/共162頁(yè)功能號(hào)01H 等待鍵

12、入一個(gè)字符,有回顯,響應(yīng)Ctrl_C 入口參數(shù): 無(wú)。 出口參數(shù): AL=按鍵的ASC碼,若AL=0,表明按鍵是功 能鍵、光標(biāo)鍵,需再次調(diào)用此功能,才能返回按鍵的擴(kuò) 展碼。第17頁(yè)/共162頁(yè)功能號(hào)02H 顯示一個(gè)字符, 響應(yīng)Ctrl_C 入口參數(shù): DL=待顯字符的ASC碼。 出口參數(shù):無(wú)。 本功能在屏幕的當(dāng)前位置顯示一個(gè)字符,光標(biāo)右移一 格,如果是在一行末尾顯示字符,則光標(biāo)返回下一行的開(kāi) 始格。如果是在屏幕的右下角顯示字符,光標(biāo)返回時(shí)屏 幕 要上滾一行。試驗(yàn)表明,該項(xiàng)功能要破壞AL寄存器的 內(nèi)容。 功能號(hào)07H 等待鍵入一個(gè)字符,無(wú)回顯,不響應(yīng)Ctrl_C。 入口參數(shù):無(wú)。 出口參數(shù): A

13、L=按鍵的ASC碼,若AL,需再次調(diào)用 該功能才能在AL中得到按鍵的擴(kuò)展碼。第18頁(yè)/共162頁(yè)功能號(hào)09H 顯示字符串,響應(yīng)Ctrl_C。 入口參數(shù): DS:DX=字符串首地址,字符串必須以$ (即ASC碼24H)為結(jié)束標(biāo)志。 出口參數(shù): 無(wú)。 該項(xiàng)功能從屏幕當(dāng)前位置開(kāi)始,顯示字符串,遇到結(jié)束標(biāo)志$時(shí)停止,$字符并不顯示。實(shí)驗(yàn)表明,9號(hào)功能也破壞AL寄存器的內(nèi)容。 功能號(hào)08H 等待鍵入一個(gè)字符,無(wú)回顯,響應(yīng)Ctrl_C。 入口參數(shù): 無(wú)。 出口參數(shù): AL=按鍵的ASC碼,若AL0,需再次調(diào)用 該功能才能在AL中得到按鍵的擴(kuò)展碼。第19頁(yè)/共162頁(yè)功能號(hào)0AH 等待鍵入一串字符,送用戶程

14、序數(shù)據(jù)緩沖區(qū) 入口參數(shù)、出口參數(shù)如圖所示。程序員預(yù)置可容納的字符個(gè)數(shù)(包括回車鍵)0AH功能寫入實(shí)際接收的字符個(gè)數(shù) (不包括回車鍵)數(shù)據(jù)緩沖區(qū) BUF+0+1+2.+n鍵入字符串的實(shí)際存儲(chǔ)區(qū)域第20頁(yè)/共162頁(yè) 0AH要求鍵入的字符串以“回車”作為結(jié)束標(biāo)志,換句話說(shuō),按下回車鍵后,此功能調(diào)用結(jié)束,光標(biāo)返回當(dāng)前行始格?!盎剀嚒狈粼诰彌_區(qū)當(dāng)中。 對(duì)數(shù)據(jù)緩沖區(qū)的格式有如下要求: 緩沖區(qū)要設(shè)置在用戶程序數(shù)據(jù)段,調(diào)用前,緩沖區(qū)首址偏移量應(yīng)賦給DX寄存器。 緩沖區(qū)首單元應(yīng)預(yù)置“允許接受的字符個(gè)數(shù)”(包括回車符在內(nèi))。 用戶鍵入回車后,由0AH功能把實(shí)際鍵入的字符個(gè)數(shù) (不包括回車符)寫入BUF+1單元

15、。 鍵入的字符串從BUF+2單元開(kāi)始依次存放。 因此,緩沖區(qū)的容量要大于或等于鍵入串的長(zhǎng)度+2(注意:鍵入的字符串長(zhǎng)度應(yīng)包括回車符) 。 緩沖區(qū)不接受超長(zhǎng)字符,并發(fā)出聲響以示警告 第21頁(yè)/共162頁(yè) 0AH在接收字符的過(guò)程中,有回顯,響應(yīng)Ctrl_C,按下退 格鍵可刪除屏幕及緩沖區(qū)中的當(dāng)前字符。 下面的程序段給出了0AH功能調(diào)用的示范,它允許用戶 鍵入15個(gè)字符(包括回車鍵)。 假設(shè) 數(shù)據(jù)段 BUF DB 15 DB ? DB 15 DUP(?) 代碼段 . MOV AH, 0AH MOV DX, OFFSET BUF INT 21H . 第22頁(yè)/共162頁(yè)功能號(hào)0CH清除鍵盤緩沖區(qū),然后

16、調(diào)用由AL指定的功能。 入口參數(shù): AL允許是: 01H 鍵入一個(gè)字符,有回顯,響應(yīng)Ctrl_C。 06H 字符 I/O。 07H 鍵入一個(gè)字符,無(wú)回顯,不響應(yīng)Ctrl_C。 08H 鍵入一個(gè)字符,無(wú)回顯,響應(yīng)Ctrl_C。 0AH 鍵入一串字符,寫入用戶數(shù)據(jù)區(qū)。 其他入口參數(shù)應(yīng)根據(jù)相關(guān)的功能,另行設(shè)置。 第23頁(yè)/共162頁(yè)功能號(hào)4CH 該功能是指,終止當(dāng)前程序的運(yùn)行,并把控制權(quán)交給調(diào)用它的程序。由被終止程序打開(kāi)的全部文件都被關(guān)閉,該項(xiàng)功能還把程序占用的內(nèi)存空間交還給DOS另行分配。該項(xiàng)功能允許被終止的程序傳送一個(gè)“返回碼”給調(diào)用它的程序。假若被終止的程序是由DOS 命令調(diào)入的,那么返回碼可

17、以被DOS批處理命令中的“ IF ERRORLEVEL ”子命令識(shí)別。 入口參數(shù): AL=返回碼(或者不設(shè)置)。 出口參數(shù): 無(wú)。 說(shuō)明:當(dāng)用戶程序執(zhí)行1,2,8,9,0AH,0BH,OCH功能調(diào)用 時(shí),如果鍵入Ctrl_C或者Ctrl_Break,DOS將自動(dòng)調(diào)用INT 23H中斷處理程序,從而強(qiáng)行使用戶程序中斷,我們稱 為響應(yīng)Ctrl_C。第24頁(yè)/共162頁(yè) 例: 人機(jī)會(huì)話程序。 問(wèn)題: 如何設(shè)置程序運(yùn)行所需的數(shù)據(jù)?有以下幾種方法數(shù)據(jù)設(shè)置在程序的數(shù)據(jù)段程序運(yùn)行時(shí)通過(guò)人機(jī)會(huì)話臨時(shí)鍵入程序裝入時(shí)通過(guò)命令行參數(shù)給出 本例學(xué)習(xí)前兩種方法,并以此學(xué)習(xí)DOS功能調(diào)用。Li mai?(Y/N) Wha

18、t is your name? 1.會(huì)話內(nèi)容及設(shè)計(jì)思路Li nai ;前者是程序給出的詢問(wèn)信息, 后者是用戶鍵入的回答N ;程序復(fù)制的姓名和回答提示Li mai ;再次問(wèn)答Li nai?(Y/N)What is your name?Y第25頁(yè)/共162頁(yè)2. 框圖:顯示詢問(wèn)信息等待鍵入姓名串復(fù)制姓名串等待用戶認(rèn)可Y/NY 返回DOS9#功能0AH#功能9#1#N第26頁(yè)/共162頁(yè) DATA SEGMENT USE16 MESG1 DB 0DH,0AH DB What is your name ?$ MESG2 DB ?(Y/N)$ BUF DB 30 DB ? DB 30 DUP(? ) D

19、ATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DA:DATA BEG: MOV AX,DATA MOV DS,AX AGAIN: MOV AH,9 MOV DX,OFFSET MESG1 INT 21H ;詢問(wèn)姓名 MOV AH,0AH MOV DX,OFFSET BUF INT 21H ;接收鍵入字符串 MOV BL,BUF+1 MOV BH,0 . 486第27頁(yè)/共162頁(yè) ;實(shí)際鍵入的字符個(gè)數(shù)BX MOV SI,OFFSET BUF+2 MOV BYTE PTRBX+SI,$ ;用 $作為串結(jié)束符 MOV AH,2 MOVDL,0AH INT 2

20、1H ;光標(biāo)下移一行 MOV AH,9 MOV DX,OFFSET BUF+2 INT 21H ;復(fù)制鍵入的字符串 MOV AH,9 MOV DX,OFFSET MESG2 INT 21H ;給出認(rèn)可信息 MOV AH,1 INT 21H ;等待鍵入 CMP AL,Y;比較 JNE AGAIN MOV AH,4CH INT 21H ;返回 DOSCODE ENDS END BEG 第28頁(yè)/共162頁(yè).3 BIOS鍵盤輸入功能調(diào)用主板EPROM中固化有基本I/O系統(tǒng)程序BIOS,它是最接近硬件的驅(qū)動(dòng)程序,BIOS中的許多子程序可被用戶程序調(diào)用,調(diào)用這些子程序稱為BIOS功能調(diào)用。第29頁(yè)/共1

21、62頁(yè)調(diào)用模式: MOV AH,功能號(hào) 設(shè)置入口參數(shù) INT 16H 分析出口參數(shù)BIOS常用的鍵盤輸入功能調(diào)用如下:(調(diào)用指令I(lǐng)NT 16H)功能號(hào)00H讀取鍵入的一個(gè)字符,無(wú)回顯,響應(yīng)Ctrl_C, 無(wú)鍵入則等待。 入口參數(shù): 無(wú)。 出口參數(shù): AL=鍵入字符的ASCII碼. 若AL=0,則AH=輸入鍵的擴(kuò)展碼。第30頁(yè)/共162頁(yè)功能號(hào)01H 查詢鍵盤緩沖區(qū)。 入口參數(shù): 無(wú)。 出口參數(shù): Z標(biāo)志=0,表示有鍵入,此時(shí)AL=鍵入字符的碼, AH=鍵入字符的擴(kuò)展碼。 注意: 該功能調(diào)用結(jié)束后,鍵代碼仍留在鍵盤緩沖區(qū)中。 Z標(biāo)志=1,表示無(wú)鍵入。第31頁(yè)/共162頁(yè) 功能號(hào)02H 讀取當(dāng)前轉(zhuǎn)

22、換鍵狀態(tài)。 入口參數(shù): 無(wú)。 出口參數(shù): AL=鍵盤狀態(tài)字。狀態(tài)字各位定義如下: AL7位置1 表示Insert鍵有效(被奇數(shù)次按下)。 AL6位置1 表示Caps Lock鍵有效(相應(yīng)的指示燈亮)。 AL5位置1 表示Num Lock鍵有效(相應(yīng)的指示燈亮)。 AL4位置1 表示Scroll Lock鍵有效(相應(yīng)的指示燈亮)。 AL3位置1 表示按下了Alt鍵。 AL2位置1 表示按下了Ctrl鍵。 AL1位置1 表示按下了左Shift鍵。 AL0位置1 表示按下了右Shift鍵。第32頁(yè)/共162頁(yè) 功能號(hào)10H 讀擴(kuò)展鍵盤,無(wú)回顯,響應(yīng)Ctrl_C。 入口參數(shù): 無(wú)。 出口參數(shù): AL=

23、鍵入字符的ASC碼, 若AL=0,則AH=鍵入字符的擴(kuò)展碼。 功能號(hào)11H 查詢擴(kuò)展鍵盤緩沖區(qū)。 入口參數(shù): 無(wú)。 出口參數(shù): Z標(biāo)志=0,表示有鍵入,此時(shí)AL=鍵入字符的ASC碼, AH=鍵入字符的擴(kuò)展碼。 注意: 該功能調(diào)用結(jié)束后,鍵代碼仍留在鍵盤緩沖區(qū)中。 Z標(biāo)志=1,表示無(wú)鍵入。 第33頁(yè)/共162頁(yè)功能號(hào)12H讀取擴(kuò)展鍵盤的轉(zhuǎn)換鍵狀態(tài)。 入口參數(shù): 無(wú)。 出口參數(shù): AL=擴(kuò)展鍵盤狀態(tài)字, AL7 AL0的置位條 件同功能號(hào)02H。 例如: SCAN: MOV AH ,1 INT 16H JZ SCAN MOV AH,0 INT 16H ;按鍵的鍵代碼AL第34頁(yè)/共162頁(yè) .4

24、CRT顯示器與BIOS文本顯示功能調(diào)用 顯示器是輸出設(shè)備,顯示適配器是CRT與主機(jī)的接口電路,CRT和CRT適配器共同組成了顯示系統(tǒng) 80列25行40列25行 1.顯示器工作方式 黑白/彩色文本方式 黑白/彩色圖形方式 文本方式: 顯示數(shù)字 ,字符 圖形方式: 顯示點(diǎn),由點(diǎn)(像點(diǎn))組成圖形第35頁(yè)/共162頁(yè)2.顯示存儲(chǔ)區(qū)與顯示屏 單顯8025文本方式 彩顯8025文本方式0頁(yè)1頁(yè)2頁(yè)3頁(yè)B000 B800 B900 BA00 BB00ASC碼屬性.ASC碼屬性:0000:0001:0F9E:0F9F079列024行顯示存儲(chǔ)區(qū)與屏幕字符的對(duì)應(yīng)關(guān)系第36頁(yè)/共162頁(yè) 顯示存儲(chǔ)區(qū)是系統(tǒng)RAM的一

25、部分,其中存放待顯字符 的 ASC碼和它的屬性字。 工作在8025文本方式下,屏幕被“劃分”為2000個(gè)“方 格”,每一個(gè)方格顯示一個(gè)“點(diǎn)陣字符”,列號(hào)0 79,行號(hào) 0 24。 顯示器一個(gè)小方格對(duì)應(yīng)顯示存儲(chǔ)區(qū)的兩個(gè)單元,所以 2000個(gè)方格對(duì)應(yīng)4000個(gè)單元。 彩顯適配器,文本顯示存儲(chǔ)區(qū)有16K,分為4頁(yè)(0 3) 段基址為 B800H,B900H,BA00H,BB00H。第37頁(yè)/共162頁(yè)3.當(dāng)前頁(yè) 系統(tǒng)啟動(dòng)時(shí),BIOS自動(dòng)完成顯示適配器的初始化,顯示器自動(dòng)工作在8025黑白文本方式,并且默認(rèn)第0頁(yè)為“當(dāng)前頁(yè)”。CRT控制器按50屏/秒的速度從0頁(yè) 顯示區(qū)取字符屏幕顯示,重復(fù)不斷,故能收

26、到穩(wěn)定顯 示的效果。 調(diào)用5#功能,可以選擇其他顯示存儲(chǔ)區(qū)(1 3)為“當(dāng)前頁(yè)”。第38頁(yè)/共162頁(yè) D7 D6 D5 D4 D3 D2 D1 D00:正常顯示1:閃爍顯示(背景閃爍) 背景色前景色共8種背景色 16種前景色顏色的編碼,請(qǐng)見(jiàn)教材。如:藍(lán)底白字,屬性字為1FH, 黑底紅字,屬性字為04H。4.文本方式屬性字 彩顯屬性字:第39頁(yè)/共162頁(yè)5. 屏顯的編程方法 DOS功能調(diào)用(如:2#,9#) BIOS功能調(diào)用(0EH#,13H#) 直接對(duì)顯示存儲(chǔ)區(qū)進(jìn)行寫操作 6. BIOS屏顯功能調(diào)用的調(diào)用模式 MOV AH, 功能號(hào) 預(yù)置入口參數(shù) INT 10H 分析出口參數(shù)第40頁(yè)/共1

27、62頁(yè) 7.文本方式BIOS屏顯子功能 調(diào)用指令I(lǐng)NT 10H。 功能號(hào)00H 設(shè)置屏幕顯示方式(兼有清屏功能) 入口參數(shù): AL=0 4025 黑白文本方式 AL=1 4025 彩色文本方式 AL=2 8025 黑白文本方式 AL=3 8025 彩色文本方式 出口參數(shù): 無(wú)。第41頁(yè)/共162頁(yè) 功能號(hào)02H 預(yù)置光標(biāo)位置。 入口參數(shù): BH=顯示頁(yè)號(hào),DH=行號(hào),DL=列號(hào)。 出口參數(shù): 無(wú)。 功能號(hào)05H 設(shè)置當(dāng)前顯示頁(yè)。 入口參數(shù): AL=顯示存儲(chǔ)器頁(yè)號(hào)(在80 列方式中為03)。 出口參數(shù): 在屏幕上顯示出指定顯示頁(yè)的字符(只對(duì)文 本方式有效)。第42頁(yè)/共162頁(yè) 功能號(hào)06H 窗

28、口上滾。 入口參數(shù): AL=窗口上滾的行數(shù), BH=底部空白行屬性字, CH、CL=窗口左上角的行、列號(hào), DH、DL =窗口右下角的行、列號(hào)。 出口參數(shù): 無(wú)。說(shuō)明: 該功能允許在屏幕上定義一個(gè)窗口,并使窗口信息上 滾AL行。 窗口是屏幕上一個(gè)局部的顯示框,窗口上滾一行,即:窗 口頂部信息移出窗口之外而消失,窗口底部自動(dòng)留出一 行空白,底部空白行的屬性由BH中屬性字決定。 若AL =0,則窗口信息全部移出。第43頁(yè)/共162頁(yè)功能號(hào)0EH 顯示一個(gè)字符。 入口參數(shù): AL=待顯字符的ASC碼。 出口參數(shù): 無(wú)。 說(shuō)明: 該功能在光標(biāo)的當(dāng)前位置顯示一個(gè)字符,隨后光標(biāo) 前進(jìn)一格,滿一行后自動(dòng)換行

29、,滿一頁(yè)則整屏信息上滾一 行。與DOS系統(tǒng)的2號(hào)功能調(diào)用具有相同的效果。功能號(hào)13H 顯示字符串。 入口參數(shù): AL=03, BH=顯示頁(yè)號(hào), BL=屬性字(當(dāng)AL=0,1時(shí)有效), CX=串長(zhǎng)度, DH,DL=字符串顯示的起始行、列號(hào), ES:BP=待顯字符串首地址。 出口參數(shù): 無(wú)。 第44頁(yè)/共162頁(yè)說(shuō)明: 僅286以上微機(jī)BIOS有此功能,該功能從屏幕的指定 位置開(kāi)始顯示一串彩色字符。 待顯字符串需放在附加段,首地址偏移量需寫入BP寄 存器 。 AL=0表示: 待顯字符串中僅包含字符的ASC碼,串中 各字符的屬性由BL中的屬性字決定,串顯示結(jié)束后,光 標(biāo)返回到調(diào)用前的位置。 AL=1

30、表示: 待顯字符串中僅包含字符的ASC碼,串中 各字符的屬性由BL中的屬性字決定,串顯示結(jié)束后,光 標(biāo)停留在字符串的末尾。第45頁(yè)/共162頁(yè) AL=2表示: 待顯字符串中包含有各個(gè)字符的ASC碼 和屬性字,格式為ASC碼,屬性, , ASC碼,屬性。 串顯示結(jié)束后,光標(biāo)返回到調(diào)用前的位置。 AL=3表示: 待顯字符串中包含有各個(gè)字符的ASC碼 和屬性字,格式同上,串顯示結(jié)束后,光標(biāo)停留在字符串 的末尾。 當(dāng)AL選擇2或3的時(shí)候,CX中的串長(zhǎng)度不包括各字符的 屬性字節(jié)。 8.什么是“窗口上滾”? 窗口:屏幕上任意位置的一個(gè)巨型區(qū)域稱為一個(gè)“窗口” 號(hào)功能可以在屏幕上定義一個(gè)窗口,并使窗口中 的

31、信息向上“平移”若干行,這稱為“窗口上滾”,上滾后頂 部行信息移出窗口而消失,底部留出一空白行,空白行的 屬性可由用戶選擇。第46頁(yè)/共162頁(yè) 注意:13H功能是唯一能顯示彩色字符的子功能 例:在屏幕左上角顯示HELLO 黑底灰白字符 在屏幕中央顯示 I AM A STUDENT 紅底白字思路: 顯示HELLO,用DOS功能#要求待顯字符串放在數(shù)據(jù)段,串尾用$作結(jié)束符 顯示I AM A STUDENT,用 BIOS 13H 功能它要求待顯字符串在附加段 這意味著源程序至少要有三個(gè)邏輯段,我們令數(shù)據(jù) 段與附加段“重疊”,這樣源程序僅設(shè)置兩個(gè)邏輯段 即可。第47頁(yè)/共162頁(yè) . 486DATA

32、 SEGMENT USE16MESG1 DB HELLO $MESG2 DB I AM A STUDENTLL = $MESG2DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE ASSUME DS:DATA ASSUME ES:DATA BEG: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, 0003H INT 10H MOV AH, 9 MOV DX,OFFSET MESG1 INT 21H MOV AX, 1301H MOV BH, 0 MOV BL, 01001111B MOV CX, LL MOV DH,12

33、MOV DL, (80-LL)/2 MOV BP, OFFSET MESG2 INT 10H MOV AH, 4CH INT 21H CODE ENDS END BEG 第48頁(yè)/共162頁(yè)5.5 分支程序例. 二進(jìn)制數(shù)顯示 將BX寄存器中的內(nèi)容以二進(jìn)制數(shù)格式屏顯 DOS功能調(diào)用 BIOS功能調(diào)用:(本例令BX=5678H)第49頁(yè)/共162頁(yè)1數(shù)BX,16次CXC標(biāo)=?1AL調(diào)BIOS.0EHCX-1CXCX=00ALBX左移一位0NY返DOS第50頁(yè)/共162頁(yè)解: 486CODE SEGMENT USE16 ASSUME CS:CODE BEG: MOV BX,5678H MOV CX,

34、16 LAST: MOV AL,0 ROL BX,1 JNC NEXT MOV AL,1 NEXT: MOV AH,0EH INT 10H LOOP LAST MOV AH,4CH INT 21H CODE ENDS END BEG ADC AL,0 第51頁(yè)/共162頁(yè) 數(shù)軸: N1 (800) N2 (900)例. 復(fù)合分支舉例(書例自學(xué))某科室9人,統(tǒng)計(jì)月收入在800900間的人數(shù),并用十進(jìn)制數(shù)顯示。解:月收入是無(wú)符號(hào)數(shù),對(duì)一批數(shù)處理應(yīng)該用間址。第52頁(yè)/共162頁(yè)解: 486DATA SEGMENT USE16NUM DW XX,XXDATA ENDSCODE SEGMENT USE1

35、6 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV BX,OFFSET NUM MOV CL,9 MOV DL,0LAST: CMP WORD PTR BX,800 JC NEXT ;900轉(zhuǎn) INC DLNEXT: INC BX INC BX DEC CL JNZ LAST ADD DL,30H ;DL=09ASC碼 MOV AH,2 INT 21H MOV AH,4CH INT 21HCODE ENDS END BEG 第53頁(yè)/共162頁(yè)例.多分支段內(nèi)轉(zhuǎn)移要求:鍵入0,轉(zhuǎn)P0程序段 鍵入1,轉(zhuǎn)P1程序段 鍵入9,轉(zhuǎn)P9程序段思路:

36、用比較指令配合直接轉(zhuǎn)移指令實(shí)現(xiàn) CMP 鍵入字符,0 JE P0 CMP 鍵入字符,1 JE P1 用轉(zhuǎn)移地址表配合間接轉(zhuǎn)移指令實(shí)現(xiàn)第54頁(yè)/共162頁(yè)解: 486DATA SEGMENT USE16TAB DW P0,P1,P9 ;匯編后自動(dòng)裝入相應(yīng)的偏移地址MESG DB 0DH,0AH,strike 09:$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AXAGA: MOV AH,9 MOV DX,OFFSET MESG INT 21H MOV AH,1 INT 21H CMP AL,0

37、 JC AGACMP AL,9JA AGASUB AL,30HMOVZX BX,ALADD BX,BX;2BXBXMOV SI,OFFSET TABJMP BX+SI;DS:BX+SI IPP0: P1: P9: CODE ENDS END BEG 或:MOV BX,BX+SI JMP BX ;BX IP第55頁(yè)/共162頁(yè)1. 循環(huán)程序的結(jié)構(gòu)Y預(yù)置循環(huán)次數(shù)其他準(zhǔn)備工作循環(huán)體循環(huán)減1計(jì)數(shù)退出循環(huán)結(jié)果為0?N(a)單循環(huán)結(jié)構(gòu)5.6 循環(huán)程序外循環(huán)減1計(jì)數(shù)(b) 雙循環(huán)結(jié)構(gòu)結(jié)果為0?結(jié)果為0?退出循環(huán)預(yù)置外循環(huán)次數(shù)其他準(zhǔn)備工作預(yù)置內(nèi)循環(huán)次數(shù)其他準(zhǔn)備工作NNYY循環(huán)體內(nèi)循環(huán)減1計(jì)數(shù)第56頁(yè)/共162

38、頁(yè)2.結(jié)束循環(huán)的技巧(編程技巧)用寄存器做循環(huán)計(jì)數(shù)器用內(nèi)存單元做循環(huán)計(jì)數(shù)器用循環(huán)結(jié)束標(biāo)志結(jié)束循環(huán)例.設(shè)從BUF單元開(kāi)始,存有若干字節(jié)的ASC碼,找出其中的最大數(shù)屏幕顯示。思路:ASC碼數(shù)為無(wú)符號(hào)數(shù),無(wú)符號(hào)數(shù)的最小數(shù)為0第57頁(yè)/共162頁(yè)YNN數(shù)據(jù)區(qū)首址DS:BX無(wú)符號(hào)最小數(shù)AL數(shù)據(jù)個(gè)數(shù)CXBX ALBX=AL?BX+1 BXCX-1 CX顯示結(jié)果返回DOSCX=0?Y第58頁(yè)/共162頁(yè)解法1 486 DATA SEGMENT USE16 BUF DB QWERTYUIOP123 COUNT EQU $ -BUF;統(tǒng)計(jì)串長(zhǎng)度 MAX DB MAX=,?,0DH,0AH,$ DATA ENDS

39、 CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX MOV AL,0 ;無(wú)符號(hào)最小數(shù) 0 AL LEA BX,BUF ;串首址偏移量BX MOV CX,COUNT ;串長(zhǎng)度CX LAST: CMP BX,AL;比較 JC NEXT MOV AL,BX;大數(shù)ALNEXT: INC BX LOOP LAST ;循環(huán)計(jì)數(shù) MOV MAX+4,AL ;最大數(shù)MAX+4 單元 MOV AH,9 MOV DX,OFFSET MAX INT 21H ;顯示結(jié)果 MOV AH,4CH INT 21H ;返回 DOSCODE

40、 ENDS END BEG 第59頁(yè)/共162頁(yè)解法2 486DATA SEGMENT USE16BUF DB QWERTYUIOP123FLAG DB 1 ;設(shè)置串結(jié)束標(biāo)志MAX DB MAX=,?,0DH,0AH,$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV AL,0 ;無(wú)符號(hào)最小數(shù) 0 AL LEA BX,BUF ;串首址偏移量BXLAST: CMP BYTE PTR BX, -1 ;BX=串結(jié)束標(biāo)志 ? JE DISP ;是,轉(zhuǎn) CMP BX,AL JC NEXT MO

41、V AL,BX ;大數(shù)ALNEXT: INC BX JMP LASTDISP: MOV MAX+4,AL ;最大數(shù)MAX+4 單元 MOV AH,9 MOV DX,OFFSET MAX INT 21H ;顯示結(jié)果 MOV AH,4CH INT 21H ;返回 DOSCODE ENDS END BEG 第60頁(yè)/共162頁(yè)5.7 子程序及其調(diào)用 子程序是相對(duì)獨(dú)立的程序,當(dāng)程序中要多次完成某一操作時(shí),為了簡(jiǎn)化整體程序,增強(qiáng)程序可讀性,常常把“完成某一操作”設(shè)計(jì)成一個(gè)子程序,供調(diào)用。 向子程序傳遞參數(shù)的方法 通過(guò)寄存器傳遞參數(shù) 利用堆棧區(qū)傳遞參數(shù) 利用內(nèi)存單元傳遞參數(shù)子程序用PROC/ENDP定界子

42、程序分為:段內(nèi)子程序、段間子程序、無(wú)參數(shù)子程序、有參數(shù)子程序第61頁(yè)/共162頁(yè)例.無(wú)參數(shù)子程序CODE SEGMENTCALL CRLFCALL CRLFCRLF PROC MOV AH,2 MOV DL,0DH INT 21H MOV AH,2 MOV DL,0AH INT 21H RETCRLF ENDPCODE ENDS第62頁(yè)/共162頁(yè)例.用寄存器傳遞參數(shù)數(shù)據(jù)段:MESG1 DB Please Enter 09:$ MESG2 DB Strike any key,0DH,0AH,$代碼段:CODE SEGMENT MOV DX,OFFSET MESG1 CALL DISP MOV

43、DX,OFFSET MESG2 CALL DISP DISP PROC MOV AH,9 INT 21H RETDISP ENDPCODE ENDS第63頁(yè)/共162頁(yè)例.設(shè)N1=1122H,N2=3344H,N3=5566H 用子程序調(diào)用的方法實(shí)現(xiàn)3個(gè)數(shù)的累加和 解法1: 編程技巧:把數(shù)據(jù)單元的偏移地址傳送給計(jì)算累 加和的子程序 . 486 DATA SEGMENT USE16 NUM DW 1122H ;N1 DW 3344H ;N2 DW 5566H ;N3 DATA ENDS STACK_ SEGMENT STACK STACK USE16 DB 100 DUP(?) STACK_ E

44、NDS程序清單:第64頁(yè)/共162頁(yè)CODE SEGMENT USE16 ASSUME CS:CODE ASSUME DS:DATA,SS:STACK_BEG: MOV AX,DATA MOV DS,AX MOV SI,OFFSET NUM ;參數(shù)指針SI CALL COMPUTEXYZ: CALL DISPEXIT: MOV AH,4CH INT 21H;-COMPUTE PROC MOV BX,0 ADD BX,SI+0 ;BX+N1BX ADD BX,SI+2 ;BX+N2BX ADD BX,SI+4 ;BX+N3BX RET ;返斷點(diǎn)XYZCOMPUTE ENDP ;-DISP PRO

45、C;顯示BX內(nèi)容 MOV CX,16LAST: MOV DL,0 RCL BX,1 JNC NEXT MOV DL,1NEXT: MOV AH,2 INT 21H LOOP LAST RET ;返斷點(diǎn)EXITDISP ENDPCODE ENDS END BEG 第65頁(yè)/共162頁(yè)解法2: 編程技巧:調(diào)用前先把數(shù)據(jù)壓棧,計(jì)算累加和的子程序從堆棧中取數(shù),完成累加和。 . 486 DATA SEGMENT USE16 NUM DW 1122H ;N1 DW 3344H ;N2 DW 5566H ;N3 DATA ENDSSTACK_ SEGMENT STACK STACK USE16 DB 100

46、 DUP(?)STACK_ ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,SS:STACK_程序清單:第66頁(yè)/共162頁(yè)BEG: MOV AX,DATA MOV DS,AX MOV SI,OFFSET NUM ;N1 ,N2,N3壓棧 PUSH WORD PTR SI+0 PUSH WORD PTR SI+2 PUSH WORD PTR SI+4 CALL COMPUTEXYZ: CALL DISPEXIT: MOV AH,4CH INT 21H;-COMPUTE PROC MOV BP,SP ;棧針BP MOV BX,0 ADD BX,BP+

47、2 ;BX+N3BX ADD BX,BP+4 ;BX+N2BX ADD BX,BP+6 ;BX+N1BX RET 6 ;返斷點(diǎn)XYZ,清棧COMPUTE ENDP;-DISP PROC ;顯示BX內(nèi)容 MOV CX,16 LAST: MOV DL,0 RCL BX,1 ADC DL,0 MOV AH,2 INT 21H LOOP LAST RET ;返斷點(diǎn)EXITDISP ENDPCODE ENDS END BEG 第67頁(yè)/共162頁(yè)解法3:編程技巧:數(shù)據(jù)放在代碼段,利用內(nèi)存單元傳遞數(shù)據(jù) . 486STACK_ SEGMENT STACK STACK USE16 DB 100 DUP(?)S

48、TACK_ ENDSCODE SEGMENT USE16 ASSUME CS:CODE,SS:STACK_BEG: CALL COMPUTENUM DW 1122H ;N1 DW 3344H ;N2 DW 5566H ;N3XYZ: CALL DISPEXIT: MOV AH,4CH INT 21H 程序清單:第68頁(yè)/共162頁(yè)COMPUTE PROC MOV BP,SP ;棧針BP ;斷口地址NUMSI MOV SI,BP+0 MOV BX,0 ;BX+N1BX ADD BX,CS:SI+0 ;BX+N2BX ADD BX,CS:SI+2 ;BX+N3BX ADD BX,CS:SI+4 ;

49、彈出原來(lái)的斷口地址 POP AX MOV AX,OFFSET XYZ PUSH AX RET ;返回?cái)帱c(diǎn)XYZCOMPUTE ENDP;顯示BX內(nèi)容DISP PROC MOV CX,16LAST: MOV AL,0 RCL BX,1 ADC AL,0 MOV AH,0EH INT 10H LOOP LAST ;返回?cái)帱c(diǎn)EXIT RET DISP ENDPCODE ENDS END BEG第69頁(yè)/共162頁(yè)6.8 宏指令與條件匯編 子程序調(diào)用可以簡(jiǎn)化程序,但是如果子程序的參數(shù)太多,調(diào)用時(shí)太麻煩,匯編語(yǔ)言提供了另一種簡(jiǎn)化的途徑宏指令。宏指令是匯編語(yǔ)言提供的偽指令! 是用戶自行定義的若干指令的集合

50、宏指令有:無(wú)參數(shù)宏指令、有參數(shù)宏指令宏指令應(yīng)該先定義后調(diào)用”“宏指令的定義,可以不在任何邏輯段之中,習(xí)慣 上放在源程序首部第70頁(yè)/共162頁(yè)1.宏定義語(yǔ)句的格式: 宏指令名字 MACRO 宏體 ENDM一.無(wú)參數(shù)宏指令的定義與調(diào)用:2.宏指令調(diào)用: 宏指令先行定義之后,在代碼段的任何位置, 書寫“宏指令名字”即完成了調(diào)用。3.宏指令的“匯編”: 匯編時(shí),匯編程序自動(dòng)用宏體取代宏調(diào)用。 此處沒(méi)有宏名字第71頁(yè)/共162頁(yè)例: 486 CRLF MACRO ;實(shí)現(xiàn)回車換行 MOV AH,0EH MOV AL,0DH INT 10H MOV AL,0AH INT 10H ENDM CODE SEG

51、MENT USE16 ASSUME CS:CODE BEG: MOV AH,2 MOV DL,A INT 21H CRLF 匯編時(shí),自動(dòng)用宏體替換宏指令拷貝一份到這兒第72頁(yè)/共162頁(yè)二.有參數(shù)的宏指令及其調(diào)用格式: 宏指令名字 MACRO 用逗號(hào)(或空格)間隔的啞元表 宏體 ENDM調(diào)用格式: 宏指令名字 實(shí)元表注意: 實(shí)元表是一串用逗號(hào)(或空格)間隔的立即數(shù),寄存器操作數(shù)或者是沒(méi)有PTR說(shuō)明符的存儲(chǔ)器操作數(shù)。 匯編時(shí),匯編程序自動(dòng)地把實(shí)元一一對(duì)應(yīng)的賦給啞元。第73頁(yè)/共162頁(yè)例.定位顯示彩色字符串 要求置顯示器為彩色文本方式,并在: 0行5列 顯示 黑底綠色 HELLO 12行36列

52、顯示 黑底紅色 WELCOME! 24行66列 顯示 黑底黃色 BYE_BYE 解: . 486 DISP MACRO Y, X, VAR, LENGTH, COLOR MOV AH,13H MOV AL,1 MOV BH,0 ;選擇0頁(yè)顯示屏 MOV BL,COLOR ;屬性字(顏色值) BL MOV CX,LENGTH ;串長(zhǎng)度 CX MOV DH,Y ;行號(hào) DH MOV DL,X ;列號(hào) DL MOV BP,OFFSET VAR ;串有效地址BP INT 10H ENDM 第74頁(yè)/共162頁(yè)EDATA SEGMENT USE16 SS1 DB HELLO SS2 DB WELCOME

53、 ! SS3 DB BYE_BYEEDATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,ES:EDATA MOV AX,EDATA MOV ES,AX MOV AX,3 INT 10H DISP 0, 5, SS1, 5, 2 ;0行5列顯示綠色HELLO DISP 12, 36, SS2, 8, 4 ;12行36列顯示紅色WELCOME DISP 24, 66, SS3, 7, 0EH ;24行66列顯示黃色BYE_BYE SCAN: MOV AH,1 INT 16H JZ SCAN ;等待用戶鍵入,無(wú)鍵入轉(zhuǎn) MOV AX,2 INT 10H ;恢復(fù)802

54、5黑白文本方式 MOV AH,4CH INT 21H CODE ENDS END BEG 第75頁(yè)/共162頁(yè)分析:BIOS INT 10H的13H子功能,要求待顯字符串在附加段,串首址ES:BP對(duì)啞參數(shù)的賦值是在調(diào)用指令中完成的子程序調(diào)用能減小目標(biāo)程序的體積,而宏指令調(diào)用則不能減小目標(biāo)程序的體積宏指令可以嵌套三.LOCAL偽指令 如果宏體中有分支、轉(zhuǎn)移,則必然有標(biāo)號(hào),2次以上調(diào)用這樣的宏體,就會(huì)出現(xiàn)標(biāo)號(hào)重復(fù)定義的錯(cuò)誤,為此匯編語(yǔ)言又提供了一條LOCAL偽指令。第76頁(yè)/共162頁(yè)應(yīng)用:用LOCAL定義的標(biāo)號(hào)稱為“局部標(biāo)號(hào)”,它是宏體中所有標(biāo)號(hào)的集合。局部標(biāo)號(hào)可以和代碼段中其他標(biāo)號(hào)重名。宏指令

55、僅被調(diào)用1次時(shí),不必使用LOCAL偽指令。例.分組顯示8,16,32 位二進(jìn)制數(shù)解: . 486 CRLF MACRO ;光標(biāo)返回下一行始格 MOV AH,0EH MOV AL,0DH INT 10H MOV AL,0AH INT 10H ENDM格式:LOCAL 用逗號(hào)間隔的標(biāo)號(hào)名第77頁(yè)/共162頁(yè);分組顯示VAR中的NN位二進(jìn)制數(shù)DISP MACRO VAR,NN LOCAL L1, L2 MOV CH,NN/4L1: MOV CL,4L2: MOV AL, 0 ROL VAR,1 ADC AL,0 MOV AH,0EH INT 10H DEC CL JNZ L2 MOV AL, INT

56、 10H DEC CH JNZ L1 CRLF ENDMCODE SEGMENT USE16 ASSUME CS:CODENUM DB 88HBEG: MOV EBX,12345678H DISP BH,8 ;顯示BH中的8位數(shù) DISP BX,16 ;顯示BX中的16位數(shù) DISP EBX,32 ;顯示EBX中的32位數(shù) DISP NUM,8 ;顯示NUM單元中的8位數(shù) MOV AH,4CH INT 21HCODE ENDS END BEG 第78頁(yè)/共162頁(yè)四.條件匯編語(yǔ)句: 條件匯編是匯編語(yǔ)言提供的偽指令、偽語(yǔ)句。高版本的匯編語(yǔ)言提供了許多格式的條件語(yǔ)句,此處僅介紹最常用、最基本的格式

57、。格式1:IF 條件 指令集合1 ELSE 指令集合2 ENDIF格式2: IF 條件 指令集合 ENDIF說(shuō)明:IF/ENDIF是一對(duì)定界語(yǔ)句,“條件”為邏輯表達(dá)式或關(guān)系表達(dá)式。第79頁(yè)/共162頁(yè)格式1功能:如果條件成立,匯編指令集合1; 如果不成立,匯編指令集合2。格式2功能:如果條件成立,匯編指令集合, 否則不匯編。 例. SHIFT MACRO VAR, N, LR IF LR EQ L ROL VAR,N ELSE ROR VAR,N ENDIF ENDM代碼段中這樣調(diào)用:MOV EAX,12345678HMOV EBX,12345678HSHIFT EAX, 8, L;EAX=3

58、4567812HSHIFT EBX, 8, R;EBX=78123456H第80頁(yè)/共162頁(yè)A6.9 代碼轉(zhuǎn)換常見(jiàn)的代碼轉(zhuǎn)換有: 二進(jìn)制數(shù)顯示,二進(jìn)制數(shù)十進(jìn)制數(shù)顯示,二進(jìn)制數(shù)十六進(jìn)制數(shù)顯示,BCD碼數(shù)二進(jìn)制數(shù)一. 二進(jìn)制數(shù)顯示:例.把鍵盤輸入的一位數(shù)(09),轉(zhuǎn)換成等值二進(jìn)數(shù)顯示顯示的格式要求如下:Please EnterERROR!Please Enter9 =00001001B第81頁(yè)/共162頁(yè)思路:鍵盤緩沖區(qū)中是鍵入字符的ASC碼。 09的ASC碼為30H39H。二進(jìn)制數(shù)每一位代碼的判斷:本程序采用兩種格式設(shè)計(jì)源程序:一種是EXE文件編程格式,另一種是COM文件編程格式。RCL0SA

59、LROLCFCFCF第82頁(yè)/共162頁(yè)程序框圖: AL-30HBL =屏幕,8CX 0 屏幕1 屏幕CX-1 CXB 屏幕,返回DOSNN給出操作提示鍵盤輸入ALAL=09?CF=?CX=0?BL左移一位Y顯示錯(cuò)誤信息 Y01第83頁(yè)/共162頁(yè) . 486DATA SEGMENT USE16MESG1 DB Please Enter ! ,0DH,0AH,$MESG2 DB -Error ! $ DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX,OFFSE

60、T MESG1 INT 21H ;顯示操作提示 MOV AH,1 INT 21H ;等待鍵入 CMP AL,3AH JNC ERROR ;9轉(zhuǎn) CMP AL,30H EXE格式程序清單 JC ERROR ;0轉(zhuǎn) SUB AL,30H MOV BL,AL ;BL=09 的二進(jìn)制數(shù) MOV AH,2 MOV DL,= INT 21H CALL DISP MOV AH,2 MOV DL,B INT 21H JMP EXITERROR: MOV AH,9 MOV DX,OFFSET MESG2 INT 21H ;顯示錯(cuò)誤信息EXIT: MOV AH,4CH INT 21H第84頁(yè)/共162頁(yè);-DIS

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論