微機(jī)原理及接口技術(shù)PPT第四章_第1頁(yè)
微機(jī)原理及接口技術(shù)PPT第四章_第2頁(yè)
微機(jī)原理及接口技術(shù)PPT第四章_第3頁(yè)
微機(jī)原理及接口技術(shù)PPT第四章_第4頁(yè)
微機(jī)原理及接口技術(shù)PPT第四章_第5頁(yè)
已閱讀5頁(yè),還剩47頁(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、第四章第四章 匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)4.1 引例引例4.2 匯編語(yǔ)言源程序上機(jī)過(guò)程匯編語(yǔ)言源程序上機(jī)過(guò)程4.3 程序結(jié)構(gòu)設(shè)計(jì)程序結(jié)構(gòu)設(shè)計(jì) 知知 識(shí)識(shí) 概概 述述 4.1 引引 例例 機(jī)器指令10110000 0001000000000100 0000010010100010 00000110 00000000匯編語(yǔ)句MOV AL, 16ADD AL, 4 MOV ADDR6, AL機(jī)器指令機(jī)器指令:它是計(jì)算機(jī)能識(shí)別的一組二進(jìn)制代碼,用于指 出計(jì)算機(jī)所要進(jìn)行的操作以及操作對(duì)象。 匯編語(yǔ)句匯編語(yǔ)句:采用符號(hào)代替二進(jìn)制代碼,產(chǎn)生了符號(hào)化的匯編 語(yǔ)句 DATAS SEGMENT AD1DB4

2、CH AD2DB25H SUMDB? DATAS ENDS CODES SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,AD1 ADD AL,AD2 MOV SUM,AL CODES ENDS END START4.1.2 其他常用偽指令其他常用偽指令一、重復(fù)子句定義語(yǔ)句一、重復(fù)子句定義語(yǔ)句 形式:重復(fù)次數(shù)重復(fù)次數(shù)DUP (EXP ,EXP ) 其中重復(fù)次數(shù)取非零正整數(shù),EXP可以是常數(shù)表達(dá)式、字符串以及“?”。 例如:bDB100 DUP (?)dDD4 DUP (160), 90 DUP(A5)tDT7,

3、 10 DUP (56) 二、符號(hào)定義語(yǔ)句二、符號(hào)定義語(yǔ)句有三種等價(jià)語(yǔ)句:1、賦值等價(jià)語(yǔ)句、賦值等價(jià)語(yǔ)句 形式: 名字名字 = EXP 功能: 匯編時(shí)該名字用表達(dá)式的值取代,類似與高級(jí)語(yǔ)言的符號(hào)數(shù)。允許重新定義。 例如: lab=la-lb price=30 price=402、數(shù)值等價(jià)語(yǔ)句、數(shù)值等價(jià)語(yǔ)句 形式:名字名字EQUEXP 功能:該語(yǔ)句與賦值等價(jià)語(yǔ)句功能一樣,唯一的區(qū)別 是,用EQU定義的名字不允許再定義。 例如:labEQUla-lbpriceEQU30priceEQU40;錯(cuò)誤的定義3. 解除定義偽指令解除定義偽指令PURGE 形式:PURGE 功能:解除指定符號(hào)的定義。 解除符

4、號(hào)定義后,可用EQU重新進(jìn)行定義。如:Y1EQU7;定義Y1的值為7PURGEY1;解除Y1的定義Y1EQU36;重新定義Y1的值為36三、地址計(jì)數(shù)器三、地址計(jì)數(shù)器$用法一:用法一:表示指令的首地址 例: JNE $+6 其轉(zhuǎn)向地址是JNE指令的首地址加上6。 注意:在這里,$+6必須是另一條指令的首地址,必須是另一條指令的首地址,否則, 匯編程序?qū)⒅甘境鲥e(cuò)信息。用法二:用法二: 當(dāng)$用在偽操作的參數(shù)字段時(shí),則它所表示的是地址計(jì)數(shù)器的當(dāng)前值。例:$用法示例。ARRAY DW 1ARRAY DW 1,2 2,$+4$+4,3 3,4 4,$+4$+4如匯編時(shí)ARRAY分配的偏移地址為0074,則

