匯編語言程序設(shè)計(jì)第四章課件_第1頁
匯編語言程序設(shè)計(jì)第四章課件_第2頁
匯編語言程序設(shè)計(jì)第四章課件_第3頁
匯編語言程序設(shè)計(jì)第四章課件_第4頁
匯編語言程序設(shè)計(jì)第四章課件_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第四章匯編語言程序格式匯編語言程序格式MASM中的表達(dá)式偽指令語句DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用內(nèi)容提要2▲匯編語言(AssemblyLanguage)指令的助記符

+符號(hào)地址

+標(biāo)號(hào)是機(jī)器語言的符號(hào)表示,是較低級(jí)的語言。▲源程序利用匯編語言編寫的程序,稱源程序。不能被機(jī)器識(shí)別。

匯編程序翻譯成二進(jìn)制的浮動(dòng)目標(biāo)程序

匯編語言:實(shí)時(shí)性能好,程序效率高,節(jié)省內(nèi)存,運(yùn)行速度快,

第四章宏匯編語言程序設(shè)計(jì)——概述

概述程序運(yùn)行步驟及生成的文件4§4-1匯編語言程序格式§4-1匯編語言程序格式——概述

宏匯編使用的語句分兩類指令性語句偽指令語句5§4-1匯編語言程序格式——指令性語句

指令性語句:與機(jī)器指令相對(duì)應(yīng),可譯成目標(biāo)代碼(機(jī)器指令代碼)。語句格式:標(biāo)號(hào):

指令助記符

操作數(shù),操作數(shù)

;注釋▲標(biāo)號(hào):指令語句的符號(hào)地址,后面必須緊跟冒號(hào)“:”。注意:標(biāo)號(hào)可使用字母、數(shù)字和特殊符號(hào);首字符必須是字母或特殊符號(hào);最大長(zhǎng)度31個(gè)字符;可以省略,經(jīng)常作為表示轉(zhuǎn)移的地址。

▲指令助記符:指令名稱的代表符號(hào),指出指令的操作類型。可譯成機(jī)器碼;不可省略,是關(guān)鍵字。

▲操作數(shù):參與指令運(yùn)算的數(shù)據(jù)??梢杂幸粋€(gè)、多個(gè)操作數(shù)或無操作數(shù);多個(gè)操作數(shù)之間用逗號(hào)“,”隔開,操作數(shù)與指令助記符之間用“空格”隔開。操作數(shù)可以是常數(shù)、變量、標(biāo)號(hào)、寄存器名或表達(dá)式。

▲注釋:說明指令或程序的功能,可省略。注釋前加分號(hào)“;”。一、指令性語句6§4-1匯編語言程序格式——偽指令語句

偽指令語句:無對(duì)應(yīng)的機(jī)器指令,匯編時(shí)對(duì)偽指令進(jìn)行處理,可完成數(shù)據(jù)定義、存儲(chǔ)區(qū)分配、段定義、段分配、指示程序結(jié)束等功能。語句的格式:

名字偽指令指示符操作數(shù),操作數(shù);注釋

▲名字:名字后不允許帶冒號(hào)“:”,但可以省略。通常是變量名、段名、過程名、符號(hào)名等。

▲偽指令指示符:匯編程序MASM規(guī)定的符號(hào)。常用的有變量定義語句(DB、DW),符號(hào)定義語句(EQU、=),段定義語句(SEGMENT…END),段分配語句(ASSUME),過程定義語句(PROC…ENDP)等。

▲操作數(shù):不同偽指令有不同要求。操作數(shù)可以是常數(shù)、變量、字符串、表達(dá)式等?!⑨專汗δ芎褪褂门c指令性語句相同。二、偽指令語句7§4-1匯編語言程序格式——數(shù)據(jù)項(xiàng)

匯編語言中的操作數(shù),可以是常數(shù)、寄存器、存儲(chǔ)器、變量、標(biāo)號(hào)或表達(dá)式。其中,常數(shù)、變量、標(biāo)號(hào)是三種基本數(shù)據(jù)項(xiàng)。

