自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

2011年計(jì)算機(jī)等級考試三級PC技術(shù)第二章要點(diǎn)(9)

企業(yè)動(dòng)態(tài)
“2011年計(jì)算機(jī)等級考試三級PC技術(shù)分章節(jié)要點(diǎn)”,供考生參考。

整個(gè)備考過程:

九、80X86宏匯編語言的偽指令語

(一)基本宏匯編語言的偽指令語句

8086/8088宏匯編有近60條偽指令,其大體分類如下表所示。

表8086/8088偽指令分類

類別 偽指令 類別 偽指令

符號定義偽操作 EQU,=,LABEL

宏處理偽操作 MACRO,ENDM,EXITM LOCAL,REPT,IRPC,IRP,PURGE

變量定義偽操作 DB,DW,DD,DQ,RECORD,STRUC 條件偽操作 IF,ENDIF,IF1,IF2,IFNB,IFE,IFDIF,IFNDFE IFIDN,ELSE

段定義偽操作 SEGMENT,

ENDS GROUP,

ASSUME,ORG

過程定義偽操作 PROC,ENDP 列表偽操作 PAGE,TITLE, SUBTTL,LIST, XLIST,%OUT

模塊定義與通信 EXTRN,PUBLIC

NAME,END 其他 COMMENT,RADIX INCLUDE EVEN

1.符號定義

符號定義偽指令可用于為表達(dá)式賦予一個(gè)符號名,表達(dá)式可以是常量、變量、標(biāo)號、指令語句和字符等。在程序中,任何需要這種表達(dá)式的地方都可以用被賦予的符號名來代替它。常用的符號定義語句有等值語句(EQU)和等號語句(“=”)。

(1)等值語句

格式:符號名 EQU 表達(dá)式

功能:用符號名代替右邊的表達(dá)式的值。

說明:表達(dá)式可以是一個(gè)值、新符號名、可執(zhí)行的命令或表達(dá)式的值。

注意:在同一個(gè)源程序中,EQU語句定義的符號不能再賦予不同的值,即不能再重新定義。

(2)等號語句

格式:符號名=表達(dá)式

功能:等號語句的功能和EQU語句類似,不同之處是它允許對符號名再定義。

2.變量定義

變量定義語句使用偽指令DB、DW、DD、DF、DQ和DT。格式:變量名 {DB|DW|DD|DF|DQ|DT}表達(dá)式

功能:在內(nèi)存中分配一塊以變量名為名字的一個(gè)或多個(gè)字節(jié)/字/雙字/長字/4字/10字的數(shù)據(jù)儲區(qū),并填入由偽指令給出的數(shù)據(jù)。說明:

①變量名是可選擇的,它表示定義的一塊內(nèi)存單元數(shù)據(jù)區(qū)的名字。

②花括號{}中的項(xiàng)是可選擇的偽指令,每次定義只能選擇其中一種。各偽指令的意義為:

●DB 定義字節(jié)數(shù)據(jù)存儲區(qū)

●DW 定義字?jǐn)?shù)據(jù)存儲區(qū)

●DD 定義雙節(jié)數(shù)據(jù)存儲區(qū)

●DF 定義長字?jǐn)?shù)據(jù)存儲區(qū)

●DQ 定義4字?jǐn)?shù)據(jù)存儲區(qū)

●DT 定義10字壓縮BCD碼數(shù)據(jù)存儲區(qū)

③表達(dá)式是偽指令的操作

數(shù),它可以是數(shù)值表達(dá)式、地址表達(dá)式、ASCII碼表達(dá)式、?表達(dá)式或n DUP表達(dá)式。說明如下:

●數(shù)值表達(dá)式

數(shù)據(jù)在存儲區(qū)中存放時(shí),左邊的數(shù)據(jù)項(xiàng)占較小地址,右邊的數(shù)據(jù)項(xiàng)占較大的地址;對于非DB定義的數(shù)據(jù),高位字節(jié)占據(jù)較大地址,低位字節(jié)占據(jù)較小地址。

●地址表達(dá)式

地址表達(dá)式的運(yùn)算結(jié)果是一個(gè)地址,因而只能使用偽指令DW和DD。這時(shí),存儲單元中存放的是存儲器的地址值。如果使用DW,則存放的是段內(nèi)地址偏移量;如果使用DD,則存放段地址和地址偏移量。

●ASCII碼字符串表達(dá)式

使用偽指令DB可以定義用單引號括起來的字符串,它為字符串的每個(gè)字符分配一個(gè)存儲單元,并依字符串從左到右的順序,將字符的ASCII碼按地址遞增順序放在內(nèi)存中