5、結(jié)果如右圖所示。結(jié)論:結(jié)論: ARRAYARRAY數(shù)組中的兩個(gè)數(shù)組中的兩個(gè)$+4$+4得到的結(jié)得到的結(jié)果是不同的,這是由于果是不同的,這是由于$ $的值是在不的值是在不斷變化的緣故。斷變化的緣故。 當(dāng)在指令中用到當(dāng)在指令中用到$ $ 時(shí),它只代表時(shí),它只代表該指令的首地址,而與該指令的首地址,而與$ $本身所在的本身所在的字節(jié)無(wú)關(guān)。字節(jié)無(wú)關(guān)。010002007C000300040082000074ARRAY4.2 匯編語(yǔ)言源程序上機(jī)過(guò)程匯編語(yǔ)言源程序上機(jī)過(guò)程編輯程序文件EXMP.ASMEDLINEWPSWORDEDIT匯編程序ASMMASMTASM文件EXMP.OBJ(EXMP.LST)(EX

6、MP.CRF)連接程序LINK文件EXMP.EXE(EXMP.MAP)(EXMP.LIB)DEBUG出錯(cuò)出錯(cuò)出錯(cuò)4.3 程序結(jié)構(gòu)設(shè)計(jì)程序結(jié)構(gòu)設(shè)計(jì)4.3.1 回憶程序的三種基本結(jié)構(gòu) 順序 選擇 循環(huán)一、順序程序設(shè)計(jì)一、順序程序設(shè)計(jì) DATA SEGMENT D1DB4CH D2DB25H SUMDW? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL, D1 MUL D2 MOV SUM,AX MOV AH, 4CH INT 21H CODE ENDS END START.CODE

7、ENDS ENDSTART例 :兩個(gè)存儲(chǔ)單元的字節(jié)數(shù)據(jù)相乘,結(jié)果存放到另一存儲(chǔ)單元中。二、二、 分支程序設(shè)計(jì)分支程序設(shè)計(jì) 1. 分支程序結(jié)構(gòu)形式 2. 分支程序設(shè)計(jì)方法 程序的分支一般用條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令來(lái)產(chǎn)生,連續(xù)地使用條件轉(zhuǎn)移指令可使程序產(chǎn)生多個(gè)不同的分支。注意:非結(jié)構(gòu)化的程序是順序執(zhí)行的,所以要設(shè)計(jì)轉(zhuǎn)注意:非結(jié)構(gòu)化的程序是順序執(zhí)行的,所以要設(shè)計(jì)轉(zhuǎn) 移指令移指令。條件AB【例】 統(tǒng)計(jì)一個(gè)數(shù)是正數(shù)、0還是負(fù)數(shù),并分別將結(jié)論統(tǒng)計(jì)在COUNT1、COUNT2和COUNT3變量中。其流程圖如圖所示。三、循環(huán)程序設(shè)計(jì)三、循環(huán)程序設(shè)計(jì)1.循環(huán)程序結(jié)構(gòu)循環(huán)初始狀態(tài)循環(huán)控制條件循環(huán)體(a)循環(huán)初始狀

8、態(tài)循環(huán)控制條件循環(huán)體(b)NYNY2. 循環(huán)程序的組成循環(huán)程序的組成(1) 循環(huán)初始化。 初始化完成設(shè)置循環(huán)次數(shù)的計(jì)數(shù)值,設(shè)置循環(huán)初始地址,以及為循環(huán)體正常工作而建立的初始狀態(tài)等。(2) 循環(huán)體。 該部分是為完成程序功能而設(shè)計(jì)的主要程序段。(3) 循環(huán)修改。 循環(huán)的修改部分是為避免程序原地踏步,保證每一次重復(fù)(循環(huán))時(shí),參加執(zhí)行的信息能發(fā)生有規(guī)律的變化而建立的程序段。(4) 循環(huán)控制。 是循環(huán)程序設(shè)計(jì)的關(guān)鍵。 3. 循環(huán)程序設(shè)計(jì)方法循環(huán)程序設(shè)計(jì)方法 例: 設(shè)計(jì)一個(gè)程序,完成從1連加到100(即1+2+.+99+100) 的操作,結(jié)果保存在數(shù)據(jù)段的SUM單元。 分析: 一般計(jì)算過(guò)程sum123