1.常數(shù):是固定值,沒有屬性,是確定的數(shù)據(jù)。二進(jìn)制:字母“B”結(jié)尾,例00110100B;八進(jìn)制:字母“Q”或“O”結(jié)尾,例1037O、2370Q;十進(jìn)制:字母“D”結(jié)尾或省略,或科學(xué)表示法,例1234D、5678、2.735E-2;十六進(jìn)制:字母“H”結(jié)尾,“A~F”開頭時(shí),前面加0,例56H、0A7F2H;字符串:用單引號(hào)‘’括起來,機(jī)內(nèi)存放的是各字符的ASCII碼。例‘ABC’。三、數(shù)據(jù)項(xiàng)8§4-1匯編語言程序格式——數(shù)據(jù)項(xiàng)

2.變量:

變量通常指存放在存儲(chǔ)單元中的值,程序運(yùn)行中可以修改。所有的變量都具有三個(gè)屬性。

⑴段值(SEGMENT):

指變量所在段的段基址。

⑵段內(nèi)偏移地址(OFFSET):

指變量所在地址與所在段首地址之間的地址偏移字節(jié)數(shù)。⑶類型(TYPE):

指變量中每個(gè)元素所包含的字節(jié)數(shù):字節(jié)變量(BYTE)、字變量(WORD)、雙字變量(DWORD)等。9§4-1匯編語言程序格式——數(shù)據(jù)項(xiàng)3.標(biāo)號(hào):標(biāo)號(hào)是可執(zhí)行指令語句的地址的符號(hào)表示,可作為程序轉(zhuǎn)向的目標(biāo)地址。具有三個(gè)屬性。(1)段值(SEGMENT):標(biāo)號(hào)所在段的段基址。(2)段內(nèi)偏移地址(OFFSET):標(biāo)號(hào)所在地址與所在段的段首址之間的偏移地址字節(jié)數(shù)。(3)類型(TYPE):指在轉(zhuǎn)移指令中標(biāo)號(hào)可轉(zhuǎn)移的距離,也稱距離屬性。類型NEAR,表示此標(biāo)號(hào)為近標(biāo)號(hào),只能實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移或調(diào)用;類型FAR,表示此標(biāo)號(hào)為遠(yuǎn)標(biāo)號(hào),可以實(shí)現(xiàn)段間轉(zhuǎn)移或調(diào)用。若標(biāo)號(hào)后面緊跟冒號(hào),表示隱含此標(biāo)號(hào)距離屬性為NEAR,也可用偽指令將此屬性改為FAR。10§4-2MASM中的表達(dá)式

——概述§4-2MASM中的表達(dá)式概述表達(dá)式:運(yùn)算對(duì)象

+運(yùn)算符?!ぴ趨R編時(shí)進(jìn)行運(yùn)算,運(yùn)算結(jié)果作為語句中的操作數(shù)。運(yùn)算對(duì)象:常數(shù)、變量、標(biāo)號(hào)?!さ玫降倪\(yùn)算結(jié)果可以是一個(gè)常數(shù)字,也可以是一個(gè)存儲(chǔ)器的地址。

MASM中6類運(yùn)算符:如表4-1所示。

·算術(shù)運(yùn)算符(ArithmeticOperators)·邏輯運(yùn)算符(LogicalOperators)·關(guān)系運(yùn)算符(RelationalOperators)·數(shù)值返回運(yùn)算符(Value-ReturningOperators)·修改屬性運(yùn)算符(ModifingattributeOperators)·其它運(yùn)算符(otherOperators)11§4-2MASM中的表達(dá)式

——概述表4-1MASM的表達(dá)式中的運(yùn)算符(1)12§4-2MASM中的表達(dá)式

——算術(shù)運(yùn)算符包括7種:十、一、×、\(除,只取除法運(yùn)算結(jié)果之商)、MOD(模,只取除法運(yùn)算結(jié)果之余數(shù))、SHL(左移,左移1位相當(dāng)于乘2)、SHR(右移,右移1位相當(dāng)于除2)。

注意:▲所有的算術(shù)運(yùn)算符均可以對(duì)數(shù)據(jù)進(jìn)行運(yùn)算,運(yùn)算對(duì)象與運(yùn)算結(jié)果都是整數(shù)。▲若對(duì)地址運(yùn)算,通常是在標(biāo)號(hào)上加/減某一個(gè)數(shù)字量。

一、算術(shù)運(yùn)算符13§4-2MASM中的表達(dá)式

