資源描述:
《第4章 宏匯編語言》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第4章宏匯編語言本章主要內(nèi)容本章將主要介紹宏匯編語句的基本格式和偽指令,其中偽指令的使用是重點(diǎn)和難點(diǎn)。在偽指令中,將重點(diǎn)介紹了常量、變量定義偽指令、匯編語言源程序基本結(jié)構(gòu)偽指令、過程定義偽指令、宏指令、條件匯編偽指令和其他偽指令。通過上一章和本章的學(xué)習(xí)為后續(xù)的匯編語言程序設(shè)計(jì)奠定了基礎(chǔ)。4.1匯編語句格式匯編語句共有三種語句形式,包括指令語句、偽指令語句和宏指令語句。指令語句已經(jīng)在第3章中進(jìn)行了介紹,本章主要學(xué)習(xí)偽指令語句及宏指令話句。指令語句的基本格式為:[標(biāo)號:]指令助記符[操作數(shù)1[,操作數(shù)2]][;注釋]指令助記
2、符決定了指令完成的操作類型,進(jìn)而也確定了操作所涉及的操作數(shù)的個數(shù),標(biāo)號則根據(jù)應(yīng)用的需求(比如轉(zhuǎn)移指令需要目的地址)來確定。偽指令語句的基本格式為:[變量]偽指令助記符[參數(shù)表][;注釋]偽指令語句是一種指示性語句。偽指令語句和指令語句不同的主要是,指令語句對應(yīng)CPU的某種操作,比如數(shù)據(jù)傳送、算術(shù)運(yùn)算等,每條指令語句經(jīng)過編譯后要產(chǎn)生相應(yīng)的目標(biāo)代碼。而偽指令語句則為匯編和鏈接的過程提供相應(yīng)的輔助信息,不會產(chǎn)生相應(yīng)的目標(biāo)代碼。宏指令語句的基本格式為;[標(biāo)號:]宏指令名[實(shí)參表][;注釋]宏指令實(shí)質(zhì)上是由多條指令構(gòu)成的一組指令的
3、集合,調(diào)用宏指令實(shí)質(zhì)是依次執(zhí)行宏指令所包含的各條指令語句。注釋均為可有可無,語法要求注釋部分是以分號開始的。注釋的目的是為了提高程序的可讀性,一般應(yīng)就某條語句在程序中的作用或一段程序的功能進(jìn)行注釋。注釋可以緊跟在語句行中,也可單獨(dú)作為一行。4.2偽指令偽指令,又稱為偽語句,是匯編語言提供的指示性語言,它為匯編程序和鏈接程序提供信息。偽指令本身不占用內(nèi)存單元,它們的功能是在匯編和鏈接時由相應(yīng)的軟件完成的。本節(jié)僅介紹最常用的偽指令。4.2.1常量、變量及其定義偽指令、運(yùn)算符和表達(dá)式1.常量常量包括立即數(shù)、字符串常數(shù)和符號常數(shù)
4、。(1)立即數(shù),如:125,125D,0A9H,10101010B,11Q,-200。立即數(shù)必須以數(shù)字開頭,以字母A-F開頭的十六進(jìn)制數(shù)必須加前綴數(shù)字0。立即數(shù)的數(shù)制用在數(shù)字之后添加后綴字母來表示,后綴‘D’(或者缺?。┍硎臼M(jìn)制數(shù),后綴‘H’表示十六進(jìn)制數(shù),后綴‘B’表示二進(jìn)制數(shù),后綴‘Q’表示八進(jìn)制數(shù)。經(jīng)過匯編之后,匯編程序?qū)迅鞣N進(jìn)制表示的立即數(shù)全部轉(zhuǎn)換成等值的二進(jìn)制數(shù),負(fù)數(shù)轉(zhuǎn)換成補(bǔ)碼。(2)字符串常數(shù)用單引號括起來的字符串稱為字符串常數(shù)。如‘A’,‘A1B2C3’。經(jīng)過匯編之后,單引號中的每個字符將被轉(zhuǎn)換成相應(yīng)的
5、ASCII碼,可以像使用立即數(shù)一樣使用它們。例如:MOVAL,‘1’;AL=31H(3)符號常數(shù)符號常數(shù)用等值偽指令“EQU”或者等號偽指令“=”定義,使用符號常數(shù)有利于程序調(diào)試,增加程序的可讀性。符號常數(shù)經(jīng)過定義之后,就可以像立即數(shù)一樣使用。例如:PAIEQU3.1415926X=100…MOVAX,PAI;AX=3.1415926MOVDX,X;DX=1002.變量、變量定義偽指令1)變量和標(biāo)號變量代表內(nèi)存操作數(shù)的存儲地址,或者說變量名就代表某個存儲單元。標(biāo)號代表指令地址,它為轉(zhuǎn)移指令提供了轉(zhuǎn)移目標(biāo)。由于標(biāo)號和變量是
6、用一串字符命名的,從這個意義上講,標(biāo)號和變量又稱為符號地址。標(biāo)號和變量的命名規(guī)則是:以字母或者下劃線開頭,后跟字母、數(shù)字、下劃線,長度不超過31個字符,并且系統(tǒng)中保留字不能作為標(biāo)號和變量名。保留字是系統(tǒng)中已經(jīng)專用的有特殊意義的名字,例如,指令的操作碼助記符、運(yùn)算符、寄存器名稱、偽指令助記符等等。標(biāo)號被定義在代碼段,變量通常被定義在數(shù)據(jù)段、附加段或堆棧段。標(biāo)號和變量都有共同的3個屬性。即:a.段屬性。即標(biāo)號或變量所在段的段基址,用SEG運(yùn)算符可以計(jì)算得到。b.偏移屬性。即標(biāo)號或變量所代表的存儲單元,相對于段首址之間的地址偏
7、移量(又稱有效地址),用OFFSET運(yùn)算符可以計(jì)算得到。c.類型屬性。①變量的類型有字節(jié)型、字型、雙字型、四字型等等。用DB偽指令定義的變量,其所屬的單元均為字節(jié)型。用DW,DD,DQ偽指令定義的變量,其所屬的單元分別有字型、雙字型和四字型屬性。了解變量的類型是十分重要的,匯編語言規(guī)定:讀寫內(nèi)存操作數(shù)時源目操作數(shù)的類型必須一致。變量的類型可以用PTR運(yùn)算符作臨時性的修改。②標(biāo)號的類型有FAR(遠(yuǎn)),NEAR(近)兩種屬性。如果某個標(biāo)號是段內(nèi)轉(zhuǎn)移指令的目標(biāo)地址,那么這個標(biāo)號是近程標(biāo)號,它的類型屬性為NEAR(近);如果某個
8、標(biāo)號是其他代碼段轉(zhuǎn)移指令的目標(biāo)地址,那么這個標(biāo)號的類型屬性為FAR(遠(yuǎn))。(2)字節(jié)定義偽指令格式:[變量名]DB一串用逗號間隔的單字節(jié)數(shù)例如:BUF1DB55,66H,7*7,COUNTEQU﹩-BUF1BUF2DB?,?,BUF3DB10DUP(12H,2DUP(12,34))①DB是DefineByte的縮寫,