9、sum336 sum6410 sum4950100 結(jié)構(gòu)性和可讀性差。 程序清單如下。.sumsumx4.3.2 BIOS中斷調(diào)用中斷調(diào)用一、 什么是BIOS BIOS(Basic Input/Output System) 監(jiān)控程序,固化主板的ROM中 包含:系統(tǒng)測(cè)試程序(POST)、初始化引導(dǎo)程序(BOOT)、 I/O設(shè)備的基本驅(qū)動(dòng)程序和許多常用程序模塊, 一般以中斷服務(wù)程序的形式存在。高級(jí)語(yǔ)言磁盤(pán)操作系統(tǒng)(DOS)其他操作系統(tǒng)高級(jí)語(yǔ)言用戶程序基本輸入/輸出系統(tǒng)(BIOS)IBM-PC機(jī)硬件系統(tǒng)二、 BIOS中斷調(diào)用1.概念: 即借用每一臺(tái)計(jì)算機(jī)中即借用每一臺(tái)計(jì)算機(jī)中BIOS固有的固有的I/

10、O操作程序來(lái)方便操作程序來(lái)方便地解決自己的問(wèn)題,由于它已經(jīng)在計(jì)算機(jī)中了,因此人們不必地解決自己的問(wèn)題,由于它已經(jīng)在計(jì)算機(jī)中了,因此人們不必再把它寫(xiě)入自己的程序,只要指明它的操作位置就可以了。再把它寫(xiě)入自己的程序,只要指明它的操作位置就可以了。2. BIOS調(diào)用的基本操作(1) 設(shè)置分功能號(hào)設(shè)置分功能號(hào):給指定寄存器(通常為AH)送入分功能號(hào)。(2) 置入口參數(shù)置入口參數(shù):給寄存器填寫(xiě)相應(yīng)參數(shù)的內(nèi)容(某些調(diào)用無(wú)參數(shù))。(3) 使用中斷語(yǔ)句使用中斷語(yǔ)句INT n:執(zhí)行調(diào)用的功能,其中n為中斷號(hào)。(4) 分析出口參數(shù)分析出口參數(shù)。注意:某些注意:某些BIOS調(diào)用可能沒(méi)有出口參數(shù),這時(shí)省略第調(diào)用可能沒(méi)

11、有出口參數(shù),這時(shí)省略第(4)步操作步操作3. BIOS打印功能(17H,提供了三種不同的操作。)(1)功能0:打印一個(gè)字符打印一個(gè)字符。 若:要打印輸出的字符放在AL中; 打印機(jī)號(hào)放在DX中(BIOS最多允許連接3臺(tái)打印機(jī), 編號(hào)分別為0,1和2) 打印機(jī)的狀態(tài)信息被回送到AH。 MOVAH,0;請(qǐng)求打??;請(qǐng)求打印 MOVAL,CHAR;寫(xiě)入打印字符;寫(xiě)入打印字符 MOVDX,0;設(shè)置;設(shè)置0#打印口打印口 INT 17H;調(diào)用;調(diào)用BIOS(2) 功能1:初始化打印機(jī)并回送打印機(jī)狀態(tài)到初始化打印機(jī)并回送打印機(jī)狀態(tài)到AH寄存器寄存器。 此功能和打開(kāi)打印機(jī)時(shí)的作用一樣。 MOV AH,01 ;初

12、始化打印機(jī);初始化打印機(jī) MOV DX,0;設(shè)置0#打印口 INT 17H ;調(diào)用BIOS(3) 功能2:把狀態(tài)字節(jié)讀入把狀態(tài)字節(jié)讀入AH寄存器中寄存器中。 MOV AH,02 ;初始化打印機(jī);初始化打印機(jī) MOV DX,0;設(shè)置0#打印口 INT 17H ;調(diào)用BIOS一、 DOS功能調(diào)用概述 8086/8088指令系統(tǒng)中,有一種軟中斷指令I(lǐng)NT n。每執(zhí)行一條軟中斷指令,就調(diào)用一個(gè)相應(yīng)的中斷服務(wù)程序。 當(dāng)當(dāng)n=51FH時(shí),調(diào)用時(shí),調(diào)用BIOS中的服務(wù)程序,一般稱作系統(tǒng)中的服務(wù)程序,一般稱作系統(tǒng)中斷調(diào)用;中斷調(diào)用; 當(dāng)當(dāng)n=203FH時(shí),調(diào)用時(shí),調(diào)用DOS中的服務(wù)程序,稱作功能調(diào)中的服務(wù)程序