——算術(shù)運(yùn)算符例匯編程序指令格式如下:

DA EQU 300 MOV AX,DA-80 MOV BX,DAMOD100 MOV CX,DA/100 MOV DH,01100100BSHR2匯編時(shí),計(jì)算表達(dá)式形成指令為:

DA EQU 300 MOV AX,220 MOV BX,0 MOV CX,3 MOV DH,19H14§4-2MASM中的表達(dá)式

——邏輯運(yùn)算符

包括4種:AND(與)、OR(或)、NOT(非)、XOR(異或)

注意:按位運(yùn)算的,只能對(duì)常數(shù)進(jìn)行運(yùn)算,得到結(jié)果也是常數(shù)。二、邏輯運(yùn)算符15§4-2MASM中的表達(dá)式

——邏輯運(yùn)算符

例 MOV AL,NOT0FFH MOV BL,8CHAND73H MOV AH,8CHOR73H MOV CH,8CHXOR73H匯編時(shí),計(jì)算表達(dá)式形成指令為:

MOV AL,0 MOV BL,0 MOV AH,0FFH MOV CH,0FFH16§4-2MASM中的表達(dá)式

——概述表4-1MASM的表達(dá)式中的運(yùn)算符(2)17§4-2MASM中的表達(dá)式

——關(guān)系運(yùn)算符

包括6種:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)

。注意:關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須是數(shù)據(jù),或是同一段內(nèi)的兩個(gè)存儲(chǔ)單元的地址;若結(jié)果為真,輸出全是l,即0FFH或0FFFFH;若結(jié)果為假,輸出全是0。三、關(guān)系運(yùn)算符18§4-2MASM中的表達(dá)式

——關(guān)系運(yùn)算符例 MOV AX,10HGT16 ADD BL,6EQ0110B

匯編時(shí),計(jì)算表達(dá)式形成指令為:

MOV AX,0 ADD BL,0FFH

19§4-2MASM中的表達(dá)式

——數(shù)值返回運(yùn)算符數(shù)值返回運(yùn)算符也稱作分析運(yùn)算符(Analyticopertors)。包括5種:OFFSET、SEG、TYPE、LENGTH、SIZE

。功能:加在變量或標(biāo)號(hào)前,返回運(yùn)算對(duì)象的某個(gè)參數(shù)值。例如偏移地址值、段地址值、類型屬性、變量包含的單元數(shù)等。1.OFFSET:格式:OFFSET

變量或標(biāo)號(hào)功能:返回標(biāo)號(hào)或變量的偏移地址值。例若DA1為數(shù)據(jù)段中一個(gè)變量名

MOVBX,OFFSETDA1 ;等價(jià)于LEABX,DA1

四、數(shù)值返回運(yùn)算符20§4-2MASM中的表達(dá)式

——數(shù)值返回運(yùn)算符2.SEG:格式:SEG

變量或標(biāo)號(hào)功能:取變量或標(biāo)號(hào)的段基值。例 MOV AX,SEGM1 MOV DX,AX解:設(shè):M1是段名為DATA的數(shù)據(jù)段中的一個(gè)變量名;如DATA段從0500H開始,上述指令把0500H作為立即數(shù)在連接時(shí)插入指令;匯編后指令變?yōu)? MOV AX,0500H MOV DX,AX21§4-2MASM中的表達(dá)式

——數(shù)值返回運(yùn)算符3.TYPE:格式:TYPE

變量或標(biāo)號(hào)功能:加在變量前,返回變量的類型屬性;加在標(biāo)號(hào)前,返回標(biāo)號(hào)的距離屬性。如下表所示。TYPE運(yùn)算符返回值22

§4-2MASM中的表達(dá)式

——數(shù)值返回運(yùn)算符例 A1 DB20H,30H A2 DW0438H A3 DD?L1: MOV AH,TYPEA1 MOV BH,TYPEA2 ADD AL,TYPEA3 MOV BL,TYPEL1匯編時(shí),計(jì)算表達(dá)式形成指令為:

MOV AH,1 MOV BH,2 ADD AL,4 MOV BL,0FFH23§4-2MASM中的表達(dá)式

——數(shù)值返回運(yùn)算符4.LENGTH:格式:LENGTH