●?表達(dá)式

表達(dá)式?號時(shí),表示符號名無確定值。匯編程序遇到?號時(shí),它仍然為數(shù)據(jù)項(xiàng)分配存儲單元,但不對它初始化。

●n DUP(?)

格式:數(shù)值表達(dá)式 DUP 項(xiàng)或項(xiàng)表

數(shù)值表達(dá)式的值表示重復(fù)的次數(shù),其各項(xiàng)必須預(yù)先定義。項(xiàng)或項(xiàng)表表示重復(fù)內(nèi)容,可以是?、數(shù)值、數(shù)值表達(dá)式、字符或重復(fù)子句。項(xiàng)表中的各項(xiàng)用逗號隔開。

當(dāng)重復(fù)子句為DB、DW、DD、DQ和惟一操作數(shù)且項(xiàng)為?時(shí),將不初始化數(shù)據(jù)區(qū),該數(shù)據(jù)氏的原存信息保持不變。當(dāng)重復(fù)句是惟一操作數(shù)時(shí),定義的變量具有LENGTH和SIZE屬性。

3.標(biāo)號定義偽指令

格式:符號名 LABEL 類型

功能:將緊跟在本偽指令語句后的標(biāo)號、操作碼、過程或變量建立新的符號名,并刷新其類型屬性。對標(biāo)號、操作碼或過程,其類型為NEAR、FAR;對變量,其類型為BYTE、WORD、DWOBD、FWORD、QWORD或TBYTE。

說明:LABEL偽指令提供了另一種定義標(biāo)號或變量名的方法,但它并不為符號名分配存儲空間 。

4.段定義語句

8086/8088的存儲器是分段的,因此使用段定義語句來組織程序和利用存儲器。常用的段定義偽

指令有:SEGMENT、ENDS、ASSUME、ORG、PAGE、PUBLIC、TITLE、SUBTTL等。

(1)SEGMENT和ENDS

SEGMENT和ENDS語句將匯編語言源程序分成段。

格式:

段名 SEGMENT[定位類型][組合類型][‘類別’]

語句段

段名 ENDS

說明:段名是由自己指定的為該段起的名字。定位類型、組合類型是給段名的屬性,用來指出匯編程序?yàn)樵摱畏峙涞拇鎯ζ鞯钠鹗嫉刂?類別名則指出段的類別。用方括號括起來的項(xiàng)可以缺省。

①定位類型

用于指定該段地址中的5種可供選擇段起點(diǎn)的邊界類型,如下表所示。

定位類型

定位類型 含 義

BYTE(字節(jié)) 段的起始地址可以任意

WORD(字)

段的起始地址必須為偶數(shù),即該地址的最低二進(jìn)制位應(yīng)為0

DWORD(雙字) 段的起始地址必須為4的倍數(shù),即該地址的最后2位二進(jìn)制位應(yīng)為0,通??偸前袲WORD用于80386的32位段中

PARA(節(jié)) 段的起始地址必須為16的倍數(shù),即該地址的最后4位二進(jìn)制位應(yīng)為0

PAGE(頁) 段的起始地址必須為256的倍數(shù),即該地址的最后8位二進(jìn)制位應(yīng)為0

這個(gè)類型可以為標(biāo)號或變量賦予絕對地址,以便程序以標(biāo)號或變量的形式存取這些存儲器單元的內(nèi)容。通常情況下,在AT類型的段中不定義指令或數(shù)據(jù),只是說明一個(gè)地址結(jié)構(gòu)。②組合類型

用來告訴連接程序LINK,本段與其他模塊中同名段的組合連接關(guān)系。共有下表所示的5種可供選擇的組合類型。如果此屬性缺省,則表示該段是獨(dú)立的,不與其他同名段發(fā)生聯(lián)系,并有自己的段起始地址。

組合類型

組合類型 含 義

PUBLIC 鏈接程序LINK將不同模塊中具有該類型且段名相同的段連接到同一個(gè)物理存儲段中,使它們公用一個(gè)段地址

STACK 與PUBLIC的處理方式一樣,只是連接后的段為堆棧段,鏈接程序LINK在鏈接過程中自動(dòng)將新段的段地址送到堆棧段寄存器SS,將新段的長度送到堆棧指針寄存器SP。如果在定義堆棧時(shí)沒有將其說明為STACK類型,在這種情況下就需要在程序中用指令給堆棧段寄存器SS、堆棧指針寄存器SP置值,這時(shí)鏈接程序LINK會給出一個(gè)警告信息