13、,稱作功能調(diào)用。用。其中,INT 21H是一個(gè)具有調(diào)用多種功能的服務(wù)程序的軟中斷指令,故稱其為DOS系統(tǒng)功能系統(tǒng)功能調(diào)用。4.3.3 DOS功能調(diào)用功能調(diào)用二、二、 DOS功能調(diào)用方法功能調(diào)用方法1. DOS軟中斷(INT 20HINT 27H)指令 方法:首先輸入入口參數(shù); 然后執(zhí)行INT指令; 最后分析出口參數(shù),即:2. 常用DOS軟中斷。設(shè) 置入口參數(shù)執(zhí) 行INT n分 析出口參數(shù)3. DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用(INT 21H)AH=功能功能入口參數(shù)入口參數(shù)出口參數(shù)出口參數(shù)1鍵盤(pán)輸入并回顯AL = 輸入字符2輸出顯示DL = 輸出字符7鍵盤(pán)輸入無(wú)回顯AL = 輸入字符9顯示字符串D

14、S:DX = 串地址0AH鍵盤(pán)輸入到緩沖區(qū)DS:DX = 緩沖區(qū)首地址DS:(DX+1) = 實(shí)際字符數(shù)0BH檢查是否有字符鍵入AL = 00 無(wú)AL = FF有2AH取日期CX = 年DH:DL = 月:日2BH設(shè)置日期CX = 年DH:DL=月:日AL = 00 成功AL = FF 無(wú)效2CH取時(shí)間CH:CL = 時(shí):分DH:DL = 秒:1/100秒2DH設(shè)置時(shí)間CH:CL = 時(shí):分DH:DL = 秒:1/100秒AL = 00 成功AL = FF 無(wú)效4CH返回DOS(AL = 返回碼)例例例什么是宏指令? 是指程序員事先定義的特定的“指令”,這種“指令”是一組重 復(fù)出現(xiàn)的程序指令塊

15、的縮寫(xiě)和替代。 宏指令定義以后,凡在宏指令出現(xiàn)的地方,宏匯編程序總是自動(dòng)地把它們替換成對(duì)應(yīng)的程序指令塊。 宏指令有時(shí)也稱為宏,包含有宏定義和宏調(diào)用。4.3.4 宏宏1. 1. 宏指令定義宏指令定義 宏是源程序中的一段具有獨(dú)立功能的程序代碼。 具有定義一次,多次調(diào)用的特點(diǎn),調(diào)用時(shí)只要使用一個(gè)宏指 令語(yǔ)句就可以了。 定義由開(kāi)始偽指令MACRO、宏指令體、宏指令定義結(jié)束偽指令 ENDM組成。格式如下:宏指令名宏指令名 MACRO MACRO 形式參數(shù)形式參數(shù)1 1,形式參數(shù),形式參數(shù)2 2,形式參數(shù),形式參數(shù)NN ;宏指令體;宏指令體( (宏體宏體) ) ENDM ENDM2. 2. 宏調(diào)用宏調(diào)用

16、宏指令一旦定義后,就可以用宏指令名字(宏名)來(lái)調(diào)用(或引用)。宏調(diào)用的格式為 宏指令名宏指令名 實(shí)際參數(shù)實(shí)際參數(shù)1 1,實(shí)際參數(shù),實(shí)際參數(shù)2 2,實(shí)際參數(shù),實(shí)際參數(shù)NN其中:其中: 實(shí)際參數(shù)的類型和順序要與形式參數(shù)的類型和順序保持一致,宏調(diào)用時(shí)實(shí)際參數(shù)的類型和順序要與形式參數(shù)的類型和順序保持一致,宏調(diào)用時(shí) 將一一對(duì)應(yīng)地替換宏指令體中的形式參數(shù)。將一一對(duì)應(yīng)地替換宏指令體中的形式參數(shù)。 宏指令調(diào)用時(shí),實(shí)際參數(shù)的數(shù)目并不一定要和形式參數(shù)的數(shù)目一致,當(dāng)宏指令調(diào)用時(shí),實(shí)際參數(shù)的數(shù)目并不一定要和形式參數(shù)的數(shù)目一致,當(dāng) 實(shí)參個(gè)數(shù)多于形參的個(gè)數(shù)時(shí),忽略多余的實(shí)參;當(dāng)實(shí)參個(gè)數(shù)少于形參個(gè)實(shí)參個(gè)數(shù)多于形參的個(gè)數(shù)時(shí),