變量功能:當(dāng)變量中使用DUP時(shí),LENGTH返回此變量所包含的單元數(shù),對(duì)其它變量則返回1。例 M1 DW100DUP(?) M2 DW1,2,3 M3 DB‘A,B,C,D‘ MOV CX,LENGTHM1 MOV BL,LENGTHM2 MOV AL,LENGTHM3 匯編時(shí),計(jì)算表達(dá)式形成指令為:

MOV CX,100 ;返回變量所包含的100個(gè)字單元

MOV BL,1 MOV AL,124§4-2MASM中的表達(dá)式

——數(shù)值返回運(yùn)算符5.SIZE:格式:SIZE

變量功能:加在變量前,返回該變量包含的總字節(jié)數(shù)。SIZE=LENGTH*TYPE例M1 DW100DUP(?) M2 DW1,2,3 M3 DB‘A,B,C,D‘ MOV CX,SIZEM1 ADD BL,SIZEM2 MOV AL,SIZEM3匯編時(shí),計(jì)算表達(dá)式形成指令為:

MOV CX,200 ;返回變量所包含的200個(gè)字單元

MOV BL,2 MOV AL,1 25§4-2MASM中的表達(dá)式

——概述表4-1MASM的表達(dá)式中的運(yùn)算符(3)26§4-2MASM中的表達(dá)式

——修改屬性運(yùn)算符修改屬性運(yùn)算符也稱作綜合運(yùn)算符(Syntheticoperators)。包括6種:段操作符、PTR、THIS、HIGH、LOW、SHORT功能:在程序運(yùn)行過程中,修改變量或標(biāo)號(hào)的屬性,包括段屬性、偏移地址屬性、類型屬性等。

1.段操作符:格式:段前綴:變量或地址表達(dá)式功能:表示某個(gè)變量或地址被修改到指定的段寄存器提供的段基址中。

例4-12MOVAX,ES:[BX]五、修改屬性運(yùn)算符27§4-2MASM中的表達(dá)式

——修改屬性運(yùn)算符2.PTR:格式:類型/距離PTR

變量或標(biāo)號(hào)功能:將PTR左邊的類型屬性賦給右邊的變量或標(biāo)號(hào)。注意:PTR本身不分配存儲(chǔ)單元,僅對(duì)已分配的存儲(chǔ)單元賦予新的屬性;常與類BYTE、WORD、NEAR、FAR等連用。28§4-2MASM中的表達(dá)式

——修改屬性運(yùn)算符

例 N1 DB 15H,36H N2 DW 1122H,3344H LO: MOV AX,WORDPTRN1 ;使N1轉(zhuǎn)換成AX類型

MOV BL,BYTEPTRN2 ;使N2轉(zhuǎn)換成BL類型例 MOV[BX],10H分析:將立即數(shù)送入BX間址指定的存儲(chǔ)單元,可以通過PTR指明是存入字節(jié)單元還是字單元。

MOVBYTEPTR[BX],10H ;[BX]

10H MOVWORDPTR[BX],10H ;[BX],[BX+1]

0010H也可用PTR來改變距離屬性,

JMPFARPTRLOOPN在JMP語句中將標(biāo)號(hào)LOOPN改為FAR,使JMP指令在其它代碼段中也可以用,實(shí)現(xiàn)段間轉(zhuǎn)移。29§4-2MASM中的表達(dá)式

——修改屬性運(yùn)算符

3.THIS:格式:變量/標(biāo)號(hào)EQUTHIS類型/距離功能:將EQUTHIS右邊的類型/距離屬性,賦給左邊的變量/標(biāo)號(hào),該變量或標(biāo)號(hào)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元的地址相同。例 FIRST EQUTHISBYTE TABLEDW200DUP(?)FIRST的偏移地址值與TABLE的偏移地址值相同,區(qū)別在于FIRST變量為字節(jié)類型,TABLE為字類型。30§4-2MASM中的表達(dá)式

——修改屬性運(yùn)算符

4.SHOT:格式:SHORT

標(biāo)號(hào)功能:說明轉(zhuǎn)移類指令中轉(zhuǎn)向地址的屬性為短轉(zhuǎn)移:-128~+127之間。例 L1: JMP SHOTL2 ……… L2: MOV AX,0