COMMON 產(chǎn)生一個(gè)覆蓋段。鏈接程序LINK為該類型的同名段指定相同的段地址。段的長度取決于最長的COMMON段的長度。段的內(nèi)容為所連接的最后一個(gè)模塊中COMMON段的內(nèi)容及其沒有被覆蓋到的前面COMMON段的部分內(nèi)容

MEMORY 鏈接程序LINK不單獨(dú)區(qū)分MEMORY類型,它把MEMORY與PUBLIC類型同等對特。MASM程序允許使用它,主要是為了與其他支持Intel MEMOˉRY類型的連接程序兼容

AT表達(dá)式 鏈接程序LINK將具有AT類型的段裝在表達(dá)式值所指定的段地址邊界上

③類別

用于控制段的存放次序。它可以是任何合法的名稱,但必須用單引號括起來。連接程序LINK只使同類別的段發(fā)生關(guān)系,并將它們存放在連續(xù)的存儲空間中。若“類別”選擇項(xiàng)缺省,則表明該段類別為空。

(2)ASSUME語句

格式:ASSUME 段寄存器:段名[,段寄存器:段名,]

功能:告訴匯編程序,程序的段結(jié)構(gòu)和在各種指令執(zhí)行時(shí)訪問哪一段。段寄存器只能是CS、SS、DS、ES中的一個(gè),段名是由偽指令SEGMENT/ENDS語句中定義的段名。注意:

●代碼段寄存器CS只能用于有程序的段。代碼段寄存器CS所對應(yīng)的段名必須在該語句之前有定義,因此,ASSUME語句一般都設(shè)置于代碼段內(nèi),放在段定義語句之后。

●堆棧段寄存器SS只能與堆棧段相對應(yīng)。

●ASSUME語句是說明性語句,除主程序的代碼段及最后一個(gè)椎棧段外,其余段寄存器的初值均由用戶在程序中設(shè)置。

(3)組定義偽指令 GROUP

格式:組名GROUP 段名[,段名,……]

功能:將GROUP定義符后指定的所有段分配在一個(gè)64KB的物理存儲器段中,并賦予該段一個(gè)名字———組名。說明:

●組名是用戶自己定義的名字,是指出組的起始地址的一種符號。這個(gè)符號必須是惟一的,不能與任何標(biāo)號、段名及變量名等同名。

●段名是用SEGMENT語句定義的或者由SEG運(yùn)算符得到的段名。

●組定義語句不影響各段的次序,因此組內(nèi)各段不一定要連續(xù)存放,但它們都必須包含在64KB物理存儲器段中。

●當(dāng)源程序結(jié)構(gòu)需要多個(gè)邏輯段時(shí),使用該語句可節(jié)省段寄存器。

●實(shí)際應(yīng)用中最好是讓代碼段為一組,堆棧段為一組,數(shù)據(jù)段為一組或兩組,但組中各段所占用的內(nèi)存儲器的總量不超過64KB。

(4)指定地址偽指令 ORG格式:ORG 表達(dá)式

ORG $+偏移地址

功能:指定該語句之后程序段或數(shù)據(jù)塊的起始地址的偏移量,即語句表達(dá)式的值作為起始地址,連續(xù)存放程序和數(shù)據(jù),直到下一個(gè)ORG語句為止。

5.過程定義偽指令

在程序設(shè)計(jì)中,常把具有一定功能的程序段設(shè)計(jì)成為一個(gè)過程。過程是程序的一部分,它可以被程序調(diào)用。每次可調(diào)用一個(gè)過程,當(dāng)過程中的指令執(zhí)行完后,控制返回調(diào)用它的地方。過程定義語句的格式:

過程名 PROC [NEAR或FAR]

(語句)

┇ RET

過程名 ENDP說明:

●過程名是給過程起的名字,調(diào)用過程時(shí),過程名起標(biāo)號的作用。

●偽指令PROC和ENDP必須成對出現(xiàn),限定一個(gè)過程,并說明該過程是NEAR過程還是FAR過程。

●在宏匯編中,過程調(diào)用和從過程返回使用CALL和RET。

●有兩種調(diào)用方式:段內(nèi)調(diào)用和交*調(diào)用。如果以用段內(nèi)CALL指令調(diào)用過程則必須用段內(nèi)RET指令返回,這樣的過程是NEAR過程,用段交*CALL指令調(diào)用過程,則必須做段交*RET指令返回,這樣的過程是FAR過程。

●在一個(gè)過程中可以有多于一個(gè)的RET指令,并且過程中最后一條指令可以不是RET,但必須是一條轉(zhuǎn)移過程中某處的轉(zhuǎn)移指令。

●主程序和子程序都可以作為一個(gè)過程。