17、忽略多余的實(shí)參;當(dāng)實(shí)參個(gè)數(shù)少于形參個(gè) 數(shù)時(shí),多余的形參用空串代替。數(shù)時(shí),多余的形參用空串代替。 例: 定義一條INOUT宏指令,既可以引用它輸入一串字符, 也可引用它顯示一串提示字符 LF MACRO;定義一條換行宏指令LF MOVDL,10 MOVAH,2 INT 21H ENDM CR MACRO;定義一條回車(chē)宏指令CR MOVDL,13 MOVAH,2 INT 21H ENDM INOUTMACRO X,Y;定義一條輸入/輸出宏指令 MOVAH,X LEA DX,Y INT 21H ENDMDATASSEGMENT INPUT DB PLEASE INPUT ANY CHARACTERS

18、:, $ KEYBUF DB 10,11 DUP (?) ,13,10,$DATASENDSCODESSEGMENTASSUME CS:CODES, DS:DATASSTART:MOVAX, DATAS MOVDS, AX INOUT 9, INPUT LF CR INOUT 10, KEYBUF LF CR INOUT 9, KEYBUF+2 MOV AH,4CH INT 21H CODESENDS ENDSTART3. 宏展開(kāi)宏展開(kāi) 什么是宏展開(kāi)? 匯編程序不對(duì)宏指令的定義進(jìn)行匯編,只有在程序中引用的時(shí)候,匯編程序才把對(duì)應(yīng)的宏指令體調(diào)出進(jìn)行匯編處理(語(yǔ)法檢查和代碼塊的插入),這個(gè)過(guò)程稱宏展

19、開(kāi)(或宏擴(kuò)展)。 參數(shù)替換 宏指令調(diào)用后,在宏指令調(diào)用處產(chǎn)生用實(shí)參替換形參的宏體指令語(yǔ)句。例如,上述INOUT宏指令調(diào)用后,宏展開(kāi)后的語(yǔ)句如下 + MOVAH,9 + LEA DX,INPUT + INT 21H + MOV DL,10 + MOVAH,2 + INT 21H + MOV DL,13 + MOV AH,2 + INT 21H + MOV AH,10 + LEA DX,KEYBUF + INT 21H + MOV AH,9 + LEA DX,KEYBUF+2 + INT 21HINOUT 9, INPUT LFCRINOUT 10, KEYBUFINOUT 9, KEYBUF+2

20、4.3.5 子程序結(jié)構(gòu)形式與操作子程序結(jié)構(gòu)形式與操作一、子程序定義一、子程序定義 1. 子程序定義的語(yǔ)法格式為: PROC Attribute RET ENDP其中其中: 子程序名為名字,它又是子程序入口的符號(hào)地址; 屬性(Attribute)是指類型屬性,它可以是NEAR或FAR。2. 調(diào)用程序和子程序的定義格式MAIN PROC FAR MAIN PROC FAR CALL SUBR1 CALL SUBR1 RET RETMAIN ENDPSUBR1 PROC NEAR SUBR1 PROC NEAR RET RETSUBR1 ENDP SUBR1 ENDP MAIN ENDP注:子程序定

21、義可以嵌套,一個(gè)子程序定義中可以包括多個(gè)子程序定義。注:子程序定義可以嵌套,一個(gè)子程序定義中可以包括多個(gè)子程序定義。二、子程序的調(diào)用和返回子程序的調(diào)用和返回1. 子程序的調(diào)用 CALL 2. 返回 RET三、現(xiàn)場(chǎng)保護(hù)與現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)保護(hù)與現(xiàn)場(chǎng)恢復(fù)1.現(xiàn)場(chǎng)保護(hù)與現(xiàn)場(chǎng)恢復(fù)的概念: 進(jìn)入子程序后,把子程序所需要使用的寄存器內(nèi)容進(jìn)行保存,此過(guò)程稱作現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng)保護(hù); 退出子程序前把寄存器內(nèi)容恢復(fù)原狀,此過(guò)程稱作現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)恢復(fù)。2.現(xiàn)場(chǎng)保護(hù)與恢復(fù)的原因:寄存器沖突寄存器沖突 如果主程序在調(diào)用子程序之前的某個(gè)寄存器內(nèi)容在從子程序返回后還有用,而子程序又恰好使用了同一個(gè)寄存器。3. 現(xiàn)場(chǎng)保護(hù)與現(xiàn)場(chǎng)恢復(fù)的方法