5.HIGH和LOW:格式:HIGH/LOW

變量或標(biāo)號(hào)功能:HIGH和LOW稱為字節(jié)分離運(yùn)算符。HIGH從中分離出高位字節(jié),LOW分離出低位字節(jié)。31§4-2MASM中的表達(dá)式

——修改屬性運(yùn)算符

例 K1 EQU0ABCDH K2 EQU1234H MOV AH,HIGHK1 MOV BL,LOWK2匯編時(shí),計(jì)算表達(dá)式形成指令為:

MOV AH,0ABH MOV BL,34H32§4-2MASM中的表達(dá)式

——其它運(yùn)算符1.圓括號(hào)():()中的運(yùn)算符具有最高優(yōu)先權(quán)。2.方括號(hào)[]:方括號(hào)主要用來表示地址表達(dá)式或多重變量的下標(biāo)值。六、其它運(yùn)算符33§4-2MASM中的表達(dá)式

——優(yōu)先級(jí)

表達(dá)式的計(jì)算原則:同級(jí)運(yùn)算符從左到右的,圓括號(hào)()可改變優(yōu)先級(jí)次序。運(yùn)算符的優(yōu)先級(jí)別如下表所示。七、優(yōu)先級(jí)表4-3運(yùn)算符優(yōu)先級(jí)次序34§4-3偽指令語句

——概述

§4-3偽指令語句偽指令語句:在匯編期間進(jìn)行處理,主要完成變量定義,存儲(chǔ)器分配,指示程序開始和結(jié)束,段定義,段分配等。類型:數(shù)據(jù)定義語句:DB,DW,DD標(biāo)號(hào)賦值語句:EQU,=段定義語句:SEGMENNT…ENDS段分配語句:ASSUME過程定義語句:PROC…ENDP程序開始結(jié)束語句:ORG,END,NAME群定義語句:GROUP結(jié)構(gòu)定義語句:STRUC…ENDS記錄定義語句:RECODE35§4-3偽指令語句

——數(shù)據(jù)定義語句

格式1:變量名

助記符操作數(shù),操作數(shù)…

;注釋格式2:變量名

助記符

nDUP(操作數(shù),操作數(shù)…)

;注釋功能:指定的存儲(chǔ)單元,以分配存儲(chǔ)空間或存入操作數(shù)。變量名——用符號(hào)表示,可以省略,后面不跟冒號(hào)。匯編時(shí)將變量助記符后的第一個(gè)字節(jié)的偏移地址作為它的符號(hào)地址。助記符——所用偽指令助記符主要有:DB:用來定義字節(jié); DW:用來定義字;DD:用來定義雙字; DQ:用來定義四個(gè)字;DT:用來定義十個(gè)字節(jié);操作數(shù)——操作數(shù)可以是常數(shù),字符串,變量,標(biāo)號(hào),表達(dá)式等。多個(gè)操作數(shù)之間必須用逗號(hào)分開;格式2中,n必須是正整數(shù)。

注釋——說明偽指令的功能,可以省略,注釋前必須帶分號(hào)“;”。一、數(shù)據(jù)定義語句36§4-3偽指令語句

——數(shù)據(jù)定義語句

例操作數(shù)是常數(shù)或表達(dá)式:DA1 DB10H,52H

;變量DA1中裝入10H,52HDA2 DW1122H,34H

;變量DA2中裝入22H,11H,34H,00HDA3 DD5*20H,0FFEEH

;變量DA3中裝入A0H,00H,00H,00H, ;EEH,FFH,00H,00H37§4-3偽指令語句

——數(shù)據(jù)定義語句例操作數(shù)是字符串FIRST DB‘HELLO’

;字符串‘HELLO’的ASII碼裝入FIRST開始的存儲(chǔ)單元SECOND DW‘OK’

;字符串‘OK’的ASII碼裝入SECOND開始的存儲(chǔ)單元

38§4-3偽指令語句

——數(shù)據(jù)定義語句

例操作數(shù)用?定義不確定值的變量,用作保留存儲(chǔ)空間。

M1 DB? ;定義變量M1為不確定字節(jié),保留l字節(jié)空間

M2 DW0D55H,? ;定義變量M2第二個(gè)字為不確定,保留兩個(gè)字節(jié)空間39§4-3偽指令語句