6.結(jié)束語句

格式:END 表達(dá)式

功能:結(jié)束整個(gè)源程序。

說明:表達(dá)式必須產(chǎn)生一個(gè)存儲器地址。這個(gè)地址是當(dāng)程序執(zhí)行時(shí),程序第一條要執(zhí)行指令的地址。

#p#

(1)格式控制偽指令

格式控制偽指令有PAGE,TITLE和SUBTTL。①PAGE

一般為程序的第一語句,它指定匯編程序所產(chǎn)生的列表文件每頁的行數(shù)和每行的字符數(shù)。格式:PAGE 參數(shù)1,參數(shù)2

說明:參數(shù)1表示每頁行數(shù),參數(shù)2表示每行字符數(shù)。②TITLE

用來為程序指定一標(biāo)題,以后的列表文件會在每頁第一行打印這個(gè)標(biāo)題。格式:TITLE 正文③SUBTTL

用于為程序指定一個(gè)小標(biāo)題,打印在每一頁的標(biāo)題之后。格式:SUBTTL 正文

(2)列表控制偽指令

列表控制偽指令很多,主要有:

①.LALL,.SALL和.XALL這是針對宏指令的偽指令。格式:.LALL/.SALL/.XALL說明:

●.LALL 偽指令用于對所有宏匯編列出完整的文本。

●.SALL 偽指令用于刪除宏指令所產(chǎn)生的所有列表。

●.XALL 只將宏擴(kuò)展中產(chǎn)生目的代碼的源程序列表。

②.LIST和.XLIST格式:.LIST/.XLIST說明:

●.LIST 是默認(rèn)偽指令,對所有源程序進(jìn)行列表直到遇到.XLIST偽指令止。

●.XLST 對所有源程序不產(chǎn)生列表直到遇到.LIST偽指令為止。上述偽指令只用于匯編產(chǎn)生.LST文件時(shí)起作用。

8.模塊定義偽指令和通信偽指令

在程序設(shè)計(jì)中,可以將一個(gè)復(fù)雜的程序分成若干個(gè)程序模塊,每個(gè)模塊在物理上和邏輯上都是相對獨(dú)立的,可對它們分別進(jìn)行編寫和調(diào)試。即對所有模塊匯編完后,再由鏈接裝配程序LINK連接成一個(gè)完整的可執(zhí)行程序。模塊定義和通信指令則是實(shí)現(xiàn)模塊劃分、命名及不同模塊中數(shù)據(jù)共享等的說明和記號。

(1)模塊定義語句

模塊定義使用NAME和ENDD兩條偽指令。語句格式:

NAME 模塊名 (語句)ENDD 表達(dá)式說明:

●模塊名是任選的為本次匯編產(chǎn)生的目的模塊所起的名字,是NAME的操作數(shù)。

●ENDD表示源程序到此結(jié)束。同時(shí),在主模塊中ENDD后允許有表達(dá)式,其他它模塊只書寫END。

(2)PUBLIC偽指令

該偽指令定義可供其他模塊引用的符號。格式:PUBLIC 符號表

說明:符號表的各項(xiàng)用逗號隔開,符號可以是符號常量、變量、標(biāo)號或過程名。

(3)EXTRN偽指令

EXTRN偽指令的功能是用于聲明當(dāng)前模塊使用的哪些標(biāo)識符在其他模塊內(nèi)定義。

格式:EXTRN 符號:類型[,符號:類型,……]

說明:符號可以是符號常量、變量、標(biāo)號或過程名;類型可以是BYTE、WORD、DWORD、NEAR、FAR和ABS。各項(xiàng)由逗號隔開。

(二)高級匯編偽指令語句1.結(jié)構(gòu)和記錄

(1)結(jié)構(gòu)

①結(jié)構(gòu)類型數(shù)據(jù)定義偽指令

80x86宏匯編使用偽指令STRUC和ENDS建立一種結(jié)構(gòu)類型的數(shù)據(jù),然后通過結(jié)構(gòu)類型數(shù)據(jù)的預(yù)置,便可方便地訪問結(jié)構(gòu)中的各數(shù)據(jù)項(xiàng),而不需要對操作數(shù)地址表達(dá)式進(jìn)行繁鎖的計(jì)算。 結(jié)構(gòu)類型數(shù)據(jù)定義的格式: 結(jié)構(gòu)名 STRUC

字段名 數(shù)據(jù)定義偽指令定義符 表達(dá)式

結(jié)構(gòu)名 ENDS