22、: 分別使用壓棧壓棧和彈出彈出指令實(shí)現(xiàn)。舉例四、子程序調(diào)用嵌套子程序調(diào)用嵌套 主程序調(diào)用子程序,子程序還可以調(diào)用其他子程序,這就主程序調(diào)用子程序,子程序還可以調(diào)用其他子程序,這就是是子程序的嵌套調(diào)用子程序的嵌套調(diào)用,子程序可以多重嵌套調(diào)用。,子程序可以多重嵌套調(diào)用。例: 設(shè)從BUF開(kāi)始存放若干無(wú)符號(hào)字節(jié)數(shù)據(jù),找出其中的最小值并以十六進(jìn)制形式輸出。 本題用子程序SEARCH來(lái)求最小數(shù)字節(jié)數(shù)并輸出,再調(diào)用一個(gè)子程序輸出1位十六進(jìn)制數(shù)。DATASEGMENTBUFDB 23,25,13,100, DB 123,78,90,110CNTEQU $-BUFDATAENDSCODESEGMENT ASSU

23、ME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOVCX,CNT1 MOVSI,OFFSET BUF CALL SEARCH MOVAH,4CH INT21HSEARCH PROC NEAR MOVBL,SISEAR1: INCSI CMPBL,SI JBESEAR2 MOVBL,SISEAR2: DECCX JNZSEAR1 MOVDL,BL MOVCL,4 SHRDL,CL CALL DISP MOVDL,BL ANDDL,0FH CALL DISP RETSEARCH ENDPDISP PROCNEAR CMPDL,9 JBEDISP1 ADD

24、DL,7DISP1: ADDDL,30H MOVAH,2 INT21H RETDISPENDPCODEENDSENDSTART五、宏與子程序的區(qū)別五、宏與子程序的區(qū)別 宏和子程序都是為了簡(jiǎn)化源程序的編寫(xiě),提高程序的可維護(hù)性,但是它們二者之間存在著以下本質(zhì)的區(qū)別:1. 匯編程序?qū)晖ㄟ^(guò)宏展開(kāi)來(lái)加入其定義體,宏宏調(diào)用多少 次,就相應(yīng)展開(kāi)多少次,所以,調(diào)用宏不會(huì)縮短目標(biāo)程序; 子程序代碼不論調(diào)用多少次,其在目標(biāo)程序中只出現(xiàn)一次子程序代碼不論調(diào)用多少次,其在目標(biāo)程序中只出現(xiàn)一次 因此,可簡(jiǎn)化相應(yīng)的目標(biāo)程序,從而節(jié)省存儲(chǔ)空間。因此,可簡(jiǎn)化相應(yīng)的目標(biāo)程序,從而節(jié)省存儲(chǔ)空間。2. 宏引用時(shí),參數(shù)是通過(guò)“實(shí)參

25、”替換“形參”的方式來(lái)實(shí)現(xiàn)傳遞 的,參數(shù)形式靈活多樣; 子程序調(diào)用時(shí),參數(shù)是通過(guò)寄存器、堆棧或約定存儲(chǔ)單元進(jìn)子程序調(diào)用時(shí),參數(shù)是通過(guò)寄存器、堆?;蚣s定存儲(chǔ)單元進(jìn) 行傳遞的;行傳遞的;3. 利用宏調(diào)用語(yǔ)句執(zhí)行重復(fù)語(yǔ)句,不會(huì)有額外的時(shí)間開(kāi)銷; 用子程序執(zhí)行重復(fù)語(yǔ)句,子程序的調(diào)用和返回均需要時(shí)間;用子程序執(zhí)行重復(fù)語(yǔ)句,子程序的調(diào)用和返回均需要時(shí)間;內(nèi)存分配圖 軟中斷軟中斷功能入口參數(shù)出口參數(shù)INT 20H程序正常退出 INT 21H系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用AH=功能號(hào)功能號(hào)功能調(diào)用相應(yīng)的入口參數(shù)功能調(diào)用相應(yīng)的入口參數(shù)功能調(diào)用相應(yīng)的出口參數(shù)功能調(diào)用相應(yīng)的出口參數(shù)INT 22H結(jié)束退出 INT 23HC

