




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
匯編語(yǔ)言程序設(shè)計(jì)第四章課件匯編語(yǔ)言程序設(shè)計(jì)第四章課件匯編語(yǔ)言程序設(shè)計(jì)第四章課件2▲匯編語(yǔ)言(AssemblyLanguage)指令的助記符+符號(hào)地址+標(biāo)號(hào)是機(jī)器語(yǔ)言的符號(hào)表示,是較低級(jí)的語(yǔ)言?!闯绦蚶脜R編語(yǔ)言編寫的程序,稱源程序。不能被機(jī)器識(shí)別。匯編程序翻譯成二進(jìn)制的浮動(dòng)目標(biāo)程序匯編語(yǔ)言:實(shí)時(shí)性能好,程序效率高,節(jié)省內(nèi)存,運(yùn)行速度快,第四章宏匯編語(yǔ)言程序設(shè)計(jì)——概述概述匯編語(yǔ)言程序設(shè)計(jì)第四章課件匯編語(yǔ)言程序設(shè)計(jì)第四章課件匯編語(yǔ)言12▲匯編語(yǔ)言(AssemblyLanguage)指令的助記符
+符號(hào)地址
+標(biāo)號(hào)是機(jī)器語(yǔ)言的符號(hào)表示,是較低級(jí)的語(yǔ)言?!闯绦蚶脜R編語(yǔ)言編寫的程序,稱源程序。不能被機(jī)器識(shí)別。
匯編程序翻譯成二進(jìn)制的浮動(dòng)目標(biāo)程序
匯編語(yǔ)言:實(shí)時(shí)性能好,程序效率高,節(jié)省內(nèi)存,運(yùn)行速度快,
第四章宏匯編語(yǔ)言程序設(shè)計(jì)——概述
概述2▲匯編語(yǔ)言(AssemblyLanguage)第四章2程序運(yùn)行步驟及生成的文件程序運(yùn)行步驟及生成的文件34§4-1匯編語(yǔ)言程序格式§4-1匯編語(yǔ)言程序格式——概述
宏匯編使用的語(yǔ)句分兩類指令性語(yǔ)句偽指令語(yǔ)句4§4-1匯編語(yǔ)言程序格式§4-1匯編語(yǔ)言程序格式45§4-1匯編語(yǔ)言程序格式——指令性語(yǔ)句
指令性語(yǔ)句:與機(jī)器指令相對(duì)應(yīng),可譯成目標(biāo)代碼(機(jī)器指令代碼)。語(yǔ)句格式:標(biāo)號(hào):
指令助記符
操作數(shù),操作數(shù)
;注釋▲標(biāo)號(hào):指令語(yǔ)句的符號(hào)地址,后面必須緊跟冒號(hào)“:”。注意:標(biāo)號(hào)可使用字母、數(shù)字和特殊符號(hào);首字符必須是字母或特殊符號(hào);最大長(zhǎng)度31個(gè)字符;可以省略,經(jīng)常作為表示轉(zhuǎn)移的地址。▲指令助記符:指令名稱的代表符號(hào),指出指令的操作類型??勺g成機(jī)器碼;不可省略,是關(guān)鍵字。
▲操作數(shù):參與指令運(yùn)算的數(shù)據(jù)??梢杂幸粋€(gè)、多個(gè)操作數(shù)或無(wú)操作數(shù);多個(gè)操作數(shù)之間用逗號(hào)“,”隔開,操作數(shù)與指令助記符之間用“空格”隔開。操作數(shù)可以是常數(shù)、變量、標(biāo)號(hào)、寄存器名或表達(dá)式。
▲注釋:說(shuō)明指令或程序的功能,可省略。注釋前加分號(hào)“;”。一、指令性語(yǔ)句5§4-1匯編語(yǔ)言程序格式——指令性語(yǔ)句指令性語(yǔ)56§4-1匯編語(yǔ)言程序格式——偽指令語(yǔ)句
偽指令語(yǔ)句:無(wú)對(duì)應(yīng)的機(jī)器指令,匯編時(shí)對(duì)偽指令進(jìn)行處理,可完成數(shù)據(jù)定義、存儲(chǔ)區(qū)分配、段定義、段分配、指示程序結(jié)束等功能。語(yǔ)句的格式:
名字偽指令指示符操作數(shù),操作數(shù);注釋
▲名字:名字后不允許帶冒號(hào)“:”,但可以省略。通常是變量名、段名、過(guò)程名、符號(hào)名等。
▲偽指令指示符:匯編程序MASM規(guī)定的符號(hào)。常用的有變量定義語(yǔ)句(DB、DW),符號(hào)定義語(yǔ)句(EQU、=),段定義語(yǔ)句(SEGMENT…END),段分配語(yǔ)句(ASSUME),過(guò)程定義語(yǔ)句(PROC…ENDP)等。
▲操作數(shù):不同偽指令有不同要求。操作數(shù)可以是常數(shù)、變量、字符串、表達(dá)式等。▲注釋:功能和使用與指令性語(yǔ)句相同。二、偽指令語(yǔ)句6§4-1匯編語(yǔ)言程序格式——偽指令語(yǔ)句67§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)
匯編語(yǔ)言中的操作數(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)‘’括起來(lái),機(jī)內(nèi)存放的是各字符的ASCII碼。例‘ABC’。三、數(shù)據(jù)項(xiàng)7§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)匯編語(yǔ)言78§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)2.變量:
變量通常指存放在存儲(chǔ)單元中的值,程序運(yùn)行中可以修改。所有的變量都具有三個(gè)屬性。
⑴段值(SEGMENT):
指變量所在段的段基址。
⑵段內(nèi)偏移地址(OFFSET):
指變量所在地址與所在段首地址之間的地址偏移字節(jié)數(shù)。⑶類型(TYPE):
指變量中每個(gè)元素所包含的字節(jié)數(shù):字節(jié)變量(BYTE)、字變量(WORD)、雙字變量(DWORD)等。8§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)2.變量:89§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)3.標(biāo)號(hào):標(biāo)號(hào)是可執(zhí)行指令語(yǔ)句的地址的符號(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。9§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)3.標(biāo)號(hào):910§4-2MASM中的表達(dá)式
——概述§4-2MASM中的表達(dá)式概述表達(dá)式:運(yùn)算對(duì)象
+運(yùn)算符。·在匯編時(shí)進(jìn)行運(yùn)算,運(yùn)算結(jié)果作為語(yǔ)句中的操作數(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)10§4-2MASM中的表達(dá)式——概述§4-21011§4-2MASM中的表達(dá)式
——概述表4-1MASM的表達(dá)式中的運(yùn)算符(1)11§4-2MASM中的表達(dá)式——概述表4-11112§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)算符12§4-2MASM中的表達(dá)式——算術(shù)運(yùn)算符包括71213§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,19H13§4-2MASM中的表達(dá)式——算術(shù)運(yùn)算符例1314§4-2MASM中的表達(dá)式
——邏輯運(yùn)算符
包括4種:AND(與)、OR(或)、NOT(非)、XOR(異或)
注意:按位運(yùn)算的,只能對(duì)常數(shù)進(jìn)行運(yùn)算,得到結(jié)果也是常數(shù)。二、邏輯運(yùn)算符14§4-2MASM中的表達(dá)式——邏輯運(yùn)算符1415§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,0FFH15§4-2MASM中的表達(dá)式——邏輯運(yùn)算符1516§4-2MASM中的表達(dá)式
——概述表4-1MASM的表達(dá)式中的運(yùn)算符(2)16§4-2MASM中的表達(dá)式——概述表4-11617§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)算符17§4-2MASM中的表達(dá)式——關(guān)系運(yùn)算符1718§4-2MASM中的表達(dá)式
——關(guān)系運(yùn)算符例 MOV AX,10HGT16 ADD BL,6EQ0110B
匯編時(shí),計(jì)算表達(dá)式形成指令為:
MOV AX,0 ADD BL,0FFH
18§4-2MASM中的表達(dá)式——關(guān)系運(yùn)算符例 M1819§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)算符19§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符數(shù)1920§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,AX20§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符22021§4-2MASM中的表達(dá)式
——數(shù)值返回運(yùn)算符3.TYPE:格式:TYPE
變量或標(biāo)號(hào)功能:加在變量前,返回變量的類型屬性;加在標(biāo)號(hào)前,返回標(biāo)號(hào)的距離屬性。如下表所示。TYPE運(yùn)算符返回值21§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符32122
§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,0FFH22§4-2MASM中的表達(dá)式——數(shù)值返回2223§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,123§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符42324§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 24§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符52425§4-2MASM中的表達(dá)式
——概述表4-1MASM的表達(dá)式中的運(yùn)算符(3)25§4-2MASM中的表達(dá)式——概述表4-12526§4-2MASM中的表達(dá)式
——修改屬性運(yùn)算符修改屬性運(yùn)算符也稱作綜合運(yùn)算符(Syntheticoperators)。包括6種:段操作符、PTR、THIS、HIGH、LOW、SHORT功能:在程序運(yùn)行過(guò)程中,修改變量或標(biāo)號(hào)的屬性,包括段屬性、偏移地址屬性、類型屬性等。
1.段操作符:格式:段前綴:變量或地址表達(dá)式功能:表示某個(gè)變量或地址被修改到指定的段寄存器提供的段基址中。
例4-12MOVAX,ES:[BX]五、修改屬性運(yùn)算符26§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符修2627§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等連用。27§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符22728§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ǔ)單元,可以通過(guò)PTR指明是存入字節(jié)單元還是字單元。
MOVBYTEPTR[BX],10H ;[BX]10H MOVWORDPTR[BX],10H ;[BX],[BX+1]0010H也可用PTR來(lái)改變距離屬性,
JMPFARPTRLOOPN在JMP語(yǔ)句中將標(biāo)號(hào)LOOPN改為FAR,使JMP指令在其它代碼段中也可以用,實(shí)現(xiàn)段間轉(zhuǎn)移。28§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符2829§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為字類型。29§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符2930§4-2MASM中的表達(dá)式
——修改屬性運(yùn)算符
4.SHOT:格式:SHORT
標(biāo)號(hào)功能:說(shuō)明轉(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é)。30§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符3031§4-2MASM中的表達(dá)式
——修改屬性運(yùn)算符
例 K1 EQU0ABCDH K2 EQU1234H MOV AH,HIGHK1 MOV BL,LOWK2匯編時(shí),計(jì)算表達(dá)式形成指令為:
MOV AH,0ABH MOV BL,34H31§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符3132§4-2MASM中的表達(dá)式
——其它運(yùn)算符1.圓括號(hào)():()中的運(yùn)算符具有最高優(yōu)先權(quán)。2.方括號(hào)[]:方括號(hào)主要用來(lái)表示地址表達(dá)式或多重變量的下標(biāo)值。六、其它運(yùn)算符32§4-2MASM中的表達(dá)式——其它運(yùn)算符1.圓3233§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í)次序33§4-2MASM中的表達(dá)式——優(yōu)先級(jí)表3334§4-3偽指令語(yǔ)句
——概述
§4-3偽指令語(yǔ)句偽指令語(yǔ)句:在匯編期間進(jìn)行處理,主要完成變量定義,存儲(chǔ)器分配,指示程序開始和結(jié)束,段定義,段分配等。類型:數(shù)據(jù)定義語(yǔ)句:DB,DW,DD標(biāo)號(hào)賦值語(yǔ)句:EQU,=段定義語(yǔ)句:SEGMENNT…ENDS段分配語(yǔ)句:ASSUME過(guò)程定義語(yǔ)句:PROC…ENDP程序開始結(jié)束語(yǔ)句:ORG,END,NAME群定義語(yǔ)句:GROUP結(jié)構(gòu)定義語(yǔ)句:STRUC…ENDS記錄定義語(yǔ)句:RECODE34§4-3偽指令語(yǔ)句——概述§4-3435§4-3偽指令語(yǔ)句
——數(shù)據(jù)定義語(yǔ)句
格式1:變量名助記符操作數(shù),操作數(shù)…
;注釋格式2:變量名助記符nDUP(操作數(shù),操作數(shù)…) ;注釋功能:指定的存儲(chǔ)單元,以分配存儲(chǔ)空間或存入操作數(shù)。變量名——用符號(hào)表示,可以省略,后面不跟冒號(hào)。匯編時(shí)將變量助記符后的第一個(gè)字節(jié)的偏移地址作為它的符號(hào)地址。助記符——所用偽指令助記符主要有:DB:用來(lái)定義字節(jié); DW:用來(lái)定義字;DD:用來(lái)定義雙字; DQ:用來(lái)定義四個(gè)字;DT:用來(lái)定義十個(gè)字節(jié);操作數(shù)——操作數(shù)可以是常數(shù),字符串,變量,標(biāo)號(hào),表達(dá)式等。多個(gè)操作數(shù)之間必須用逗號(hào)分開;格式2中,n必須是正整數(shù)。
注釋——說(shuō)明偽指令的功能,可以省略,注釋前必須帶分號(hào)“;”。一、數(shù)據(jù)定義語(yǔ)句35§4-3偽指令語(yǔ)句——數(shù)據(jù)定義語(yǔ)句3536§4-3偽指令語(yǔ)句
——數(shù)據(jù)定義語(yǔ)句
例操作數(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,00H36§4-3偽指令語(yǔ)句——數(shù)據(jù)定義語(yǔ)句3637§4-3偽指令語(yǔ)句
——數(shù)據(jù)定義語(yǔ)句例操作數(shù)是字符串FIRST DB‘HELLO’
;字符串‘HELLO’的ASII碼裝入FIRST開始的存儲(chǔ)單元SECOND DW‘OK’
;字符串‘OK’的ASII碼裝入SECOND開始的存儲(chǔ)單元
37§4-3偽指令語(yǔ)句——數(shù)據(jù)定義語(yǔ)句例操作數(shù)3738§4-3偽指令語(yǔ)句
——數(shù)據(jù)定義語(yǔ)句
例操作數(shù)用?定義不確定值的變量,用作保留存儲(chǔ)空間。
M1 DB? ;定義變量M1為不確定字節(jié),保留l字節(jié)空間
M2 DW0D55H,? ;定義變量M2第二個(gè)字為不確定,保留兩個(gè)字節(jié)空間38§4-3偽指令語(yǔ)句——數(shù)據(jù)定義語(yǔ)句3839§4-3偽指令語(yǔ)句
——數(shù)據(jù)定義語(yǔ)句
例操作數(shù)用DUP來(lái)定義重復(fù)變量
ONE DB5DUP(0)
;重復(fù)5個(gè)0存入ONE起始的存儲(chǔ)單元
TWO DW10DUP(?)
;重復(fù)10次,保留10個(gè)字的存儲(chǔ)單元
THREEDB 4DUP(1,2DUP(20H))
;DUP嵌套39§4-3偽指令語(yǔ)句——數(shù)據(jù)定義語(yǔ)句3940§4-3偽指令語(yǔ)句
——表達(dá)式賦值語(yǔ)句共兩種:賦值語(yǔ)句EQU,等號(hào)語(yǔ)句=。它們均不占用內(nèi)存。二、表達(dá)式賦值語(yǔ)句1.賦值語(yǔ)句EQU:格式:符號(hào)名EQU表達(dá)式功能:給變量、標(biāo)號(hào)、常數(shù)、指令、表達(dá)式等定義一個(gè)符號(hào)名一經(jīng)定義在同一個(gè)程序模塊中不能重新定義40§4-3偽指令語(yǔ)句——表達(dá)式賦值語(yǔ)句共兩種:賦4041§4-3偽指令語(yǔ)句
——表達(dá)式賦值語(yǔ)句
例
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語(yǔ)句右邊表達(dá)式中的變量或標(biāo)號(hào),必須預(yù)先定義。PURGE語(yǔ)句可以解除對(duì)某一個(gè)標(biāo)號(hào)的賦值。例
PURGEC1 ;C1不再代替ADD41§4-3偽指令語(yǔ)句——表達(dá)式賦值語(yǔ)句4142§4-3偽指令語(yǔ)句
——表達(dá)式賦值語(yǔ)句2.等號(hào)語(yǔ)句=等號(hào)語(yǔ)句“=”與EQU語(yǔ)句具有相同功能區(qū)別:EQU左邊的標(biāo)號(hào)不允許重新定義,用“=”定義的語(yǔ)句允許重復(fù)定義。
例
COUNT=100COUNT=COUNT+10A1=BX+SI MOVAX,[A1] ;[BX+SI]單元中的內(nèi)容AXB1=ADDA1=BX MOVCX,[A1] ;[BX]單元中的內(nèi)容CX42§4-3偽指令語(yǔ)句——表達(dá)式賦值語(yǔ)句2.等號(hào)語(yǔ)4243§4-3偽指令語(yǔ)句
——段定義語(yǔ)句
段定義語(yǔ)句進(jìn)行段定義,段分配語(yǔ)句明確段和段寄存器之間的關(guān)系。1.段定義語(yǔ)句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)容。三、段定義語(yǔ)句43§4-3偽指令語(yǔ)句——段定義語(yǔ)句4344§4-3偽指令語(yǔ)句
——段定義語(yǔ)句
⑴定位類型(AlignType)定位該段起始地址。定位類型參數(shù)主要有下面4種。①PARA——指定定位段的起始地址必須在節(jié)的整數(shù)邊界,參數(shù)缺省時(shí),就當(dāng)成PARA。②BYTE——指定該段起始地址定位在存儲(chǔ)單元的任何字節(jié)地址。③WORD——指定該段起始地址定位在字的邊界,即段的首地址必須是偶數(shù)。④PAGE——指定該段起始地址定位在頁(yè)的邊界,即段的首地址必須是256的整數(shù)倍。44§4-3偽指令語(yǔ)句——段定義語(yǔ)句4445它們表示如下的地址要求PARA:XXXXXXXXXXXXXXXX0000BWORD:XXXXXXXXXXXXXXXXXXX0BBYTE:XXXXXXXXXXXXXXXXXXXXBPAGE:XXXXXXXXXXXX00000000B45它們表示如下的地址要求PARA:XXXXXXXXXX4546§4-3偽指令語(yǔ)句
——段定義語(yǔ)句
⑵組合類型(CombineType)決定邏輯段之間的組合方式,主要參數(shù)有6種。①NONE——該段與其它同名段不連接,各段獨(dú)立,每段都有自己的基地址,可作為缺省參數(shù)。②PUBLIC——該段與其它同名段連接時(shí),由低地址到高地址連接,組成一個(gè)邏輯段,連接次序由連接命令指定,連接時(shí)滿足定位類型要求。③COMMON——該段在連接時(shí)與其它模塊中的同名段有相同的起始地址,采用覆蓋的方式在存儲(chǔ)器中存放,連接長(zhǎng)度為各分段中最大長(zhǎng)度。46§4-3偽指令語(yǔ)句——段定義語(yǔ)句4647§4-3偽指令語(yǔ)句
——段定義語(yǔ)句
④AT表達(dá)式——定位該段的起始地址在表達(dá)式所指定的節(jié)(16的整數(shù)倍)邊界上。通常各邏輯段在存儲(chǔ)器中的位置由系統(tǒng)自動(dòng)分配,當(dāng)要求某邏輯段在指定節(jié)的邊界上時(shí),就要用AT參數(shù)來(lái)實(shí)現(xiàn)。AT不能指定代碼段。⑤STACK——指定該段為堆棧段,此參數(shù)在堆棧段中不可省略,多個(gè)模塊只需設(shè)置一個(gè)堆棧段,各個(gè)模塊中的堆棧段采用覆蓋方式組合。容量為各個(gè)模塊中所設(shè)置的最大堆棧段容量。⑥MEMORY——定位該段與其它模塊中的同名段有相同的首地址,采用覆蓋方式在存儲(chǔ)器中組合連接,其功能與COMMON參數(shù)類似,區(qū)別是第一個(gè)帶MEMORY參數(shù)的邏輯段復(fù)蓋在其它同名段的最上層,其它帶此參數(shù)的同名段按照COMMON方式處理。47§4-3偽指令語(yǔ)句——段定義語(yǔ)句4748§4-3偽指令語(yǔ)句
——段定義語(yǔ)句⑶‘分類名’(C1assName)匯編程序連接時(shí)將所有分類名相同的邏輯段組成一個(gè)段組,放在連續(xù)的存儲(chǔ)區(qū)內(nèi)。分類名可選擇不超過(guò)40個(gè)字符的名稱。注意:段定義語(yǔ)句允許嵌套設(shè)置,但不允許相互交叉設(shè)置。SEGMENT后面帶有的三個(gè)參數(shù)必須按格式中規(guī)定的次序排列,分類名必須用單引號(hào)‘
’括起來(lái)。48§4-3偽指令語(yǔ)句——段定義語(yǔ)句⑶‘分類名’(4849§4-3偽指令語(yǔ)句
——段定義語(yǔ)句2.段分配語(yǔ)句(ASSUME):將邏輯段定義成代碼段、數(shù)據(jù)段、堆棧段、附加段。用戶可以設(shè)置多個(gè)邏輯段,但只允許4個(gè)邏輯段同時(shí)有效。格式:ASSUMECS:段名,DS:段名,SS:段名,ES:段名功能:定義4個(gè)邏輯段,指明段和段寄存器的關(guān)系。ASSUME——為偽指令助記符,放在代碼段的開始,不可省略。說(shuō)明當(dāng)前代碼段、數(shù)據(jù)段、堆線段、附加段4個(gè)段如何定義。段名必須是用段定義語(yǔ)句SEGMENT…ENDS定義過(guò)的名字。ASSUMENOTHING取消前面由ASSUME所指定的段寄存器。例:ASSUMEES:NOTHING
49§4-3偽指令語(yǔ)句——段定義語(yǔ)句2.段分配語(yǔ)句4950§4-3偽指令語(yǔ)句
——段定義語(yǔ)句注意:代碼段和數(shù)據(jù)段必須分配,附加段可以省略。ASSUME偽指令只將代碼段的段基址自動(dòng)裝入CS寄存器中,而不能自動(dòng)把其它段基址裝入相應(yīng)的段寄存器中,所以在代碼段的開始要有一段初始化程序完成這一工作。堆棧段:將段基址送入SS寄存器外,還要將棧頂偏移地址置入堆棧指示器SP中。代碼段中使用了串指令,必須設(shè)置附加段做目標(biāo)串基址用,附加段也可用來(lái)存數(shù)據(jù)。50§4-3偽指令語(yǔ)句——段定義語(yǔ)句注意:5051§4-3偽指令語(yǔ)句
——段定義語(yǔ)句例
兩個(gè)16位無(wú)符號(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 ENDS51§4-3偽指令語(yǔ)句——段定義語(yǔ)句例兩個(gè)5152§4-3偽指令語(yǔ)句
——段定義語(yǔ)句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,AX52§4-3偽指令語(yǔ)句——段定義語(yǔ)句CCODE 5253§4-3偽指令語(yǔ)句
——段定義語(yǔ)句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 ENDSTART53§4-3偽指令語(yǔ)句——段定義語(yǔ)句L1:5354§4-3偽指令語(yǔ)句
——過(guò)程定義語(yǔ)句過(guò)程也稱作子程序。節(jié)省內(nèi)存空間,便于進(jìn)行模塊化程序設(shè)計(jì)。格式:過(guò)程名PROC屬性;過(guò)程內(nèi)容
RETN
過(guò)程名ENDP功能:定義一個(gè)過(guò)程,主程序可以用CALL指令調(diào)用它。過(guò)程名——過(guò)程的名字,不可缺省。子程序入口地址。具有三種屬性:段屬性:該過(guò)程所在段的段基址。偏移地址屬性:該過(guò)程第一個(gè)字節(jié)與段首址之間距離字節(jié)。距離屬性:為NEAR或FAR。NEAR允許過(guò)程在段內(nèi)調(diào)用;FAR允許過(guò)程在段間調(diào)用,NEAR為缺省使用。四、過(guò)程定義語(yǔ)句54§4-3偽指令語(yǔ)句——過(guò)程定義語(yǔ)句過(guò)程也稱作子5455§4-3偽指令語(yǔ)句
——過(guò)程定義語(yǔ)句PROC…ENDP——過(guò)程定義偽指令助記符,成對(duì)出現(xiàn),不可缺省。二者前面有相同的過(guò)程名。RETN——為過(guò)程內(nèi)部的返回指令。過(guò)程內(nèi)部至少有—條RET指令,可以在過(guò)程的任何位置,使過(guò)程返回到主程序。過(guò)程內(nèi)部可以有多個(gè)RET,表示此過(guò)程具有多個(gè)返回出口(在不同條件下,從不同出口返回)。N為彈出值,N必須為正偶數(shù),可以缺省。過(guò)程調(diào)用允許嵌套和遞歸調(diào)用。嵌套與遞歸的深度由堆棧段的容量決定。55§4-3偽指令語(yǔ)句——過(guò)程定義語(yǔ)句PROC…E5556§4-3偽指令語(yǔ)句
——過(guò)程定義語(yǔ)句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例
用過(guò)程調(diào)用的方法,將內(nèi)存中N個(gè)BCD碼相加。56§4-3偽指令語(yǔ)句——過(guò)程定義語(yǔ)句DATA S5657§4-3偽指令語(yǔ)句
——過(guò)程定義語(yǔ)句 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 ENDSTART57§4-3偽指令語(yǔ)句——過(guò)程定義語(yǔ)句 MOV5758§4-3偽指令語(yǔ)句
——程序開始和結(jié)束語(yǔ)句
1.ORG:
格式:ORG表達(dá)式
功能:給匯編程序設(shè)置位置指針,指定下面語(yǔ)句的起始偏移地址。
ORG——是偽指令助記符,不可缺省。ORG語(yǔ)句可以放在程序的任何位置。表達(dá)式——給定的偏移地址值,表達(dá)式的計(jì)算結(jié)果必須是正整數(shù)。五、程序開始和結(jié)束語(yǔ)句58§4-3偽指令語(yǔ)句——程序開始和結(jié)束語(yǔ)句5859§4-3偽指令語(yǔ)句
——程序開始和結(jié)束語(yǔ)句
例用ORG指定代碼段地址
CODE SEGMENT ORG 100H ASSUMECS:CODE,DS:DATA,SS:STACK,
ES:DATASTART: ;指定代碼段起始地址偏移100H MOV AX,DATA
………CODE ENDS例用ORG改變數(shù)據(jù)段地址
DATA SEGMENT ORG 100H A1 DB10H,20H,30H ;A1偏移地址100H ORG 200H A2 DW3031H,3233H;A2偏移地址200HDATA ENDS 59§4-3偽指令語(yǔ)句——程序開始和結(jié)束語(yǔ)句5960§4-3偽指令語(yǔ)句
——程序開始和結(jié)束語(yǔ)句2.END:格式:END標(biāo)號(hào)名功能:標(biāo)記匯編源程序結(jié)束。END——是偽指令助記符,不可缺省,放在源程序的最后一行,匯編程序到END語(yǔ)句停止匯編。每個(gè)模塊只有一個(gè)END。標(biāo)號(hào)名——是該程序中第一條可執(zhí)行語(yǔ)句的標(biāo)號(hào)名,可以缺省,若—個(gè)程序包含多個(gè)模塊,END后面帶的標(biāo)號(hào)為主程序模塊中的標(biāo)號(hào)名稱。例
CODE SEGMENT START:
……… SUB1 PROC NEAR
……… SUB1 ENDP CODE ENDS END START60§4-3偽指令語(yǔ)句——程序開始和結(jié)束語(yǔ)句2.E6061§4-3偽指令語(yǔ)句
——外部指令及對(duì)準(zhǔn)偽指令3.LABEL:格式:名稱
LABEL
類型屬性功能:給已定義的變量或標(biāo)號(hào)取另一個(gè)名字??芍匦露x它的類型屬性,使同一變量或標(biāo)號(hào)在不同地方被引用時(shí),可采用不同的名字,具有不同的類型屬性,這樣提高了程序的靈活性。名稱——LABEL語(yǔ)句下一行所使用的語(yǔ)句中的變量或標(biāo)號(hào)取的別名。LABEL——偽指令助記符,不可缺省。類型屬性——規(guī)定了所起別名的變量或標(biāo)號(hào)的類型。61§4-3偽指令語(yǔ)句——外部指令及對(duì)準(zhǔn)偽指令3.6162§4-3偽指令語(yǔ)句
——外部指令及對(duì)準(zhǔn)偽指令⑴LABEL與變量連用:給下一個(gè)變量起一個(gè)別名,類型屬性可修改成BYTE,WORD等。例DATB LABLE BYTE ;DATB為DATW的別名,類型為字節(jié)DATW DW 3031H,3233H ;DATW變量類型為字
MOV AL,DATB[0] ;31HAL MOV BX,DATW[1] ;3233HBX62§4-3偽指令語(yǔ)句——外部指令及對(duì)準(zhǔn)偽指令⑴L6263§4-3偽指令語(yǔ)句
——外部指令及對(duì)準(zhǔn)偽指令⑵LABEL與標(biāo)號(hào)連用:給下一語(yǔ)句定義的標(biāo)號(hào)取一個(gè)別名,可改變距離屬性為FAR或NEAR。例DISF LABEL FARDISN: MOV AX,[SI]DISF與DISN指向同一條指令,DISF是DISN的別名,但距離屬性改為FAR,當(dāng)其它代碼段對(duì)它調(diào)用時(shí)??梢允褂?。63§4-3偽指令語(yǔ)句——外部指令及對(duì)準(zhǔn)偽指令⑵L6364§4-4DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用用戶的應(yīng)用程序及MS-DOS的大部分命令都將通過(guò)軟件中斷來(lái)調(diào)用它們。DOS常用的軟中斷命令是INT20H~INT27H,功能最強(qiáng)的是INT21H。參見P154表4.6INT21H提供了一系列DOS功能調(diào)用,這些子程序?qū)崿F(xiàn)外部設(shè)備管理、文件讀/寫、文件管理、目錄管理和內(nèi)存分配等功能。每個(gè)子程序?qū)?yīng)一個(gè)功能號(hào),給定入口/出口參數(shù)后,用INT21H來(lái)調(diào)用。BIOS中斷類型從0-1FH。P161表4.10用戶可以用指令設(shè)置參數(shù),然后中斷調(diào)用BIOS中的程序。64§4-4DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用用戶6465§4-4DOS系統(tǒng)功能調(diào)用—常用的DOS系統(tǒng)功能調(diào)用所有系統(tǒng)功能調(diào)用的格式一致,有以下4步。系統(tǒng)功能號(hào)送到AH寄存器中。入口參數(shù)送到指定寄存器中。用INT21H指令執(zhí)行功能調(diào)用。根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況。鍵入單字符(AH=1)輸入字符串(AH=0AH)顯示單字符(AH=2)顯示字符串(AH=9)返回操作系統(tǒng)MOVAH,4CHINT21H65§4-4DOS系統(tǒng)功能調(diào)用—常用的DOS系統(tǒng)功能65謝謝觀賞謝謝觀賞66匯編語(yǔ)言程序設(shè)計(jì)第四章課件匯編語(yǔ)言程序設(shè)計(jì)第四章課件匯編語(yǔ)言程序設(shè)計(jì)第四章課件2▲匯編語(yǔ)言(AssemblyLanguage)指令的助記符+符號(hào)地址+標(biāo)號(hào)是機(jī)器語(yǔ)言的符號(hào)表示,是較低級(jí)的語(yǔ)言?!闯绦蚶脜R編語(yǔ)言編寫的程序,稱源程序。不能被機(jī)器識(shí)別。匯編程序翻譯成二進(jìn)制的浮動(dòng)目標(biāo)程序匯編語(yǔ)言:實(shí)時(shí)性能好,程序效率高,節(jié)省內(nèi)存,運(yùn)行速度快,第四章宏匯編語(yǔ)言程序設(shè)計(jì)——概述概述匯編語(yǔ)言程序設(shè)計(jì)第四章課件匯編語(yǔ)言程序設(shè)計(jì)第四章課件匯編語(yǔ)言6768▲匯編語(yǔ)言(AssemblyLanguage)指令的助記符
+符號(hào)地址
+標(biāo)號(hào)是機(jī)器語(yǔ)言的符號(hào)表示,是較低級(jí)的語(yǔ)言?!闯绦蚶脜R編語(yǔ)言編寫的程序,稱源程序。不能被機(jī)器識(shí)別。
匯編程序翻譯成二進(jìn)制的浮動(dòng)目標(biāo)程序
匯編語(yǔ)言:實(shí)時(shí)性能好,程序效率高,節(jié)省內(nèi)存,運(yùn)行速度快,
第四章宏匯編語(yǔ)言程序設(shè)計(jì)——概述
概述2▲匯編語(yǔ)言(AssemblyLanguage)第四章68程序運(yùn)行步驟及生成的文件程序運(yùn)行步驟及生成的文件6970§4-1匯編語(yǔ)言程序格式§4-1匯編語(yǔ)言程序格式——概述
宏匯編使用的語(yǔ)句分兩類指令性語(yǔ)句偽指令語(yǔ)句4§4-1匯編語(yǔ)言程序格式§4-1匯編語(yǔ)言程序格式7071§4-1匯編語(yǔ)言程序格式——指令性語(yǔ)句
指令性語(yǔ)句:與機(jī)器指令相對(duì)應(yīng),可譯成目標(biāo)代碼(機(jī)器指令代碼)。語(yǔ)句格式:標(biāo)號(hào):
指令助記符
操作數(shù),操作數(shù)
;注釋▲標(biāo)號(hào):指令語(yǔ)句的符號(hào)地址,后面必須緊跟冒號(hào)“:”。注意:標(biāo)號(hào)可使用字母、數(shù)字和特殊符號(hào);首字符必須是字母或特殊符號(hào);最大長(zhǎng)度31個(gè)字符;可以省略,經(jīng)常作為表示轉(zhuǎn)移的地址?!噶钪浄褐噶蠲Q的代表符號(hào),指出指令的操作類型??勺g成機(jī)器碼;不可省略,是關(guān)鍵字。
▲操作數(shù):參與指令運(yùn)算的數(shù)據(jù)??梢杂幸粋€(gè)、多個(gè)操作數(shù)或無(wú)操作數(shù);多個(gè)操作數(shù)之間用逗號(hào)“,”隔開,操作數(shù)與指令助記符之間用“空格”隔開。操作數(shù)可以是常數(shù)、變量、標(biāo)號(hào)、寄存器名或表達(dá)式。
▲注釋:說(shuō)明指令或程序的功能,可省略。注釋前加分號(hào)“;”。一、指令性語(yǔ)句5§4-1匯編語(yǔ)言程序格式——指令性語(yǔ)句指令性語(yǔ)7172§4-1匯編語(yǔ)言程序格式——偽指令語(yǔ)句
偽指令語(yǔ)句:無(wú)對(duì)應(yīng)的機(jī)器指令,匯編時(shí)對(duì)偽指令進(jìn)行處理,可完成數(shù)據(jù)定義、存儲(chǔ)區(qū)分配、段定義、段分配、指示程序結(jié)束等功能。語(yǔ)句的格式:
名字偽指令指示符操作數(shù),操作數(shù);注釋
▲名字:名字后不允許帶冒號(hào)“:”,但可以省略。通常是變量名、段名、過(guò)程名、符號(hào)名等。
▲偽指令指示符:匯編程序MASM規(guī)定的符號(hào)。常用的有變量定義語(yǔ)句(DB、DW),符號(hào)定義語(yǔ)句(EQU、=),段定義語(yǔ)句(SEGMENT…END),段分配語(yǔ)句(ASSUME),過(guò)程定義語(yǔ)句(PROC…ENDP)等。
▲操作數(shù):不同偽指令有不同要求。操作數(shù)可以是常數(shù)、變量、字符串、表達(dá)式等。▲注釋:功能和使用與指令性語(yǔ)句相同。二、偽指令語(yǔ)句6§4-1匯編語(yǔ)言程序格式——偽指令語(yǔ)句7273§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)
匯編語(yǔ)言中的操作數(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)‘’括起來(lái),機(jī)內(nèi)存放的是各字符的ASCII碼。例‘ABC’。三、數(shù)據(jù)項(xiàng)7§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)匯編語(yǔ)言7374§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)2.變量:
變量通常指存放在存儲(chǔ)單元中的值,程序運(yùn)行中可以修改。所有的變量都具有三個(gè)屬性。
⑴段值(SEGMENT):
指變量所在段的段基址。
⑵段內(nèi)偏移地址(OFFSET):
指變量所在地址與所在段首地址之間的地址偏移字節(jié)數(shù)。⑶類型(TYPE):
指變量中每個(gè)元素所包含的字節(jié)數(shù):字節(jié)變量(BYTE)、字變量(WORD)、雙字變量(DWORD)等。8§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)2.變量:7475§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)3.標(biāo)號(hào):標(biāo)號(hào)是可執(zhí)行指令語(yǔ)句的地址的符號(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。9§4-1匯編語(yǔ)言程序格式——數(shù)據(jù)項(xiàng)3.標(biāo)號(hào):7576§4-2MASM中的表達(dá)式
——概述§4-2MASM中的表達(dá)式概述表達(dá)式:運(yùn)算對(duì)象
+運(yùn)算符。·在匯編時(shí)進(jìn)行運(yùn)算,運(yùn)算結(jié)果作為語(yǔ)句中的操作數(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)10§4-2MASM中的表達(dá)式——概述§4-27677§4-2MASM中的表達(dá)式
——概述表4-1MASM的表達(dá)式中的運(yùn)算符(1)11§4-2MASM中的表達(dá)式——概述表4-17778§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)算符12§4-2MASM中的表達(dá)式——算術(shù)運(yùn)算符包括77879§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,19H13§4-2MASM中的表達(dá)式——算術(shù)運(yùn)算符例7980§4-2MASM中的表達(dá)式
——邏輯運(yùn)算符
包括4種:AND(與)、OR(或)、NOT(非)、XOR(異或)
注意:按位運(yùn)算的,只能對(duì)常數(shù)進(jìn)行運(yùn)算,得到結(jié)果也是常數(shù)。二、邏輯運(yùn)算符14§4-2MASM中的表達(dá)式——邏輯運(yùn)算符8081§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,0FFH15§4-2MASM中的表達(dá)式——邏輯運(yùn)算符8182§4-2MASM中的表達(dá)式
——概述表4-1MASM的表達(dá)式中的運(yùn)算符(2)16§4-2MASM中的表達(dá)式——概述表4-18283§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)算符17§4-2MASM中的表達(dá)式——關(guān)系運(yùn)算符8384§4-2MASM中的表達(dá)式
——關(guān)系運(yùn)算符例 MOV AX,10HGT16 ADD BL,6EQ0110B
匯編時(shí),計(jì)算表達(dá)式形成指令為:
MOV AX,0 ADD BL,0FFH
18§4-2MASM中的表達(dá)式——關(guān)系運(yùn)算符例 M8485§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)算符19§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符數(shù)8586§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,AX20§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符28687§4-2MASM中的表達(dá)式
——數(shù)值返回運(yùn)算符3.TYPE:格式:TYPE
變量或標(biāo)號(hào)功能:加在變量前,返回變量的類型屬性;加在標(biāo)號(hào)前,返回標(biāo)號(hào)的距離屬性。如下表所示。TYPE運(yùn)算符返回值21§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符38788
§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,0FFH22§4-2MASM中的表達(dá)式——數(shù)值返回8889§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,123§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符48990§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 24§4-2MASM中的表達(dá)式——數(shù)值返回運(yùn)算符59091§4-2MASM中的表達(dá)式
——概述表4-1MASM的表達(dá)式中的運(yùn)算符(3)25§4-2MASM中的表達(dá)式——概述表4-19192§4-2MASM中的表達(dá)式
——修改屬性運(yùn)算符修改屬性運(yùn)算符也稱作綜合運(yùn)算符(Syntheticoperators)。包括6種:段操作符、PTR、THIS、HIGH、LOW、SHORT功能:在程序運(yùn)行過(guò)程中,修改變量或標(biāo)號(hào)的屬性,包括段屬性、偏移地址屬性、類型屬性等。
1.段操作符:格式:段前綴:變量或地址表達(dá)式功能:表示某個(gè)變量或地址被修改到指定的段寄存器提供的段基址中。
例4-12MOVAX,ES:[BX]五、修改屬性運(yùn)算符26§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符修9293§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等連用。27§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符29394§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ǔ)單元,可以通過(guò)PTR指明是存入字節(jié)單元還是字單元。
MOVBYTEPTR[BX],10H ;[BX]10H MOVWORDPTR[BX],10H ;[BX],[BX+1]0010H也可用PTR來(lái)改變距離屬性,
JMPFARPTRLOOPN在JMP語(yǔ)句中將標(biāo)號(hào)LOOPN改為FAR,使JMP指令在其它代碼段中也可以用,實(shí)現(xiàn)段間轉(zhuǎn)移。28§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符9495§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為字類型。29§4-2MASM中的表達(dá)式——修改屬性運(yùn)算符9596§4-2MASM中的表達(dá)式
——修改屬性運(yùn)算符
4.SHOT:格式:SHORT
標(biāo)號(hào)功能:說(shuō)明轉(zhuǎn)移類指令中轉(zhuǎn)向地址的屬性為短轉(zhuǎn)移:-128~+127之間。例 L1: JMP SHOTL2 ……… L2: MOV AX,0
5.HIGH和
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司商務(wù)用車維修合同范本
- 2025年制動(dòng)分泵項(xiàng)目合作計(jì)劃書
- 2025年麻將涼席合作協(xié)議書
- 個(gè)體建材購(gòu)銷合同范本
- 單位食堂供應(yīng)合同范例
- 2025年加氣加注設(shè)備項(xiàng)目建議書
- 家政公司家政公司加盟合同范本
- 2025年霍爾汽車點(diǎn)火系統(tǒng)合作協(xié)議書
- 農(nóng)村承包荒地合同范例
- 合同范本面布局
- 2022版藝術(shù)新課標(biāo)解讀心得(課件)小學(xué)美術(shù)
- 四川政采評(píng)審專家入庫(kù)考試基礎(chǔ)題復(fù)習(xí)試題
- 鋰離子電池失效分析及后果PFMEA-電子表格版
- 2024解析:第十九章生活用電-基礎(chǔ)練(解析版)
- 古建寺廟施工組織設(shè)計(jì)
- 《中小學(xué)校園食品安全和膳食經(jīng)費(fèi)管理工作指引》專題知識(shí)培訓(xùn)
- 青海省西寧市2023-2024學(xué)年高一上學(xué)期物理期末試卷(含答案)
- 《金融市場(chǎng)與金融工具》課程教學(xué)大綱
- 高維數(shù)據(jù)分析新理論
- 2024年廣東公務(wù)員考試申論試題(省市卷)
- 高中生物課程標(biāo)準(zhǔn)(人教版)
評(píng)論
0/150
提交評(píng)論