說明:結(jié)構(gòu)類型數(shù)據(jù)是用STRUC和ENDS括起來的數(shù)據(jù)定義語句序列,這時(shí)數(shù)據(jù)定義語句中的符號稱為字段名。注意:

●定義結(jié)構(gòu)時(shí),STRUC和ENDS必須成對出現(xiàn),缺一不可。

●結(jié)構(gòu)名是為結(jié)構(gòu)起的名字,是任意選定的。

●同時(shí)在同一結(jié)構(gòu)定義中,字段名不得重名。

②結(jié)構(gòu)變量說明與賦初值

結(jié)構(gòu)類型數(shù)據(jù)的定義只是告訴匯編程序已存在這樣一種形式的變量,還必須對結(jié)構(gòu)進(jìn)行存儲分配和預(yù)置后才能真正產(chǎn)生結(jié)構(gòu)數(shù)據(jù)的變量。結(jié)構(gòu)類型數(shù)據(jù)預(yù)置的格式:

結(jié)構(gòu)變量名 結(jié)構(gòu)名 <字段值表>說明:

●DATAMAX和DATATXN是結(jié)構(gòu)變量名。

●結(jié)構(gòu)變量名是任意的,由程序員自行設(shè)定。

●結(jié)構(gòu)變量名與具體的存儲空間和數(shù)據(jù)相聯(lián)系,在程序中可直接引用。

●字段值表用來給結(jié)構(gòu)變量賦初值,字段值必須用尖括號括起來,其排列順序和類型應(yīng)該與結(jié)構(gòu)定義時(shí)的各字段相一致,各字段值之間用逗號隔開。如果采用定義結(jié)構(gòu)時(shí)的初值,則僅寫一個(gè)逗號;若所有字段采用定義時(shí)的初值,則僅寫一對尖括號。

注意:并不是所有的字段都可以重新賦初值,只有一項(xiàng)數(shù)據(jù)的字段可重新賦值。在程序中引用結(jié)構(gòu)變量,可直接寫結(jié)構(gòu)變量名:引用結(jié)構(gòu)變量的某一字段時(shí),要采用下述格式:結(jié)構(gòu)變量名.字段名

(2)記錄

記錄是一種處理按位計(jì)算信息的數(shù)據(jù)類型。記錄定義的格式:

記錄名 RECORD 字段名:寬度[=表達(dá)式][,……]說明:

●記錄名和字段名必須具有惟一性;

●寬度表示字段所占的位數(shù)(1~16位),如果各字段的寬度和大于8位,那么匯編程序按字處理,否則按字節(jié)處理。若總值數(shù)少于8位或16位,則所有字段都右對齊到字或字節(jié)的最低有效位置。表達(dá)式賦給相應(yīng)字段的初值,是可選擇的。

●記錄的各字段寬度之和不得大于16位。記錄也必須經(jīng)過預(yù)置才能產(chǎn)生記錄類型數(shù)據(jù)變量,才能真正占有內(nèi)存。記錄預(yù)置的格式:

記錄變量名 記錄名 <字段值表>

說明:字段值表是賦給各字段的初值,必須用尖括號括起來,表中各項(xiàng)間用逗號分隔,各項(xiàng)順序應(yīng)與記錄定義時(shí)相一致。若某字段采用時(shí)的初值,則該字段用逗號表示;若各字段均采用定義時(shí)的初值,則僅用尖括號。

對記錄進(jìn)行操作的專用操作符有3個(gè),即:記錄字段名,WIDTH和MASK。①記錄字段名

這個(gè)操作符無操作數(shù),可直接引用,它的結(jié)果是一個(gè)立即數(shù),表示該字段的最低位移到所在記錄最右邊(0位)所需的移位次數(shù)。②WIDTH

返回記錄或記錄某字段的寬度。

格式:WIDTH 記錄名或記錄字段名③MASK

格式:MASK 記錄字段名

MASK的結(jié)果是一個(gè)8位或16位二進(jìn)制數(shù),這個(gè)二進(jìn)制數(shù)中相應(yīng)于該字段的各位均是1,其余各位均是0。

記錄操作符可以與運(yùn)算符NOT、OR、AND、SHL、SHR配合使用。

關(guān)于記錄、記錄字段及記錄變量的調(diào)用,由于記錄有自己專用的操作符,故利用這些操作符可對記錄及其字段進(jìn)行操作。

2.宏指令

在匯編語言程序中,有的程序段有時(shí)要多次使用,為了使在源程序中不重復(fù)書寫這個(gè)程序段,可以用一條宏指令來代替,在匯編時(shí)由匯編程序產(chǎn)生所需的代碼。宏指令的使用過程是宏定義、宏調(diào)用和宏擴(kuò)展。