26、TRL+BREAK退出 INT 24H出錯(cuò)退出 INT 25H讀盤(pán)CX=讀出扇區(qū)數(shù)DX=起始邏輯扇區(qū)DS:BX=緩沖區(qū)地址AL=盤(pán)號(hào)CF=1出錯(cuò)INT 26H寫(xiě)盤(pán)CX=寫(xiě)扇區(qū)數(shù)DX=起始邏輯扇區(qū)DS:BX=緩沖區(qū)地址AL=盤(pán)號(hào)CF=1出錯(cuò)INT 27H駐留退出 INT 28HINT 2FHDOS專用 1號(hào)功能應(yīng)用舉例 MAIN: KEY: MOVAH, 1 ;等待鍵入字符,當(dāng)按下鍵后 INT 21H ;AL=鍵入的字符 CMPAL,Y JE YES ;鍵入字符Y,轉(zhuǎn)至YES語(yǔ)句處 CMPAL,N JE NOT ;鍵入字符N ,轉(zhuǎn)至NOT語(yǔ)句處 JMP KEY ;鍵入其他字符,轉(zhuǎn)至KEY語(yǔ)句 ;

27、處,繼續(xù)等待鍵入字符YES: ANOT: B2號(hào)功能舉例 MOV AH , 2 MOV DL , INT 21H 39H0AH號(hào)功能鍵入字符串??梢越邮真I入的字符串將其存入內(nèi)存中用戶定義的緩沖區(qū)。緩沖區(qū)結(jié)構(gòu)如圖所示。緩沖區(qū)第一字節(jié)為用戶定義的緩沖區(qū)第一字節(jié)為用戶定義的最大鍵入字符數(shù)最大鍵入字符數(shù),若用戶鍵入的字符數(shù)(包括回車(chē)符)大于此數(shù),則機(jī)器鈴響且光標(biāo)不再右移,直到鍵入回車(chē)符為止。緩沖區(qū)第二字節(jié)為實(shí)際鍵入的緩沖區(qū)第二字節(jié)為實(shí)際鍵入的字符數(shù)字符數(shù)(不包括回車(chē)符不包括回車(chē)符),由,由DOS自動(dòng)填入。自動(dòng)填入。從第三字節(jié)開(kāi)始存放鍵入的字從第三字節(jié)開(kāi)始存放鍵入的字符符,顯然,緩沖區(qū)的大小等于最大字符

28、數(shù)加2。255 H E L O0DBUFSIZEACTCHARCHARTEXT L MOV AL, X CMP AL, 0 JGE L1 INC CNT1L1: JG L2 INC CNT2L2: INC CNT3L3: MOV AL, X CMP AL, 0 JGE L1 INC CNT1 JMP L3L1: JG L2 INC CNT2 JMP L3L2: INC CNT3L3: JMP L3JMP L3 DATA SEGMENT SUMDW? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX, DATA MOV DS,

29、AX SUB AX, AX MOV CX, 100 CLC LP: INC AX ADD SUM, AX LOOP LP CODE ENDS END STARTSUBTPROCPUSHAX ;現(xiàn)場(chǎng)保護(hù)PUSHBXPUSHCXPUSHDX POPDX ;現(xiàn)場(chǎng)恢復(fù)POPCXPOPBXPOPAXRETSUBTENDP例如,下面是一個(gè)較為完整的匯編源程序段定義。DATE_SEG1 SEGMENTDATE_SEG1 SEGMENTDATE_SEG1 ENDSDATE_SEG1 ENDSDATA_SEG2 SEGMENTDATA_SEG2 SEGMENT DATA_SEG2 ENDSDATA_SEG2 ENDSCODE_SEGCODE_SEG SEGMENT SEGMENT;定義代碼段ASSUME CS:CODE_SEG,DS:DATA_SEG1,ES:DATA_SEG2ASSUME CS:CODE_SEG,DS:DATA_SEG1,ES:DATA_SEG2START:START:MOVMOVAX

溫馨提示

  • 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)論