——數(shù)據(jù)定義語句

例操作數(shù)用DUP來定義重復(fù)變量

ONE DB5DUP(0)

;重復(fù)5個(gè)0存入ONE起始的存儲(chǔ)單元

TWO DW10DUP(?)

;重復(fù)10次,保留10個(gè)字的存儲(chǔ)單元

THREEDB 4DUP(1,2DUP(20H))

;DUP嵌套40§4-3偽指令語句

——表達(dá)式賦值語句共兩種:賦值語句EQU,等號(hào)語句=。它們均不占用內(nèi)存。二、表達(dá)式賦值語句1.賦值語句EQU:格式:符號(hào)名

EQU表達(dá)式功能:給變量、標(biāo)號(hào)、常數(shù)、指令、表達(dá)式等定義一個(gè)符號(hào)名一經(jīng)定義在同一個(gè)程序模塊中不能重新定義41§4-3偽指令語句

——表達(dá)式賦值語句

COUNTEQU 100 ;常數(shù)值賦給符號(hào)名COUNT

DATA EQU COUNT+2 ;表達(dá)式值賦給符號(hào)名DATA

A1 EQU [BX+SI] ;變址尋址存儲(chǔ)單元內(nèi)容賦給符號(hào)名A1

B1 EQU OFFSETA1 ;偏移地址值賦給符號(hào)名B1

C1 EQU ADD ;加法指令賦給符號(hào)名C1

注意:在EQU語句右邊表達(dá)式中的變量或標(biāo)號(hào),必須預(yù)先定義。PURGE語句可以解除對(duì)某一個(gè)標(biāo)號(hào)的賦值。例

PURGEC1 ;C1不再代替ADD42§4-3偽指令語句

——表達(dá)式賦值語句2.等號(hào)語句=等號(hào)語句“=”與EQU語句具有相同功能區(qū)別:EQU左邊的標(biāo)號(hào)不允許重新定義,用“=”定義的語句允許重復(fù)定義。

COUNT=100COUNT=COUNT+10A1=BX+SI MOVAX,[A1] ;[BX+SI]單元中的內(nèi)容

AXB1=ADDA1=BX MOVCX,[A1] ;[BX]單元中的內(nèi)容

CX43§4-3偽指令語句

——段定義語句

段定義語句進(jìn)行段定義,段分配語句明確段和段寄存器之間的關(guān)系。1.段定義語句SEGMENT……ENDS格式:段名

SEGMENT

定位類型組合類型‘分類名’

·邏輯段內(nèi)容

段名

ENDS功能:將一個(gè)邏輯段定義成一個(gè)整體。段名——是邏輯段的標(biāo)識(shí)符,不可省略。它確定了邏輯段在存儲(chǔ)器中的地址,SEGMENT和ENDS前的段名必須相同。SEGMENT…ENDS——是段定義的偽指令助記符,任何一個(gè)邏輯段必須以SEGMENT開始,ENDS結(jié)束,不可省略,并且必須成對(duì)出現(xiàn),兩者之間是本邏輯段的內(nèi)容。三、段定義語句44§4-3偽指令語句

——段定義語句

⑴定位類型(AlignType)定位該段起始地址。定位類型參數(shù)主要有下面4種。①PARA——指定定位段的起始地址必須在節(jié)的整數(shù)邊界,參數(shù)缺省時(shí),就當(dāng)成PARA。②BYTE——指定該段起始地址定位在存儲(chǔ)單元的任何字節(jié)地址。③WORD——指定該段起始地址定位在字的邊界,即段的首地址必須是偶數(shù)。④PAGE——指定該段起始地址定位在頁的邊界,即段的首地址必須是256的整數(shù)倍。45它們表示如下的地址要求PARA:XXXXXXXXXXXXXXXX0000BWORD:XXXXXXXXXXXXXXXXXXX0BBYTE:XXXXXXXXXXXXXXXXXXXXBPAGE:XXXXXXXXXXXX00000000B46§4-3偽指令語句

——段定義語句