(1)宏定義

宏指令的定義格式:

宏指令名 MACRO[形式參數(shù)]┆(宏體) ENDM說明:

●宏指令名是給宏指令起的名字,MACRO是宏定義的定義符,ENDM是宏定義的結(jié)束符,兩者必須成對出現(xiàn)。

●MACRO和ENDM之間的指令序列稱為宏體,即用宏指令要代替的程序段。宏指令具有接受參數(shù)的能力,宏體中使用的形式參數(shù)必須在MACRO語句中出現(xiàn)。當(dāng)有兩個(gè)以上參數(shù)時(shí),需用逗號隔開。

●在宏指令被調(diào)用時(shí),這些參數(shù)被給出的一些名字或數(shù)值所取代。

(2)宏調(diào)用經(jīng)過宏定義后,在源程序中的任何位置可以直接使用宏指令名,實(shí)現(xiàn)宏指令的調(diào)用,稱為宏調(diào)用。宏調(diào)用的結(jié)果是將匯編程序翻譯成該宏定義的程序段,而產(chǎn)生的目標(biāo)代碼拷貝到調(diào)用點(diǎn)。宏調(diào)用的格式:

宏調(diào)令名(參數(shù),……)

(3)宏擴(kuò)展

在匯編宏指令時(shí),宏匯編程序?qū)⒑牦w的指令插入到宏指令所在的位置上,并用實(shí)在參數(shù)代替形式參數(shù),同時(shí)在插入的每一條指令前加一個(gè)“+”號,這個(gè)過程稱為宏擴(kuò)展。

(4)常用宏指令

80x86宏匯編中常用宏指令的格式及功能如下表所示。

常用宏指令

名稱 格式 功能

MACRO 宏定義偽指令

PURGE PURGE宏指令名[…]

其功能是取消宏指令名的定義。一個(gè)PURGE指令可同時(shí)取消多個(gè)宏定義

REPT REPT<表達(dá)式> ┆(指令體)ENDM 其功能是重復(fù)執(zhí)行指令體所包含的話句,重復(fù)次數(shù)由表達(dá)式的值確定

IRP IRP形式參量,(參數(shù)表) …(指令體)ENDM 重復(fù)執(zhí)行指令體內(nèi)所包含的語句。重復(fù)次數(shù)由參數(shù)表中參數(shù)的個(gè)數(shù)決定。參數(shù)表中參數(shù)必須用<>括起來,參數(shù)間用逗號分隔。每重復(fù)一次,依次用參數(shù)表中的參數(shù)代替形式參數(shù)

IRPC IRPC形式參數(shù),字符串 ┆(指令體)ENDM 功能與IRP相同,只是用字符串代替IRP中指令中的參數(shù)表

3.重復(fù)匯編偽指令

這是重復(fù)匯編某一語句序列的偽指令,它可以出現(xiàn)在宏定義中,也可以單獨(dú)出現(xiàn)在源程序中,注意,重復(fù)匯編是在程序匯編期間對某些語句進(jìn)行重復(fù)匯編,而不是在程序運(yùn)行期執(zhí)行重復(fù)操作。重復(fù)匯編偽指令有以下3種形式:

(1)格式1

REPT<表達(dá)式>

┆ ;需重復(fù)的語句組

ENDM

這種宏指令用于重復(fù)塊次數(shù)確定的偽操作,它表示按表達(dá)式所指定的次數(shù),重復(fù)REPT和ENDM之間的語句塊,表達(dá)式的取值范圍是0~65535。

(2)格式2

IRP<形式參數(shù)>,<實(shí)在參數(shù)1,實(shí)在參數(shù)2,……>

┆ ;需重復(fù)的語句組

ENDM

這種宏指令用于帶立即數(shù)的重復(fù)偽操作。實(shí)在參數(shù)是用戶指定的立即數(shù),它的個(gè)數(shù)就是重復(fù)次數(shù),每重復(fù)一次,就用一個(gè)實(shí)在參數(shù)替代形式參數(shù)。

(3)格式3

IRPC形式參數(shù),<字符串>

┆ ;需重復(fù)的語句組

ENDM

這種宏指令用于帶字符串的重復(fù)偽操作,重復(fù)次數(shù)由字符串的個(gè)數(shù)確定,每次重復(fù),依次用字符串中的一個(gè)字符替代形式參數(shù),直到字符替代完畢為止。

4.條件匯編偽指令

80x86宏匯編提供了條件匯編功能和條件匯編偽指令,如下表所示。

條件匯編偽指令

IFNB<參量>

格 式 功 能

