




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章第三章 匯編言語(yǔ)及編程匯編言語(yǔ)及編程3.1 3.1 匯編言語(yǔ)程序構(gòu)造與匯編語(yǔ)句匯編言語(yǔ)程序構(gòu)造與匯編語(yǔ)句3.2 3.2 偽指令語(yǔ)句偽指令語(yǔ)句3.3 3.3 匯編言語(yǔ)編程環(huán)境匯編言語(yǔ)編程環(huán)境3.4 DOS/BIOS3.4 DOS/BIOS功能調(diào)用功能調(diào)用3.5 3.5 三種根本構(gòu)造程序的設(shè)計(jì)三種根本構(gòu)造程序的設(shè)計(jì)3.6 3.6 子程序設(shè)計(jì)與調(diào)用子程序設(shè)計(jì)與調(diào)用3.1 3.1 匯編言語(yǔ)程序構(gòu)造與匯編語(yǔ)句匯編言語(yǔ)程序構(gòu)造與匯編語(yǔ)句3.1.1 3.1.1 匯編言語(yǔ)源程序構(gòu)造匯編言語(yǔ)源程序構(gòu)造 3.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句3.1.1 3.1.1 匯編言語(yǔ)源程序構(gòu)造匯編言語(yǔ)源
2、程序構(gòu)造 80X86/Pentium 80X86/Pentium系列系列MPUMPU匯編言語(yǔ)都是以邏匯編言語(yǔ)都是以邏輯段為根底,按段的概念來(lái)組織代碼和數(shù)據(jù)的。輯段為根底,按段的概念來(lái)組織代碼和數(shù)據(jù)的。因此,源程序構(gòu)造與邏輯段的定義方法親密相因此,源程序構(gòu)造與邏輯段的定義方法親密相關(guān),而宏匯編言語(yǔ)關(guān),而宏匯編言語(yǔ)MASM 5.0MASM 5.0以上的版本中,邏以上的版本中,邏輯段既可用完好段定義,又可用簡(jiǎn)化段定義。輯段既可用完好段定義,又可用簡(jiǎn)化段定義。1. 1. 規(guī)范的單模塊源程序框架規(guī)范的單模塊源程序框架 .586 .586DATA SEGMENT USE16/USE32DATA SEGME
3、NT USE16/USE32;定義數(shù)據(jù)段;定義數(shù)據(jù)段 ;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)定義偽指令序列DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK;定義堆棧段;定義堆棧段 ;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)定義偽指令序列STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE32CODE SEGMENT USE16/USE32;定義代碼段;定義代碼段 ASSUME CS ASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,
4、ESES:DATADATASTART: MOV AXSTART: MOV AX,DATADATA;取數(shù)據(jù)段基址;取數(shù)據(jù)段基址 MOV DS MOV DS,AXAX;建立;建立DSDS的可尋址性的可尋址性 MOV ES MOV ES,AX AX ;建立;建立ESES段的可尋址性段的可尋址性 ;中心程序段;中心程序段 MOV AH MOV AH,4CH4CH;前往;前往DOSDOS操作系統(tǒng)操作系統(tǒng) INT 21H INT 21HCODE ENDSCODE ENDS END START END START 一個(gè)源程序由假設(shè)干邏輯段組成。普通一個(gè)源程序具有數(shù)據(jù)段、附加數(shù)據(jù)段、堆棧段和代碼段;但只需代碼
5、段是必不可少的。 采用完好段定義時(shí),對(duì)程序采用完好段定義時(shí),對(duì)程序中定義的邏輯段,要闡明邏輯中定義的邏輯段,要闡明邏輯段與段存放器的尋址關(guān)系。段與段存放器的尋址關(guān)系。ASSUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATA對(duì)數(shù)據(jù)段對(duì)數(shù)據(jù)段(有時(shí)還有堆棧段有時(shí)還有堆棧段),程序中要,程序中要包含初始化段存放器的語(yǔ)句。包含初始化段存放器的語(yǔ)句。MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXMOV ESMOV ES,AXAX程序中要包含前程序中要包含前往往DOSDOS的語(yǔ)句。的語(yǔ)句。M
6、OV AHMOV AH,4CH4CHINT 21HINT 21H源程序模塊源程序模塊以以END偽指令終了偽指令終了 END STARTEND START3.1.1 3.1.1 匯編言語(yǔ)源程序構(gòu)造匯編言語(yǔ)源程序構(gòu)造3.1.1 3.1.1 匯編言語(yǔ)源程序構(gòu)造匯編言語(yǔ)源程序構(gòu)造(1) (1) 運(yùn)用運(yùn)用DOSDOS的的4CH4CH號(hào)功能調(diào)用號(hào)功能調(diào)用這種方法是在代碼段終了前加調(diào)用語(yǔ)句:這種方法是在代碼段終了前加調(diào)用語(yǔ)句: MOV AH MOV AH,4CH 4CH ;功能號(hào);功能號(hào)4CHAH4CHAH INT 21H INT 21H ;中斷調(diào)用;中斷調(diào)用(2) (2) 運(yùn)用運(yùn)用20H20H號(hào)軟功能調(diào)用
7、號(hào)軟功能調(diào)用調(diào)用方式是在代碼段終了前加調(diào)用語(yǔ)句:調(diào)用方式是在代碼段終了前加調(diào)用語(yǔ)句: INT 20H INT 20H(3) (3) 運(yùn)用運(yùn)用DOSDOS的的0 0號(hào)功能調(diào)用號(hào)功能調(diào)用調(diào)用方式是在代碼段終了前加調(diào)用語(yǔ)句:調(diào)用方式是在代碼段終了前加調(diào)用語(yǔ)句: MOV AH MOV AH,0 0 INT 21H INT 21H2.2.前往前往DOSDOS形狀的方法形狀的方法 (4) (4) 將主程序定義為遠(yuǎn)過(guò)程將主程序定義為遠(yuǎn)過(guò)程 也稱為也稱為“規(guī)范序方法。這種方法是在代碼段開場(chǎng)處規(guī)范序方法。這種方法是在代碼段開場(chǎng)處按下述方式定義主程序:按下述方式定義主程序:CODE CODE SEGMENT SE
8、GMENT ASSUME ASSUME 主過(guò)程名主過(guò)程名PROC FARPROC FARPUSH DS PUSH DS SUB AXSUB AX,AX AX ;規(guī)范序;規(guī)范序 PUSH AXPUSH AX RET RET主過(guò)程名主過(guò)程名 ENDP ENDPEND END 主過(guò)程名主過(guò)程名3.1.1 3.1.1 匯編言語(yǔ)源程序構(gòu)造匯編言語(yǔ)源程序構(gòu)造 指令語(yǔ)句指令語(yǔ)句 偽指令語(yǔ)句偽指令語(yǔ)句 宏指令語(yǔ)句宏指令語(yǔ)句3.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句 語(yǔ)句是匯編言語(yǔ)程序的根本組成單位,用于規(guī)定匯編語(yǔ)句是匯編言語(yǔ)程序的根本組成單位,用于規(guī)定匯編言語(yǔ)的一個(gè)根本操作。匯編言語(yǔ)包含三種根本語(yǔ)句
9、:言語(yǔ)的一個(gè)根本操作。匯編言語(yǔ)包含三種根本語(yǔ)句: 是可執(zhí)行語(yǔ)句是可執(zhí)行語(yǔ)句, ,由硬件由硬件(CPU)(CPU)完成其功能,匯完成其功能,匯編時(shí)產(chǎn)生目的代碼編時(shí)產(chǎn)生目的代碼 。不可執(zhí)行語(yǔ)句,不可執(zhí)行語(yǔ)句,其功能由相應(yīng)軟其功能由相應(yīng)軟件完成,不產(chǎn)生件完成,不產(chǎn)生目的代碼。目的代碼。用戶定義的新指令,匯編用戶定義的新指令,匯編時(shí)產(chǎn)生相應(yīng)的目的代碼。時(shí)產(chǎn)生相應(yīng)的目的代碼。 標(biāo)號(hào)和名字標(biāo)號(hào)和名字分別是給指令單元和偽指令起的符分別是給指令單元和偽指令起的符號(hào)稱號(hào),統(tǒng)稱為標(biāo)識(shí)符。號(hào)稱號(hào),統(tǒng)稱為標(biāo)識(shí)符。( (留意組成的語(yǔ)法規(guī)那么留意組成的語(yǔ)法規(guī)那么) ) 助記符和定義符助記符和定義符分別用于規(guī)定指令語(yǔ)句的操
10、作分別用于規(guī)定指令語(yǔ)句的操作性質(zhì)和偽指令語(yǔ)句的偽操作功能,統(tǒng)稱操作符。性質(zhì)和偽指令語(yǔ)句的偽操作功能,統(tǒng)稱操作符。 操作數(shù)操作數(shù)操作數(shù)允許有多個(gè),這時(shí)各操作數(shù)之間操作數(shù)允許有多個(gè),這時(shí)各操作數(shù)之間要用逗號(hào)要用逗號(hào)“,隔開。,隔開。3.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句指令語(yǔ)句:指令語(yǔ)句: 標(biāo)號(hào):標(biāo)號(hào): 助記符助記符 操作數(shù)操作數(shù) ;注釋;注釋 偽指令語(yǔ)句:偽指令語(yǔ)句: 名字名字 定義符定義符 操作數(shù)操作數(shù) ;注釋;注釋 1. 1. 語(yǔ)句格式語(yǔ)句格式2. 2. 數(shù)數(shù) 據(jù)據(jù) 匯編言語(yǔ)中運(yùn)用的數(shù)據(jù)有常數(shù)、變量和標(biāo)號(hào)。匯編言語(yǔ)中運(yùn)用的數(shù)據(jù)有常數(shù)、變量和標(biāo)號(hào)。 (1) (1) 常數(shù)常數(shù) 常數(shù)
11、是指那些在匯編過(guò)程中已有確定數(shù)值的常數(shù)是指那些在匯編過(guò)程中已有確定數(shù)值的量,分為數(shù)值常數(shù)和字符串常數(shù)兩類。主要用作量,分為數(shù)值常數(shù)和字符串常數(shù)兩類。主要用作: : 指令語(yǔ)句中的立刻操作數(shù)指令語(yǔ)句中的立刻操作數(shù) 基址、變址或基址加變址尋址中的位移量基址、變址或基址加變址尋址中的位移量 偽指令語(yǔ)句中用于給變量賦初值偽指令語(yǔ)句中用于給變量賦初值3.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句 標(biāo)號(hào)是指令的符號(hào)化地址,一定在代碼段,而變標(biāo)號(hào)是指令的符號(hào)化地址,一定在代碼段,而變量是數(shù)據(jù)的符號(hào)化地址,普通在數(shù)據(jù)段,有時(shí)也可在量是數(shù)據(jù)的符號(hào)化地址,普通在數(shù)據(jù)段,有時(shí)也可在代碼段定義。代碼段定義。q 變
12、量與標(biāo)號(hào)有三個(gè)共同屬性:變量與標(biāo)號(hào)有三個(gè)共同屬性: 段基址:所在段的起始地址段基址:所在段的起始地址(SEG)(SEG) 偏移值:相對(duì)于段基址的位移量偏移值:相對(duì)于段基址的位移量(OFFSET)(OFFSET) 類型:所占存儲(chǔ)單元的字節(jié)數(shù)類型:所占存儲(chǔ)單元的字節(jié)數(shù)(TYPE)/NEAR(TYPE)/NEAR和和FARFAR(2) (2) 變量與標(biāo)號(hào)變量與標(biāo)號(hào)3.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句q變量與標(biāo)號(hào)區(qū)別變量與標(biāo)號(hào)區(qū)別標(biāo)號(hào)可以用作轉(zhuǎn)移控制類指令的操作數(shù),標(biāo)號(hào)可以用作轉(zhuǎn)移控制類指令的操作數(shù),但變量不能。但變量不能。變量可以用作基址、變址或基址加變址尋變量可以用作基址、變址或基
13、址加變址尋址的位移量,但標(biāo)號(hào)不能。址的位移量,但標(biāo)號(hào)不能。3.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句 例例3.1 3.1 假設(shè)假設(shè)VAR1VAR1和和VAR2VAR2為字變量,為字變量,LABLAB為程序中為程序中的一個(gè)標(biāo)號(hào),判別以下指令能否正確,假設(shè)錯(cuò)誤請(qǐng)指的一個(gè)標(biāo)號(hào),判別以下指令能否正確,假設(shè)錯(cuò)誤請(qǐng)指出錯(cuò)誤之處:出錯(cuò)誤之處: ADD VAR1 ADD VAR1,VAR2VAR2 SUB AL SUB AL,VAR1 VAR1 JNZ VAR1 JNZ VAR1 JMP LABSI JMP LABSI JMP NEAR LAB JMP NEAR LAB MOV AX MOV AX,
14、VAR1BXVAR1BX JMP VAR2BX JMP VAR2BX錯(cuò),不允許存儲(chǔ)器變量間直接傳數(shù)錯(cuò),不允許存儲(chǔ)器變量間直接傳數(shù)錯(cuò),源與目的操作數(shù)錯(cuò),源與目的操作數(shù)類型不一致類型不一致錯(cuò),變量不能用作條錯(cuò),變量不能用作條件轉(zhuǎn)移指令的操作數(shù)件轉(zhuǎn)移指令的操作數(shù)錯(cuò),標(biāo)號(hào)不能用作變錯(cuò),標(biāo)號(hào)不能用作變址尋址的位移量址尋址的位移量錯(cuò),缺錯(cuò),缺PTRPTR運(yùn)算符運(yùn)算符正確正確正確正確3.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句3. 3. 表達(dá)式表達(dá)式 表達(dá)式是匯編語(yǔ)句操作數(shù)的根本方式,由運(yùn)表達(dá)式是匯編語(yǔ)句操作數(shù)的根本方式,由運(yùn)算符和運(yùn)算對(duì)象組成。算符和運(yùn)算對(duì)象組成。算術(shù)運(yùn)算符邏輯運(yùn)算符關(guān)系運(yùn)算符匯編
15、言語(yǔ)特定的運(yùn)算符運(yùn)算符運(yùn)算符常數(shù)、變量和標(biāo)號(hào)操作數(shù)構(gòu)成程序的段和偏移量 運(yùn)算對(duì)象運(yùn)算對(duì)象3.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句 指在匯編過(guò)程中可以由匯編程序計(jì)算出數(shù)值的表指在匯編過(guò)程中可以由匯編程序計(jì)算出數(shù)值的表達(dá)式??勺鳛橹噶钪械牧⒖滩僮鲾?shù)和數(shù)據(jù)區(qū)中的初值達(dá)式??勺鳛橹噶钪械牧⒖滩僮鲾?shù)和數(shù)據(jù)區(qū)中的初值運(yùn)用。例如:運(yùn)用。例如: MOV BX MOV BX,0FFF0H AND 0B234H0FFF0H AND 0B234H MOV AL MOV AL,4CH EQ 24CH EQ 2 MOV AH MOV AH,4CH GT 14CH GT 1 MOV AX MOV AX,SEG
16、 LABLESEG LABLE表達(dá)式又分為數(shù)值表達(dá)式和地址表達(dá)式:表達(dá)式又分為數(shù)值表達(dá)式和地址表達(dá)式:3.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句q數(shù)值表達(dá)式數(shù)值表達(dá)式 其值表示存儲(chǔ)器地址,普通都是段內(nèi)的偏移地其值表示存儲(chǔ)器地址,普通都是段內(nèi)的偏移地址。與變量一樣,地址表達(dá)式也具有段值、偏移值址。與變量一樣,地址表達(dá)式也具有段值、偏移值和類型屬性。地址表達(dá)式主要用來(lái)表示指令語(yǔ)句中和類型屬性。地址表達(dá)式主要用來(lái)表示指令語(yǔ)句中的操作數(shù),例如:的操作數(shù),例如: MOV AX MOV AX,BASEEAXEBXBASEEAXEBX JMP BASEEAX JMP BASEEAX LEA BX
17、LEA BX,BASE+12BASE+123.1.2 3.1.2 匯編言語(yǔ)的語(yǔ)句匯編言語(yǔ)的語(yǔ)句q地址表達(dá)式地址表達(dá)式3.2.1 3.2.1 程序構(gòu)造偽指令語(yǔ)句程序構(gòu)造偽指令語(yǔ)句3.2.2 3.2.2 符號(hào)定義偽指令符號(hào)定義偽指令3.2.3 3.2.3 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令3.2.4 3.2.4 過(guò)程與宏定義偽指令過(guò)程與宏定義偽指令3.2.5 3.2.5 構(gòu)造定義偽指令構(gòu)造定義偽指令 3.2 3.2 偽指令語(yǔ)句偽指令語(yǔ)句3.2.1 3.2.1 程序構(gòu)造偽指令語(yǔ)句程序構(gòu)造偽指令語(yǔ)句方式選擇偽指令方式選擇偽指令完好段定義偽指令完好段定義偽指令指定地址偽指令指定地址偽指令模塊定義偽指令模塊定義
18、偽指令 這類語(yǔ)句是與程序構(gòu)造嚴(yán)密相關(guān)的根本偽指令語(yǔ)這類語(yǔ)句是與程序構(gòu)造嚴(yán)密相關(guān)的根本偽指令語(yǔ)句,用于闡明句,用于闡明CPUCPU的類型、邏輯段構(gòu)造、源程序的類型、邏輯段構(gòu)造、源程序( (或?;蚰K塊) )起止信息和段內(nèi)存的安排等。主要包括起止信息和段內(nèi)存的安排等。主要包括: : 1. 1. 方式選擇偽指令方式選擇偽指令 方式選擇偽指令用于通知匯編程序,當(dāng)前的方式選擇偽指令用于通知匯編程序,當(dāng)前的源程序指令是哪一種源程序指令是哪一種CPUCPU指令,經(jīng)過(guò)匯編鏈接之后指令,經(jīng)過(guò)匯編鏈接之后生成的目的程序在哪一種生成的目的程序在哪一種CPUCPU機(jī)型上運(yùn)轉(zhuǎn)。不屬于機(jī)型上運(yùn)轉(zhuǎn)。不屬于選定選定CPUCP
19、U的指令均為非法指令。所以,方式選擇偽的指令均為非法指令。所以,方式選擇偽指令本質(zhì)上也就是指令集選擇偽指令。指令本質(zhì)上也就是指令集選擇偽指令。 通常通常, ,方式選擇偽指令放在程序的頭部方式選擇偽指令放在程序的頭部, ,作為作為源程序的第一條語(yǔ)句。缺省時(shí)默許源程序的第一條語(yǔ)句。缺省時(shí)默許80868086指令集。指令集。 3.2.1 3.2.1 程序構(gòu)造偽指令語(yǔ)句程序構(gòu)造偽指令語(yǔ)句2. 2. 完好段定義偽指令完好段定義偽指令 采用完好段定義偽指令可詳細(xì)控制匯編程序采用完好段定義偽指令可詳細(xì)控制匯編程序MASMMASM和鏈接程序和鏈接程序LINKLINK在內(nèi)存中組織代在內(nèi)存中組織代碼和數(shù)據(jù)的方式。
20、碼和數(shù)據(jù)的方式。 主要包括段定義語(yǔ)句和段存放器闡明語(yǔ)句。主要包括段定義語(yǔ)句和段存放器闡明語(yǔ)句。 3.2.1 3.2.1 程序構(gòu)造偽指令語(yǔ)句程序構(gòu)造偽指令語(yǔ)句3.2.1 3.2.1 程序構(gòu)造偽指令語(yǔ)句程序構(gòu)造偽指令語(yǔ)句 段定義語(yǔ)句段定義語(yǔ)句 格式:格式:段名段名 SEGMENT SEGMENT 定位類型定位類型,組合類型組合類型,字長(zhǎng)選擇字長(zhǎng)選擇,類別類別 段體段體 ;由指令、偽指令和宏指令語(yǔ)句組成;由指令、偽指令和宏指令語(yǔ)句組成段名段名 ENDS ENDS 闡明:闡明: (1) SEGMENT/ENDS (1) SEGMENT/ENDS是一對(duì)段定義語(yǔ)句是一對(duì)段定義語(yǔ)句, ,一個(gè)邏輯段從一個(gè)邏輯
21、段從SEGMENTSEGMENT語(yǔ)句開場(chǎng),到語(yǔ)句開場(chǎng),到ENDSENDS語(yǔ)句終了。語(yǔ)句終了。(2) (2) 段名是用戶定義的段的標(biāo)識(shí)符,用于指明段的基址。段名是用戶定義的段的標(biāo)識(shí)符,用于指明段的基址。 (3) 4 (3) 4個(gè)可選參數(shù)用于為源程序的匯編、銜接提供必要的信個(gè)可選參數(shù)用于為源程序的匯編、銜接提供必要的信息,特別是模塊化程序,各個(gè)模塊如何定位息,特別是模塊化程序,各個(gè)模塊如何定位, ,彼此之間如何銜彼此之間如何銜接,將較多地涉及到定位類型和組合類型的選擇。接,將較多地涉及到定位類型和組合類型的選擇。指定段起點(diǎn)的邊境類型指定段起點(diǎn)的邊境類型: : BYTE BYTE字節(jié)字節(jié) WORD
22、WORD字字 DWORD DWORD雙字雙字 PARA PARA節(jié)節(jié) PAGE PAGE頁(yè)頁(yè) 定位類型定位類型通知鏈接程序本段與其它模塊中同名段的組合銜接關(guān)系通知鏈接程序本段與其它模塊中同名段的組合銜接關(guān)系: : PUBLIC PUBLIC 銜接到同一個(gè)物理段中銜接到同一個(gè)物理段中 STACK STACK 銜接到同一個(gè)物理堆棧段中銜接到同一個(gè)物理堆棧段中, ,并給并給SS:ESPSS:ESP賦值賦值 COMMON COMMON 產(chǎn)生一個(gè)覆蓋段。產(chǎn)生一個(gè)覆蓋段。 MEMORY MEMORY AT AT表達(dá)式表達(dá)式 組合類型組合類型定義段中運(yùn)用的偏移地址和存放器的字長(zhǎng)定義段中運(yùn)用的偏移地址和存放器
23、的字長(zhǎng) USE16 USE16 表示該段字長(zhǎng)為表示該段字長(zhǎng)為1616位位 USE32 USE32 表示該段字長(zhǎng)為表示該段字長(zhǎng)為3232位位字長(zhǎng)選擇字長(zhǎng)選擇 組合銜接舉例:組合銜接舉例:模塊模塊2 2從模塊:從模塊:DSEG SEGMENT COMMONDSEG SEGMENT COMMON ARRAY_B DW 200 DUP(?) ARRAY_B DW 200 DUP(?)DSEG ENDSDSEG ENDSSSEG SEGMENT STACKSSEG SEGMENT STACK DW 50 DUP(?) DW 50 DUP(?)SSEG ENDSSSEG ENDSCSEG SEGMENT
24、PUBLICCSEG SEGMENT PUBLIC CSEG ENDSCSEG ENDS END END模塊模塊1 1主模塊:主模塊:DSEG SEGMENT COMMONDSEG SEGMENT COMMON ARRAY_A DW 100 DUP(?) ARRAY_A DW 100 DUP(?)DSEG ENDSDSEG ENDSSSEG SEGMENT STACKSSEG SEGMENT STACK DW 50 DUP(?) DW 50 DUP(?)SSEG ENDSSSEG ENDSCSEG SEGMENT PUBLICCSEG SEGMENT PUBLIC ASSUME CS:CSEG
25、,DS:DSEG,SS:SSEG ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AXSTART: MOV AX,DSEGDSEG MOV DS MOV DS,AXAX CSEG ENDSCSEG ENDS END START END STARTCSEGCSEGDSEGDSEG( (共共400400字節(jié)字節(jié)) )模塊模塊2 2代碼代碼模塊模塊2 2數(shù)據(jù)數(shù)據(jù)SSEGSSEG( (共共200200字節(jié)字節(jié)) )模塊模塊1 1代碼代碼模塊模塊2 2堆棧堆棧模塊模塊1 1數(shù)據(jù)數(shù)據(jù)邏輯段組合表示圖邏輯段組合表示圖模塊模塊1 1堆棧堆棧3.2.1 3.2.1 程序構(gòu)造偽指
26、令語(yǔ)句程序構(gòu)造偽指令語(yǔ)句 段存放器闡明語(yǔ)句段存放器闡明語(yǔ)句 格式:格式: ASSUME ASSUME 段存放器段存放器: :段名段名 ,段存放器,段存放器: :段名,段名, 功能功能: : 闡明源程序中定義的段由那個(gè)段存放器去尋闡明源程序中定義的段由那個(gè)段存放器去尋址。址。 闡明:闡明: CS CS只能用于包含有程序的段只能用于包含有程序的段, ,反之含有程反之含有程序的段也只能以序的段也只能以CSCS作為段存放器。作為段存放器。SSSS也一樣,只也一樣,只能與堆棧段對(duì)應(yīng)。能與堆棧段對(duì)應(yīng)。 CS CS所對(duì)應(yīng)的段名必需在該語(yǔ)句之前有定義。所對(duì)應(yīng)的段名必需在該語(yǔ)句之前有定義。 該語(yǔ)句是闡明性語(yǔ)句。
27、該語(yǔ)句是闡明性語(yǔ)句。 3.2.1 3.2.1 程序構(gòu)造偽指令語(yǔ)句程序構(gòu)造偽指令語(yǔ)句3. 3. 指定地址偽指令指定地址偽指令 格式格式: ORG : ORG 偏移地址偏移地址 ORG $ + ORG $ + 偏移地址偏移地址功能功能: : 該偽指令以其指定的偏移地址或由該偽指令以其指定的偏移地址或由$ $ 給出的給出的當(dāng)前地址加上指定的偏移地址作為當(dāng)前開場(chǎng)分配和當(dāng)前地址加上指定的偏移地址作為當(dāng)前開場(chǎng)分配和運(yùn)用的偏移地址。運(yùn)用的偏移地址。3.2.1 3.2.1 程序構(gòu)造偽指令語(yǔ)句程序構(gòu)造偽指令語(yǔ)句4. 4. 模塊定義偽指令模塊定義偽指令 模塊定義偽指令包括模塊開場(chǎng)和模塊終了語(yǔ)句。模塊定義偽指令包括
28、模塊開場(chǎng)和模塊終了語(yǔ)句。 (1) (1) 模塊開場(chǎng)語(yǔ)句模塊開場(chǎng)語(yǔ)句(NAME)(NAME) 格式:格式:NAME NAME 模塊名模塊名 功能:指示源程序開場(chǎng),并指出該源程序的模塊名。功能:指示源程序開場(chǎng),并指出該源程序的模塊名。 (2) (2) 模塊終了語(yǔ)句模塊終了語(yǔ)句(END)(END) 格式:格式:END END 標(biāo)號(hào)標(biāo)號(hào)/ /過(guò)程名過(guò)程名 功能:模塊終了語(yǔ)句表示源程序到此終了。功能:模塊終了語(yǔ)句表示源程序到此終了。 3.2.1 3.2.1 程序構(gòu)造偽指令語(yǔ)句程序構(gòu)造偽指令語(yǔ)句3.2.2 3.2.2 符號(hào)定義偽指令符號(hào)定義偽指令格式格式: :賦值語(yǔ)句:符號(hào)名賦值語(yǔ)句:符號(hào)名 EQU EQ
29、U 表達(dá)式表達(dá)式 功能功能: : 都是用符號(hào)名替代表達(dá)式的值。但賦值都是用符號(hào)名替代表達(dá)式的值。但賦值語(yǔ)句定義的符號(hào)名不能重新定義,而等號(hào)語(yǔ)句語(yǔ)句定義的符號(hào)名不能重新定義,而等號(hào)語(yǔ)句允許。允許。1. 1. 符號(hào)常數(shù)定義偽指令符號(hào)常數(shù)定義偽指令等號(hào)語(yǔ)句:符號(hào)名等號(hào)語(yǔ)句:符號(hào)名 = = 表達(dá)式表達(dá)式 例例3.2 3.2 賦值語(yǔ)句與等號(hào)語(yǔ)句舉例。賦值語(yǔ)句與等號(hào)語(yǔ)句舉例。賦值語(yǔ)句:賦值語(yǔ)句:X EQU 50X EQU 50Y EQU X +10Y EQU X +10COUNT EQU $ - ARRYCOUNT EQU $ - ARRY等號(hào)語(yǔ)句:等號(hào)語(yǔ)句:CON = 5CON = 5BASE = 20
30、0HBASE = 200H BASE = BASE + 10HBASE = BASE + 10H;重新定義;重新定義BASEBASE3.2.2 3.2.2 符號(hào)定義偽指令符號(hào)定義偽指令2. 定義符號(hào)名偽指令定義符號(hào)名偽指令格式:格式: 符號(hào)名符號(hào)名 LABEL LABEL 類型類型 功能:將緊跟在本偽指令后的標(biāo)號(hào)、操作碼、過(guò)程或變功能:將緊跟在本偽指令后的標(biāo)號(hào)、操作碼、過(guò)程或變量建立新的符號(hào)名,并刷新其類型,但它并不為新指定量建立新的符號(hào)名,并刷新其類型,但它并不為新指定的變量或標(biāo)號(hào)分配存儲(chǔ)空間。的變量或標(biāo)號(hào)分配存儲(chǔ)空間。 例如:例如: SUB_FAR LABEL FAR ;遠(yuǎn)調(diào)用入口;遠(yuǎn)調(diào)用
31、入口 SUB_NEAR: MOV AL,SI ;近調(diào)用入口;近調(diào)用入口 兩個(gè)標(biāo)號(hào)兩個(gè)標(biāo)號(hào)SUB_FAR和和SUB_NEAR均指向同一條均指向同一條指令,前者為遠(yuǎn)標(biāo)號(hào),后者為近標(biāo)號(hào)。指令,前者為遠(yuǎn)標(biāo)號(hào),后者為近標(biāo)號(hào)。 3.2.2 3.2.2 符號(hào)定義偽指令符號(hào)定義偽指令3.2.3 3.2.3 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令偽指令格式偽指令格式: :DBDBDWDWDDDDDFDFDQDQDTDT數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng) ,數(shù)據(jù)項(xiàng),數(shù)據(jù)項(xiàng),數(shù)據(jù)項(xiàng),數(shù)據(jù)項(xiàng) 變量名變量名 功能功能: : 是為數(shù)據(jù)項(xiàng)或項(xiàng)表分配存儲(chǔ)空間,給是為數(shù)據(jù)項(xiàng)或項(xiàng)表分配存儲(chǔ)空間,給它們賦初值,并用一個(gè)符號(hào)名稱為變量與之它們賦初值,并用一個(gè)符號(hào)名
32、稱為變量與之相聯(lián)絡(luò)。相聯(lián)絡(luò)。8 8位字節(jié)位字節(jié)1616位字位字3232位雙字位雙字4848位長(zhǎng)字位長(zhǎng)字6464位四字位四字8080位十字節(jié)位十字節(jié) 運(yùn)用闡明運(yùn)用闡明: : 給變量賦初值可以是賦確定的值,也可以是賦不確給變量賦初值可以是賦確定的值,也可以是賦不確定的值定的值( (用用“? ?表示表示),),還可以是用還可以是用DUPDUP運(yùn)算符建立的多次拷貝。運(yùn)算符建立的多次拷貝。 例例3.3 3.3 運(yùn)用運(yùn)用80X8680X86匯編言語(yǔ)的偽操作命令定義:匯編言語(yǔ)的偽操作命令定義: VAL DB 93 DUP(5 VAL DB 93 DUP(5,2 DUP(2 DUP(1,2 DUP(3),4)
33、 2 DUP(2 DUP(1,2 DUP(3),4) 那么在那么在VALVAL存儲(chǔ)區(qū)內(nèi)前存儲(chǔ)區(qū)內(nèi)前1010個(gè)字節(jié)單元的數(shù)據(jù)是個(gè)字節(jié)單元的數(shù)據(jù)是 ? 解:由內(nèi)向外逐層展開,分別相當(dāng)于:解:由內(nèi)向外逐層展開,分別相當(dāng)于: 93 DUP(5 93 DUP(5,2 DUP(2 DUP(12 DUP(2 DUP(1,3 3,3)3),4)4) 93 DUP(5 93 DUP(5,2 DUP(12 DUP(1,3 3,3 3,1 1,3 3,3 3,4)4) 93 DUP(5,1,3,3,1,3,3,4,1,3,3,1,3,3,4) 93 DUP(5,1,3,3,1,3,3,4,1,3,3,1,3,3,4
34、)即表示反復(fù)即表示反復(fù)9393個(gè)數(shù)據(jù)序列個(gè)數(shù)據(jù)序列: : 5 5,1 1,3 3,3 3,1 1,3 3,3 3,4 4,1 1,3 3,3 3,1 1,3 3,3 3,4 43.2.3 3.2.3 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 運(yùn)用運(yùn)用SEGSEG、OFFSETOFFSET、TYPETYPE、LENGTHLENGTH和和SIZESIZE運(yùn)算符求變量的各種屬性時(shí),特別要留意:運(yùn)算符求變量的各種屬性時(shí),特別要留意: 對(duì)對(duì)LENGTHLENGTH運(yùn)算符,假設(shè)變量是用反復(fù)數(shù)據(jù)操運(yùn)算符,假設(shè)變量是用反復(fù)數(shù)據(jù)操作符作符DUPDUP闡明的,那么前往外層闡明的,那么前往外層DUPDUP給定的值;給定的值;假
35、設(shè)沒(méi)有假設(shè)沒(méi)有DUPDUP闡明,那么前往值總是闡明,那么前往值總是1 1。 對(duì)對(duì)SIZESIZE運(yùn)算符有:運(yùn)算符有:SIZE =TYPESIZE =TYPELENGTHLENGTH運(yùn)用闡明運(yùn)用闡明: :3.2.3 3.2.3 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 解解: : 此題有兩層此題有兩層DUPDUP定義,但最外層定義,但最外層DUPDUP給定的值給定的值為為100100,所以:,所以: BXBX= = 數(shù)組數(shù)組ARRAYARRAY的偏移地址;的偏移地址; CXCX= = 數(shù)組數(shù)組ARRAYARRAY的長(zhǎng)度的長(zhǎng)度 = 100 = 100; SISI= = 數(shù)組數(shù)組ARRAYARRAY的類型的類型
36、 = 2 = 2。 例例3.4 3.4 假設(shè)數(shù)組假設(shè)數(shù)組ARRAYARRAY在數(shù)據(jù)段中已作如下定義:在數(shù)據(jù)段中已作如下定義: ARRAY DW 100 DUP(123H ARRAY DW 100 DUP(123H,3 DUP(?)3 DUP(?),1234H1234H試指出以下指令執(zhí)行后,有關(guān)存放器的內(nèi)容是多少?試指出以下指令執(zhí)行后,有關(guān)存放器的內(nèi)容是多少?MOVMOV BX BX,OFFSET ARRAYOFFSET ARRAYMOVMOV CX CX,LENGTH ARRAYLENGTH ARRAYMOVMOV SI SI,0 0ADDADD SI SI,TYPE ARRAYTYPE AR
37、RAY3.2.3 3.2.3 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 操作符操作符“$ $是取地址計(jì)數(shù)器的當(dāng)前值,常用于表是取地址計(jì)數(shù)器的當(dāng)前值,常用于表達(dá)式定義數(shù)組長(zhǎng)度。達(dá)式定義數(shù)組長(zhǎng)度。0100H03H0101H00H0102H06H0103H01H0104H05H0105H00H0106H06H0107H00H0108H07H0109H08H010AH08H010BH09H解:畫出數(shù)組解:畫出數(shù)組ARYARY的內(nèi)存分配圖。的內(nèi)存分配圖。AXAX=ARY+2=0102H =0106H=ARY+2=0102H =0106HBXBX=ARY+10=010AH=0908H=ARY+10=010AH=090
38、8H運(yùn)用闡明運(yùn)用闡明: :3.2.3 3.2.3 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 運(yùn)用運(yùn)用DBDB、DWDW、DDDD定義串?dāng)?shù)據(jù)定義串?dāng)?shù)據(jù)( (用用 定義的定義的字符串字符串) )時(shí)時(shí), ,允許定義的串長(zhǎng)度不同,字符的存放允許定義的串長(zhǎng)度不同,字符的存放順序也不一樣:順序也不一樣: DBDB是從左至右順序?yàn)槊總€(gè)字符分配一個(gè)字節(jié)單元;是從左至右順序?yàn)槊總€(gè)字符分配一個(gè)字節(jié)單元; DWDW是從左至右順序?yàn)槊渴菑淖笾劣翼樞驗(yàn)槊? 2 個(gè)字符分配一個(gè)字單元,個(gè)字符分配一個(gè)字單元,且前面的字符在高字節(jié)且前面的字符在高字節(jié), ,串長(zhǎng)度不能超越串長(zhǎng)度不能超越2 2; DDDD是從左至右順序?yàn)槊渴菑淖笾劣翼樞驗(yàn)槊?/p>
39、4 4 個(gè)字符分配一個(gè)雙字單元,個(gè)字符分配一個(gè)雙字單元,也是按前面的字符在高字節(jié)順序存放,串長(zhǎng)度不能也是按前面的字符在高字節(jié)順序存放,串長(zhǎng)度不能超越超越4 4。3.2.3 3.2.3 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 例例3.6 3.6 今需在變量名為今需在變量名為STRINGSTRING的數(shù)據(jù)區(qū)中依的數(shù)據(jù)區(qū)中依次存放數(shù)據(jù)次存放數(shù)據(jù)A A、B B、C C、D D、E E、F F、G G、H H,請(qǐng)寫出分別用匯編命令請(qǐng)寫出分別用匯編命令DBDB、DWDW和和DDDD實(shí)現(xiàn)的語(yǔ)句。實(shí)現(xiàn)的語(yǔ)句。解:用解:用DBDB、DWDW和和DDDD實(shí)現(xiàn)的語(yǔ)句分別為:實(shí)現(xiàn)的語(yǔ)句分別為: STRING DB STRING
40、 DB ABCDEFGHABCDEFGH STRING DW STRING DW BABA,DCDC,F(xiàn)EFE,HGHG STRING DD STRING DD DCBADCBA,HGFEHGFE3.2.3 3.2.3 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令3.2.4 3.2.4 過(guò)程與宏定義偽指令過(guò)程與宏定義偽指令過(guò)程定義偽指令過(guò)程定義偽指令宏定義偽指令宏定義偽指令宏和過(guò)程的比較宏和過(guò)程的比較格式:過(guò)程名格式:過(guò)程名 PROC PROC 屬性屬性 ;過(guò)程體;過(guò)程體 RET RET RET RET 過(guò)程名過(guò)程名 ENDP ENDP 闡明:闡明: 過(guò)程允許嵌套調(diào)用,還可以遞歸調(diào)用。過(guò)程允許嵌套調(diào)用,還可以
41、遞歸調(diào)用。 過(guò)程與邏輯段也可以相互嵌套,但決不允過(guò)程與邏輯段也可以相互嵌套,但決不允許過(guò)程與段交叉覆蓋。許過(guò)程與段交叉覆蓋。 過(guò)程又稱為子程序。它是一段必需經(jīng)過(guò)過(guò)程又稱為子程序。它是一段必需經(jīng)過(guò)CALLCALL指令調(diào)指令調(diào)用才干執(zhí)行的程序段,執(zhí)行完后經(jīng)過(guò)一條用才干執(zhí)行的程序段,執(zhí)行完后經(jīng)過(guò)一條RETRET指令前往原指令前往原調(diào)用途。過(guò)程需先定義才干調(diào)用。調(diào)用途。過(guò)程需先定義才干調(diào)用。 過(guò)程體中必需至少包含一過(guò)程體中必需至少包含一條條RETRET指令,這是過(guò)程的出口。指令,這是過(guò)程的出口。但也允許過(guò)程有多條但也允許過(guò)程有多條RETRET指令,指令,即過(guò)程有多個(gè)出口。即過(guò)程有多個(gè)出口。1.1.過(guò)程
42、定義偽指令過(guò)程定義偽指令 3.2.4 3.2.4 過(guò)程與宏定義偽指令過(guò)程與宏定義偽指令 宏定義格式:宏定義格式: 宏名宏名 MACRO MACRO 方式參數(shù)表方式參數(shù)表 ;宏體;宏體 ENDM ENDM 闡明:宏定義的宏名必需獨(dú)一,稱為宏指令。宏指令闡明:宏定義的宏名必需獨(dú)一,稱為宏指令。宏指令一經(jīng)定義就可以在源程序的任何地方調(diào)用。相當(dāng)于由用戶一經(jīng)定義就可以在源程序的任何地方調(diào)用。相當(dāng)于由用戶給匯編程序提供了一個(gè)新的操作碼。給匯編程序提供了一個(gè)新的操作碼。 宏調(diào)用格式:宏調(diào)用格式: 宏名宏名 實(shí)踐參數(shù)表實(shí)踐參數(shù)表 3.2.4 3.2.4 過(guò)程與宏定義偽指令過(guò)程與宏定義偽指令 宏的概念與過(guò)程很類
43、似,也是用一個(gè)宏名字來(lái)替代源宏的概念與過(guò)程很類似,也是用一個(gè)宏名字來(lái)替代源程序中經(jīng)常要用到的一個(gè)程序模塊。程序中經(jīng)常要用到的一個(gè)程序模塊。 2. 2. 宏定義偽指令宏定義偽指令 3.2.4 3.2.4 過(guò)程與宏定義偽指令過(guò)程與宏定義偽指令 運(yùn)用宏定義和宏調(diào)用時(shí)要留意兩個(gè)問(wèn)題:運(yùn)用宏定義和宏調(diào)用時(shí)要留意兩個(gè)問(wèn)題: 對(duì)帶參數(shù)的宏指令,宏調(diào)用時(shí)實(shí)踐參數(shù)與方對(duì)帶參數(shù)的宏指令,宏調(diào)用時(shí)實(shí)踐參數(shù)與方式參數(shù)的類型要一致,以免產(chǎn)生無(wú)效調(diào)用式參數(shù)的類型要一致,以免產(chǎn)生無(wú)效調(diào)用 。 宏調(diào)用是用宏體中定義的指令序列交換宏指宏調(diào)用是用宏體中定義的指令序列交換宏指令,所以宏體內(nèi)的標(biāo)號(hào)要用令,所以宏體內(nèi)的標(biāo)號(hào)要用LOCA
44、LLOCAL偽指令闡明為偽指令闡明為部分標(biāo)號(hào),以免多次調(diào)用宏時(shí),發(fā)生標(biāo)號(hào)反復(fù)部分標(biāo)號(hào),以免多次調(diào)用宏時(shí),發(fā)生標(biāo)號(hào)反復(fù)定義錯(cuò)誤。定義錯(cuò)誤。LOCALLOCAL偽指令格式:偽指令格式: LOCAL LOCAL 標(biāo)號(hào)標(biāo)號(hào)11,標(biāo)號(hào),標(biāo)號(hào)2 2, 解:宏定義如下:解:宏定義如下: MOVE MACRO SARY MOVE MACRO SARY,DARYDARY LOCAL LP LOCAL LP MOV SI MOV SI,0 0 MOV CX MOV CX,100100 LP LP: MOV AL MOV AL,SARYSISARYSI MOV DARYSI MOV DARYSI,ALAL INC
45、SI INC SI LOOP LP LOOP LP ENDM ENDM 例例3.7 3.7 定義宏定義宏MOVEMOVE,其功能是將一個(gè)有,其功能是將一個(gè)有100100個(gè)字個(gè)字節(jié)元素的數(shù)組搬移到另一個(gè)數(shù)據(jù)區(qū)。節(jié)元素的數(shù)組搬移到另一個(gè)數(shù)據(jù)區(qū)。進(jìn)展宏調(diào)用:進(jìn)展宏調(diào)用: MOVE FIRST MOVE FIRST,SECONDSECOND宏展開如下:宏展開如下: MOV SI MOV SI,0 0 MOV CX MOV CX,100100?0000:MOV AL?0000:MOV AL,F(xiàn)IRSTSIFIRSTSI MOV SECONDSI MOV SECONDSI,ALAL INC SI INC
46、SI LOOP ?0000 LOOP ?00003.2.4 3.2.4 過(guò)程與宏定義偽指令過(guò)程與宏定義偽指令 3. 3. 宏和過(guò)程的比較宏和過(guò)程的比較 宏和過(guò)程都可簡(jiǎn)化源程序的書寫,因此也減少了程序宏和過(guò)程都可簡(jiǎn)化源程序的書寫,因此也減少了程序出錯(cuò)的能夠性。但兩者運(yùn)用上也有區(qū)別出錯(cuò)的能夠性。但兩者運(yùn)用上也有區(qū)別: :3.2.4 3.2.4 過(guò)程與宏定義偽指令過(guò)程與宏定義偽指令 (1) (1) 宏操作可以直接傳送和接納參數(shù),而過(guò)程不能直宏操作可以直接傳送和接納參數(shù),而過(guò)程不能直接帶參數(shù)。當(dāng)過(guò)程之間需求傳送參數(shù)時(shí),必需經(jīng)過(guò)堆棧、接帶參數(shù)。當(dāng)過(guò)程之間需求傳送參數(shù)時(shí),必需經(jīng)過(guò)堆棧、存放器或存儲(chǔ)器來(lái)進(jìn)展
47、,編程比宏要復(fù)雜。存放器或存儲(chǔ)器來(lái)進(jìn)展,編程比宏要復(fù)雜。 所以所以, ,宏匯編適宜于代碼較短宏匯編適宜于代碼較短, ,傳送參數(shù)較多的子功能段運(yùn)傳送參數(shù)較多的子功能段運(yùn)用用, ,子程序適宜于代碼較長(zhǎng)子程序適宜于代碼較長(zhǎng), ,調(diào)用比較頻繁的子功能段運(yùn)用。調(diào)用比較頻繁的子功能段運(yùn)用。 (3) (3) 引入宏操作并不會(huì)在執(zhí)行目的代碼時(shí)添加額外的引入宏操作并不會(huì)在執(zhí)行目的代碼時(shí)添加額外的時(shí)間開銷,但過(guò)程調(diào)用由于要維護(hù)和恢復(fù)現(xiàn)場(chǎng)及斷點(diǎn),因時(shí)間開銷,但過(guò)程調(diào)用由于要維護(hù)和恢復(fù)現(xiàn)場(chǎng)及斷點(diǎn),因此會(huì)延伸目的程序的執(zhí)行時(shí)間。此會(huì)延伸目的程序的執(zhí)行時(shí)間。 (2) (2) 子程序不論被調(diào)用多少次它都只被匯編一次,即子程
48、序不論被調(diào)用多少次它都只被匯編一次,即有獨(dú)一的一段目的代碼有獨(dú)一的一段目的代碼; ;而宏指令那么調(diào)用多少次就匯編多而宏指令那么調(diào)用多少次就匯編多少次,每次調(diào)用都要在程序中展開并保管宏體中的每一行少次,每次調(diào)用都要在程序中展開并保管宏體中的每一行。3.2.5 3.2.5 構(gòu)造定義偽指令構(gòu)造定義偽指令 在一些運(yùn)用中,常需求將一些不同類型的數(shù)據(jù)組在一些運(yùn)用中,常需求將一些不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)整體。這時(shí)就要用到匯編言語(yǔ)的構(gòu)造化合成一個(gè)有機(jī)整體。這時(shí)就要用到匯編言語(yǔ)的構(gòu)造化數(shù)據(jù)數(shù)據(jù)構(gòu)造。構(gòu)造。 與前述的字節(jié)、字類型數(shù)據(jù)不同,一個(gè)構(gòu)造必與前述的字節(jié)、字類型數(shù)據(jù)不同,一個(gè)構(gòu)造必需先經(jīng)定義后才可以闡明
49、屬于這種構(gòu)造類型的變量,需先經(jīng)定義后才可以闡明屬于這種構(gòu)造類型的變量,這是由于構(gòu)造的組成是千變?nèi)f化的。所以圍繞構(gòu)造這是由于構(gòu)造的組成是千變?nèi)f化的。所以圍繞構(gòu)造定義,有兩種偽指令語(yǔ)句定義,有兩種偽指令語(yǔ)句: :2. 2. 構(gòu)造變量闡明與賦初值語(yǔ)句構(gòu)造變量闡明與賦初值語(yǔ)句 1. 1. 構(gòu)造類型闡明語(yǔ)句構(gòu)造類型闡明語(yǔ)句(STRUC/ENDS)(STRUC/ENDS)3.2.5 3.2.5 構(gòu)造定義偽指令構(gòu)造定義偽指令 語(yǔ)句格式:語(yǔ)句格式: 構(gòu)造名構(gòu)造名 STRUC STRUC ;構(gòu)造體,由數(shù)據(jù)定義語(yǔ)句構(gòu)成;構(gòu)造體,由數(shù)據(jù)定義語(yǔ)句構(gòu)成 構(gòu)造名構(gòu)造名 ENDS ENDSDATE STRUCDATE ST
50、RUC MONTH DB MONTH DB ? DAY DB DAY DB ? YEAR DW YEAR DW ?DATE ENDSDATE ENDS 構(gòu)造構(gòu)造DATEDATE的存儲(chǔ)方式的存儲(chǔ)方式MONTHMONTH1 1字節(jié)字節(jié)DAYDAY1 1字節(jié)字節(jié)YEARYEAR2 2字節(jié)字節(jié) 構(gòu)造的定義明確地描畫了該構(gòu)造的組織方式,它通知構(gòu)造的定義明確地描畫了該構(gòu)造的組織方式,它通知匯編程序?qū)儆谶@種組織方式的變量運(yùn)用內(nèi)存的方式。例如匯編程序?qū)儆谶@種組織方式的變量運(yùn)用內(nèi)存的方式。例如: : 1. 1. 構(gòu)造類型闡明語(yǔ)句構(gòu)造類型闡明語(yǔ)句(STRUC/ENDS)(STRUC/ENDS)語(yǔ)句格式:語(yǔ)句格式:
51、 變量名變量名 構(gòu)造名構(gòu)造名 域值表域值表 例如:例如: VAR DATE 4 VAR DATE 2019H構(gòu)造變量構(gòu)造變量VARVAR的存儲(chǔ)方式的存儲(chǔ)方式MONTHMONTH1 1字節(jié)字節(jié)DAYDAY1 1字節(jié)字節(jié)YEARYEAR2 2字節(jié)字節(jié)04H04H03H03H 04H 04H20H20HVARVAR3. 3. 構(gòu)造的援用構(gòu)造的援用有兩種方法:有兩種方法:構(gòu)造變量名構(gòu)造變量名. .域名域名 基址或變址存放器基址或變址存放器.域域名名MOV AXMOV AX, VAR.YEAR VAR.YEARMOV CLMOV CL, VAR.DAY VAR.DAY上述援用也可用如下方法上述援用也可用
52、如下方法: :MOV BXMOV BX,OFFSET VAR OFFSET VAR MOV AXMOV AX,BX.YEARBX.YEARMOV CLMOV CL,BX.DAYBX.DAY3.2.5 3.2.5 構(gòu)造定義偽指令構(gòu)造定義偽指令2. 2. 構(gòu)造變量闡明與賦初值語(yǔ)句構(gòu)造變量闡明與賦初值語(yǔ)句 3.3 3.3 匯編言語(yǔ)編程環(huán)境匯編言語(yǔ)編程環(huán)境 與其它程序設(shè)計(jì)言語(yǔ)一樣,匯編言語(yǔ)程序的開發(fā)與其它程序設(shè)計(jì)言語(yǔ)一樣,匯編言語(yǔ)程序的開發(fā)過(guò)程可歸結(jié)為:過(guò)程可歸結(jié)為: 就需求分析、模塊劃分和算法確定等任務(wù)而言,就需求分析、模塊劃分和算法確定等任務(wù)而言,各種程序設(shè)計(jì)言語(yǔ)是類似的,均可按軟件工程的方法各種
53、程序設(shè)計(jì)言語(yǔ)是類似的,均可按軟件工程的方法進(jìn)展,但編程和調(diào)試那么因程序設(shè)計(jì)言語(yǔ)而異。進(jìn)展,但編程和調(diào)試那么因程序設(shè)計(jì)言語(yǔ)而異。 需求分析需求分析 根據(jù)需求和規(guī)模等要素劃分模塊根據(jù)需求和規(guī)模等要素劃分模塊 確定各功能模塊的求解算法、并定義所需的確定各功能模塊的求解算法、并定義所需的數(shù)據(jù)構(gòu)造數(shù)據(jù)構(gòu)造 進(jìn)展編程和調(diào)試進(jìn)展編程和調(diào)試 對(duì)匯編言語(yǔ)而言,根據(jù)數(shù)據(jù)構(gòu)造和算法進(jìn)展編碼到對(duì)匯編言語(yǔ)而言,根據(jù)數(shù)據(jù)構(gòu)造和算法進(jìn)展編碼到構(gòu)成可用程序的過(guò)程如下:構(gòu)成可用程序的過(guò)程如下: 需求分析、需求分析、數(shù)據(jù)構(gòu)造和算法數(shù)據(jù)構(gòu)造和算法匯編言語(yǔ)源程序匯編言語(yǔ)源程序文件文件 * *.ASM.ASM目的代碼程序目的代碼程序文
54、件文件 * *.OBJ.OBJ可執(zhí)行程序可執(zhí)行程序文件文件 * *.EXE.EXE可用程序可用程序銜接銜接編輯編輯匯編匯編調(diào)試調(diào)試3.3 3.3 匯編言語(yǔ)編程環(huán)境匯編言語(yǔ)編程環(huán)境一、匯編程序的操作步驟:一、匯編程序的操作步驟:1 1、建立源程序文件、建立源程序文件(EDIT)(EDIT),擴(kuò)展名為,擴(kuò)展名為.ASM.ASM2 2、匯編、匯編MASMMASM或或ASMASM源程序,生成目的文件源程序,生成目的文件“.OBJ.OBJ(.LST .CRF)(.LST .CRF)3 3、程序銜接、程序銜接LINKLINK,生成,生成“.EXE.EXE文件文件4 4、執(zhí)行程序、執(zhí)行程序C:MASM50C
55、:MASM50文件名文件名5 5、調(diào)試程序、調(diào)試程序 C:MASM50 DEBUG C:MASM50 DEBUG 文件名文件名.EXE.EXE二、執(zhí)行宏匯編程序二、執(zhí)行宏匯編程序1、匯編過(guò)程、匯編過(guò)程MASM 文件名;文件名; ;生成;生成OBJ文件文件MASM 文件名,;文件名,; ;生成;生成OBJ、LSTMASM 文件名,;文件名,; ;生成;生成OBJ、LST、CRF三個(gè)文件三個(gè)文件2、列表文件、列表文件.LST可用可用TYPE顯示,包括三個(gè)部分顯示,包括三個(gè)部分源程序和目的程序清單源程序和目的程序清單段信息匯總表:各段所占存儲(chǔ)空間的長(zhǎng)度,各段段信息匯總表:各段所占存儲(chǔ)空間的長(zhǎng)度,各段
56、的定位類型,段的組合類型的定位類型,段的組合類型符號(hào)匯總表符號(hào)匯總表3、交叉索引文件、交叉索引文件.CRF 列出了源程序中定義的符號(hào)標(biāo)號(hào)、變量和列出了源程序中定義的符號(hào)標(biāo)號(hào)、變量和程序中援用這些符號(hào)的情況。程序中援用這些符號(hào)的情況。三、執(zhí)行銜接文件三、執(zhí)行銜接文件 銜接程序是把銜接程序是把 一個(gè)或多個(gè)獨(dú)立的目的程序模一個(gè)或多個(gè)獨(dú)立的目的程序模塊裝配成一個(gè)可重定位的可執(zhí)行文件塊裝配成一個(gè)可重定位的可執(zhí)行文件.EXE。1、銜接程序執(zhí)行過(guò)程、銜接程序執(zhí)行過(guò)程LINK 文件名;文件名; (文件名文件名.OBJ)2、內(nèi)存映射文件、內(nèi)存映射文件 ( .MAP)LINK 文件名,;文件名,; 除了產(chǎn)生執(zhí)行文
57、件外,還銜接產(chǎn)生內(nèi)存映射文除了產(chǎn)生執(zhí)行文件外,還銜接產(chǎn)生內(nèi)存映射文件件.MAP,它給出每個(gè)段的地址分配情況及長(zhǎng),它給出每個(gè)段的地址分配情況及長(zhǎng)度。度。運(yùn)用程序運(yùn)用程序外設(shè)硬件接口外設(shè)硬件接口BIOSBIOSDOSDOS DOS DOS操作系統(tǒng)和操作系統(tǒng)和ROM BIOSROM BIOS系統(tǒng)各為系統(tǒng)各為用戶提供了一組例行用戶提供了一組例行子程序,用于完成根子程序,用于完成根本本I/OI/O設(shè)備、內(nèi)存、設(shè)備、內(nèi)存、文件和作業(yè)的管理,文件和作業(yè)的管理,以及時(shí)鐘、日歷的讀以及時(shí)鐘、日歷的讀出和設(shè)置等功能。出和設(shè)置等功能。 3.4 DOS/BIOS3.4 DOS/BIOS功能調(diào)用功能調(diào)用 INT 21H
58、 INT 21H的調(diào)用方法的調(diào)用方法傳送入口參數(shù)到指定存放器中傳送入口參數(shù)到指定存放器中功能號(hào)送入功能號(hào)送入AHAH存放器中存放器中INT 21HINT 21H1 1、鍵盤鍵入字符并加回顯、鍵盤鍵入字符并加回顯1 1號(hào)調(diào)用號(hào)調(diào)用MOV AHMOV AH,1 1INT 21HINT 21H;ALAL鍵盤鍵入字符鍵盤鍵入字符 BUF DB 20 DB ? DB 20 DUP? MOV DX,OFFSET BUFMOV AH,0AHINT 21H3 3、輸出單字符、輸出單字符2 2號(hào)調(diào)用號(hào)調(diào)用入口參數(shù):入口參數(shù):DLDL= =顯示字符顯示字符MOV DLMOV DL,AAMOV AHMOV AH,2
59、 2INT 21HINT 21H4、輸出字符串、輸出字符串9號(hào)調(diào)用號(hào)調(diào)用入口參數(shù):入口參數(shù):DS:DX=字符串首地址字符串首地址功能:在屏幕上顯示字符串不含功能:在屏幕上顯示字符串不含$BUF DB GOOD BY $MOV DX,OFFSET BUFMOV AH,9INT 21H5、前往操作系統(tǒng)、前往操作系統(tǒng)4CH調(diào)用調(diào)用MOV AH,4CHINT 21H順序構(gòu)造順序構(gòu)造分支構(gòu)造分支構(gòu)造循環(huán)構(gòu)造循環(huán)構(gòu)造3.5 3.5 三種根本構(gòu)造程序的設(shè)計(jì)三種根本構(gòu)造程序的設(shè)計(jì)程序的根本構(gòu)造方式有三種程序的根本構(gòu)造方式有三種: : 實(shí)際上,三種根本構(gòu)造是完備的,即任何功能實(shí)際上,三種根本構(gòu)造是完備的,即任何
60、功能的程序都可由順序、分支和循環(huán)三種構(gòu)造實(shí)現(xiàn)。的程序都可由順序、分支和循環(huán)三種構(gòu)造實(shí)現(xiàn)。 3.5.1 3.5.1 順序構(gòu)造程序設(shè)計(jì)順序構(gòu)造程序設(shè)計(jì) 順序程序又稱直線程序。其特點(diǎn)是順序執(zhí)行順序程序又稱直線程序。其特點(diǎn)是順序執(zhí)行的,無(wú)分支,無(wú)循環(huán),也無(wú)轉(zhuǎn)移,只作直線運(yùn)轉(zhuǎn)。的,無(wú)分支,無(wú)循環(huán),也無(wú)轉(zhuǎn)移,只作直線運(yùn)轉(zhuǎn)。 在實(shí)踐運(yùn)用中,純粹用順序構(gòu)造編寫的完好在實(shí)踐運(yùn)用中,純粹用順序構(gòu)造編寫的完好程序很少見(jiàn),但是在程序段中它卻是大量的存在。程序很少見(jiàn),但是在程序段中它卻是大量的存在。所以掌握它是編寫復(fù)雜運(yùn)用程序的根底。所以掌握它是編寫復(fù)雜運(yùn)用程序的根底。3.5.2 3.5.2 分支構(gòu)造程序設(shè)計(jì)分支構(gòu)造程
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津大學(xué)《數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 菏澤學(xué)院《醫(yī)學(xué)影像設(shè)備安裝與維修學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 肇慶醫(yī)學(xué)高等??茖W(xué)?!犊删幊炭刂破骷夹g(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 信陽(yáng)航空職業(yè)學(xué)院《建筑設(shè)計(jì)基礎(chǔ)二》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱傳媒職業(yè)學(xué)院《畢業(yè)論文寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖州學(xué)院《微信小程序開發(fā)與實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶移通學(xué)院《Pthon數(shù)據(jù)分析與挖掘基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州航海學(xué)院《體育(上)》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川應(yīng)用技術(shù)職業(yè)學(xué)院《工程制圖與CAD》2023-2024學(xué)年第二學(xué)期期末試卷
- 溫州科技職業(yè)學(xué)院《智能汽車傳感技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 《道路建筑材料緒論》課件
- 醫(yī)學(xué)遺傳學(xué)教案-山東大學(xué)醫(yī)學(xué)遺傳學(xué)
- 2025年湖南現(xiàn)代物流職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 第二十章手術(shù)減肥及體形塑造美容手術(shù)美容外科學(xué)概論講解
- 2025年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 履帶式剪叉高空作業(yè)平臺(tái)安全操作規(guī)程
- 《水稻育秧技術(shù)新》課件
- 2024-2025年第一學(xué)期初中德育工作總結(jié)
- 圍手術(shù)期手術(shù)患者護(hù)理要點(diǎn)
- 2025年大連長(zhǎng)興開發(fā)建設(shè)限公司工作人員公開招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 貨物學(xué) 課件1.3貨物的計(jì)量
評(píng)論
0/150
提交評(píng)論