⑵組合類型(CombineType)決定邏輯段之間的組合方式,主要參數(shù)有6種。①NONE——該段與其它同名段不連接,各段獨(dú)立,每段都有自己的基地址,可作為缺省參數(shù)。②PUBLIC——該段與其它同名段連接時(shí),由低地址到高地址連接,組成一個(gè)邏輯段,連接次序由連接命令指定,連接時(shí)滿足定位類型要求。③COMMON——該段在連接時(shí)與其它模塊中的同名段有相同的起始地址,采用覆蓋的方式在存儲(chǔ)器中存放,連接長(zhǎng)度為各分段中最大長(zhǎng)度。47§4-3偽指令語句

——段定義語句

④AT表達(dá)式——定位該段的起始地址在表達(dá)式所指定的節(jié)(16的整數(shù)倍)邊界上。通常各邏輯段在存儲(chǔ)器中的位置由系統(tǒng)自動(dòng)分配,當(dāng)要求某邏輯段在指定節(jié)的邊界上時(shí),就要用AT參數(shù)來實(shí)現(xiàn)。AT不能指定代碼段。⑤STACK——指定該段為堆棧段,此參數(shù)在堆棧段中不可省略,多個(gè)模塊只需設(shè)置一個(gè)堆棧段,各個(gè)模塊中的堆棧段采用覆蓋方式組合。容量為各個(gè)模塊中所設(shè)置的最大堆棧段容量。⑥MEMORY——定位該段與其它模塊中的同名段有相同的首地址,采用覆蓋方式在存儲(chǔ)器中組合連接,其功能與COMMON參數(shù)類似,區(qū)別是第一個(gè)帶MEMORY參數(shù)的邏輯段復(fù)蓋在其它同名段的最上層,其它帶此參數(shù)的同名段按照COMMON方式處理。48§4-3偽指令語句

——段定義語句⑶‘分類名’(C1assName)匯編程序連接時(shí)將所有分類名相同的邏輯段組成一個(gè)段組,放在連續(xù)的存儲(chǔ)區(qū)內(nèi)。分類名可選擇不超過40個(gè)字符的名稱。注意:段定義語句允許嵌套設(shè)置,但不允許相互交叉設(shè)置。SEGMENT后面帶有的三個(gè)參數(shù)必須按格式中規(guī)定的次序排列,分類名必須用單引號(hào)‘

’括起來。49§4-3偽指令語句

——段定義語句2.段分配語句(ASSUME):將邏輯段定義成代碼段、數(shù)據(jù)段、堆棧段、附加段。用戶可以設(shè)置多個(gè)邏輯段,但只允許4個(gè)邏輯段同時(shí)有效。格式:ASSUMECS:段名,DS:段名,SS:段名,ES:段名功能:定義4個(gè)邏輯段,指明段和段寄存器的關(guān)系。ASSUME——為偽指令助記符,放在代碼段的開始,不可省略。說明當(dāng)前代碼段、數(shù)據(jù)段、堆線段、附加段4個(gè)段如何定義。段名必須是用段定義語句SEGMENT…ENDS定義過的名字。ASSUMENOTHING取消前面由ASSUME所指定的段寄存器。例:ASSUMEES:NOTHING

50§4-3偽指令語句

——段定義語句注意:代碼段和數(shù)據(jù)段必須分配,附加段可以省略。ASSUME偽指令只將代碼段的段基址自動(dòng)裝入CS寄存器中,而不能自動(dòng)把其它段基址裝入相應(yīng)的段寄存器中,所以在代碼段的開始要有一段初始化程序完成這一工作。堆棧段:將段基址送入SS寄存器外,還要將棧頂偏移地址置入堆棧指示器SP中。代碼段中使用了串指令,必須設(shè)置附加段做目標(biāo)串基址用,附加段也可用來存數(shù)據(jù)。51§4-3偽指令語句

——段定義語句例

兩個(gè)16位無符號(hào)二進(jìn)制數(shù)相乘

DDATA SEGMENT ;數(shù)據(jù)段

D1DW1234H D2DW5678H P1DD? P2DD?DDATA ENDSEDATA SEGMENT ;附加段

E1DB? E2DW4DUP(?)EDATA ENDS

SSTACK SEGMENTSTACK‘STACK’ DW100DUP(?)SSTACK ENDS52§4-3偽指令語句

——段定義語句CCODE SEGMENTMAIN PROCFAR ASSUMECS:CCODE,DS:DDATA,ES:EDATA,SS:SSTACKSTART: PUSHDS ;返回DOS用