IF(表達(dá)式) 若表達(dá)式值不為0,則條件為真

IFE(表達(dá)式) 若條件表達(dá)式值為0,則條件為真

IF1 當(dāng)匯編程序處在對源程序進(jìn)行第一次掃描過程時(shí),條件為真

IF2 當(dāng)匯編程序處在對源程序進(jìn)行第二次掃描過程時(shí),條件為真

IFDEF<符號> 若指定符號已被定義或由EXTRN指令進(jìn)行外部說明,則條件為真

IFNDEF<符號> 若指定符號未定義或未由EXTRN指令進(jìn)行外部說明,則條件為真

IFB<參量> 若參量為空格,則條件為真

B<參量> 參量不是空格時(shí),條件為真

IFIDN<參量1>,<參量2> 當(dāng)參量1的串與參量2的串相同時(shí),條件為真

IFIDF<參量1>,<參量2> 當(dāng)參量1的串與參量2的串不同時(shí),條件為真

各種條件匯編語句用法的一般格式為:

IF ×× ARGUMENT

<語句體1>

[ELSE] (任選)

<語句體2>

ENDIF

其中,IF××是條件偽指令,××用于區(qū)別不同種類的條件偽指令。

#p#

(三)偽指令語句的增強(qiáng)與擴(kuò)充

1.簡化段定義偽指令

(1)簡化段定義偽指令:完整段定義偽指令和簡化段定義偽指令。在MASM5.0以上的匯編語言版本中,既可以使用完整段定義偽指令,又可使用簡化段定義偽指令;在低于MASM5.0的版本中,只能使用完整段定義偽指。

簡化段定義偽指令如下表所示。

簡化段定義偽指令

段語句名 偽指令格式 功 能

代碼段語句 .CODE[名字] 定義一個(gè)代碼段,如果有多個(gè)代碼段,要用名字加以區(qū)分

堆棧段語句 .STACK[長度] 定義一個(gè)堆棧段,并形成堆棧段寄存器SS和堆棧指針SP的初值。(SP)=長度,如果省略長度,則(SP)=1024

初始化近程數(shù)據(jù)段語句 .DATA 定義一個(gè)近程數(shù)據(jù)段,當(dāng)用來與高級語言程序連接時(shí),其數(shù)據(jù)空間要賦初值

非初始化近程數(shù)據(jù)段句 .DATA? 定義一個(gè)近程數(shù)據(jù)段,當(dāng)用來與高級語言程序連接時(shí),其數(shù)據(jù)空間只能用“?”定義,表示不賦初值

常數(shù)段語句 .CONST 定義一個(gè)常數(shù)段,該段是近程的,用來與高級語言程序連接, 段中數(shù)據(jù)不能改變

初始化遠(yuǎn)程數(shù)據(jù)段語句 .FARDARA?[名字] 定義一個(gè)遠(yuǎn)程數(shù)據(jù)段,且其數(shù)據(jù)語句的數(shù)據(jù)應(yīng)賦初值,用來與高級語言程序連接

非初始化遠(yuǎn)程數(shù)據(jù)段句 .FARDARA[名字] 定義一個(gè)遠(yuǎn)程數(shù)據(jù)段,但其數(shù)據(jù)空間不賦初值,只能用“?”定義數(shù)據(jù),用來與高級語言程序連接

(2)定義內(nèi)存模式偽指令(MODEL)

在使用簡化段定義偽指令時(shí),必須事先說明用戶使用的內(nèi)存模式。格式:MODEL 模式類型[,高級語言]功能:指定數(shù)據(jù)和代碼允許使用的長度。

●程序中凡數(shù)據(jù)或代碼的長度不大于64KB時(shí)為近程,否則為遠(yuǎn)程。近程的數(shù)據(jù)通常定義在一個(gè)段中,對應(yīng)于物理存儲器中的一個(gè)段,只要程序一開始將其段值設(shè)置在DS中,以后數(shù)據(jù)的訪問只改變偏移值,而不必改變其段值。

通??偸菍⒍x內(nèi)存模式偽指令語句放在用戶程序中其他簡化定義偽指令語句之前。可供選擇的內(nèi)存模式有5類,如下表所示。當(dāng)獨(dú)立的匯編語言源程序不與高級語言程序連接時(shí),多數(shù)情況下只用小模式。

內(nèi)存模式的類型

內(nèi)存模式 說 明

Small 小模式,程序中的數(shù)據(jù)放在64KB的數(shù)據(jù)段內(nèi),代碼放在64KB的代碼段中,為近程

Medium 中模式,數(shù)據(jù)為近程,允許代碼為遠(yuǎn)程

Compact 壓縮模式,代碼為近程,允許數(shù)據(jù)為遠(yuǎn)程

Large 大模式,允許數(shù)據(jù)和代碼為遠(yuǎn)程,但一個(gè)數(shù)據(jù)段不能大于64KB

Huge 巨型模式,允許數(shù)據(jù)和代碼為遠(yuǎn)程,且數(shù)據(jù)語句所用存儲空間可以大于64KB

2.方式選擇偽指令

80x86匯編語言是在8086/8088匯編語言的基礎(chǔ)上逐步發(fā)展并向上兼容的,因此在對源程序進(jìn)行匯編時(shí),匯編程序首先要區(qū)分當(dāng)前的源程序是針對80x86系列的哪種微處理器而執(zhí)行的,為此提供了微處理器方式選擇偽指令。又因?yàn)镸ASM5.0中對應(yīng)每種微處理機(jī)的指令系統(tǒng)都有一個(gè)匯編執(zhí)行語句集合,簡稱指令集,因此微處理器方式選擇偽指令,實(shí)質(zhì)上也就是指令集選擇偽指令。方式選擇偽指令的格式和功能下表所示。

方式選擇偽指令的格式和功能

偽指令格式

功 能

.8086

這是一種默認(rèn)方式,它告訴匯編程序只接受8086/8088指令

.286/.286C 它告訴匯編程序只接受8086/8088指令以及80286非保護(hù)方式下的指令,用.8086可以刪除該偽指令

.286P 靠訴匯編程序接受8086/8088以及80286的所有指令(不僅包括保護(hù)方式下的指令,也包括非保護(hù)方式下的指令),通常只有系統(tǒng)設(shè)計(jì)人員才使用該偽指令,可以使用.8086偽指令刪除

.386/.386C 告訴匯編程序接受8086/8088指令,以及80286/80386非保護(hù)方式下的指令。在這種方式下,將禁止所有保護(hù)方式下的指令出現(xiàn),否則將出錯(cuò)

.386P 除具有.386/.386C功能外,還允許匯編保護(hù)方式下的80286/80386指令,通常只有系統(tǒng)設(shè)計(jì)人員才使用該偽指令。可以使用.8086偽指令刪除

.8087 選用8087指令集,并指定實(shí)數(shù)的二進(jìn)制碼為IEEE格式

.287 選用80287指令集,并指定實(shí)數(shù)的二進(jìn)制碼為IEEE格式

.387 選用80387指令集,并指定實(shí)數(shù)的二進(jìn)制碼為IEEE格式

.486/.486C 允許匯編非保護(hù)方式下的80486指令。MASM6.0可以使用

.486P 允許匯編80486的全部指令。MASM6.0可以使用

上述偽指令語句一般放在源程序的開頭

【編輯推薦】

  1. 2011年計(jì)算機(jī)等級考試三級PC技術(shù)第二章要點(diǎn)(8)
  2. 2011年計(jì)算機(jī)等級考試三級PC技術(shù)第二章要點(diǎn)(7)(1)
  3. 2011年計(jì)算機(jī)等級考試三級PC技術(shù)第二章要點(diǎn)(6)
  4. 更多等考資料請點(diǎn)擊51CTO軟考專題
責(zé)任編輯:張攀 來源: 三級PC技術(shù)
相關(guān)推薦

2011-01-24 10:28:03

三級PC技術(shù)

2010-12-15 11:29:43

PC技術(shù)

2011-01-13 10:45:11

三級PC技術(shù)

2010-12-28 10:58:34

PC技術(shù)

2011-01-06 11:03:15

三級PC技

2011-01-20 10:34:26

三級PC技術(shù)

2010-12-23 11:23:25

PC技術(shù)

2011-03-04 10:44:12

三級PC技術(shù)

2010-12-27 10:54:54

PC技術(shù)

2010-12-15 11:38:06

PC技術(shù)

2010-12-13 11:50:48

三級PC技術(shù)

2011-01-04 13:51:44

PC技術(shù)

2010-12-28 10:55:07

PC技術(shù)

2010-12-09 10:59:54

三級PC技術(shù)

2010-12-06 10:42:51

計(jì)算機(jī)等級考試

2010-12-07 10:53:45

三級網(wǎng)絡(luò)技術(shù)

2010-12-06 11:07:12

計(jì)算機(jī)等級考試

2011-01-27 11:28:55

三級網(wǎng)絡(luò)技術(shù)

2010-12-08 11:10:14

三級網(wǎng)絡(luò)技術(shù)

2011-09-17 19:44:59

計(jì)算機(jī)等級考試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號