SUBAX,AX PUSHAXMOVAX,SSTACK ;初始化SS MOVSS,AX MOVAX,DDATA ;初始化DS MOVDS,AX MOVAX,EDATA ;初始化ES MOVES,AX53§4-3偽指令語句

——段定義語句L1: MOVBX,OFFSETD1 ;D1*D2,積在(DX,AX)

MOVAX,[BX] MOVDX,0 MULWORDPTR[BX+2] MOVBX,OFFSETP1;積→P2和P1所指向的存儲(chǔ)單元

MOV[BX],AX MOV[BX+2],DX RETMAIN ENDPCCODE ENDS ENDSTART54§4-3偽指令語句

——過程定義語句過程也稱作子程序。節(jié)省內(nèi)存空間,便于進(jìn)行模塊化程序設(shè)計(jì)。格式:過程名

PROC

屬性;過程內(nèi)容

RETN

過程名ENDP功能:定義一個(gè)過程,主程序可以用CALL指令調(diào)用它。過程名——過程的名字,不可缺省。子程序入口地址。具有三種屬性:段屬性:該過程所在段的段基址。偏移地址屬性:該過程第一個(gè)字節(jié)與段首址之間距離字節(jié)。距離屬性:為NEAR或FAR。NEAR允許過程在段內(nèi)調(diào)用;FAR允許過程在段間調(diào)用,NEAR為缺省使用。四、過程定義語句55§4-3偽指令語句

——過程定義語句PROC…ENDP——過程定義偽指令助記符,成對(duì)出現(xiàn),不可缺省。二者前面有相同的過程名。RETN——為過程內(nèi)部的返回指令。過程內(nèi)部至少有—條RET指令,可以在過程的任何位置,使過程返回到主程序。過程內(nèi)部可以有多個(gè)RET,表示此過程具有多個(gè)返回出口(在不同條件下,從不同出口返回)。N為彈出值,N必須為正偶數(shù),可以缺省。過程調(diào)用允許嵌套和遞歸調(diào)用。嵌套與遞歸的深度由堆棧段的容量決定。56§4-3偽指令語句

——過程定義語句DATA SEGMENT ONE DB22,33,44,55 TWO DB55,66,77,88 SUM DB20DUP(?)DATA ENDSSTACK SEGMENTSTACK STT DB50DUP(?) TOP EQULENGTHSTTSTACKENDSCODE SEGMENTMAIN PROC FAR ASSUMECS:CODE,DS:DATA,SS:STACK,

ES:DATASTART: MOV AX,STACK MOV SS,AX MOV SP,TOP PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX例

用過程調(diào)用的方法,將內(nèi)存中N個(gè)BCD碼相加。57§4-3偽指令語句

——過程定義語句 MOV SI,OFFSETONE ;SI指向第一個(gè)加數(shù)

MOV BX,OFFSETTWO MOV DI,OFFSETSUM CLD ;清方向標(biāo)志

CLC ;清進(jìn)位標(biāo)志

MOV CX,4LL: CALL ABC LOOP LL RETMAIN ENDPABC PROC NEAR ;完成單字節(jié)數(shù)據(jù)加法運(yùn)算

LODSB ;【SI】→AL,SI+1→SIL1: ADC AL,[BX] ;相加

DAA ;十進(jìn)調(diào)整

STOSB ;AL→[DI],DI+1→DI INCBX ;指針改變

RETABC ENDPCODE ENDS ENDSTART58§4-3偽指令語句

——程序開始和結(jié)束語句

1.ORG:

格式:ORG

表達(dá)式

功能:給匯編程序設(shè)置位置指針,指定下面語句的起始偏移地址。

ORG——是偽指令助記符,不可缺省。ORG語句可以放在程序的任何位置。表達(dá)式——給定的偏移地址值,表達(dá)式的計(jì)算結(jié)果必須是正整數(shù)。五、程序開始和結(jié)束語句59§4-3偽指令語句

——程序開始和結(jié)束語句

例用ORG指定代碼段地址

CODE SEGMENT ORG 100H ASSUMECS:CODE,DS:DATA,SS:STACK,

ES:DATASTART: ;指定代碼段起始

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論