9、FILED
語法格式:
標(biāo)號 FIELD 表達(dá)式
FIELD偽指令用于定義一個結(jié)構(gòu)化內(nèi)存表中的數(shù)據(jù)域。FILED 也可用“#” 代替。
表達(dá)式的值為當(dāng)前數(shù)據(jù)域在內(nèi)存表中所占的字節(jié)數(shù)。
FIELD偽指令常與MAP偽指令配合使用來定義結(jié)構(gòu)化的內(nèi)存表。MAP偽指令定義內(nèi)存表的首地址,F(xiàn)IELD偽指令定義內(nèi)存表中的各個數(shù)據(jù)域,并可以為 每個數(shù)據(jù)域指定一個標(biāo)號供其他的指令引用。
注意MAP和FIELD偽指令僅用于定義數(shù)據(jù)結(jié)構(gòu),并不實際分配存儲單元。
使用示例:
MAP 0x100 ; 定義結(jié)構(gòu)化內(nèi)存表首地址的值為0x100。
A FIELD 16 ; 定義A的長度為16字節(jié),位置為0x100。
B FIELD 32 ; 定義B的長度為32字節(jié),位置為0x110。
S FIELD 256 ;定義S的長度為256字節(jié),位置為0x130。
三、匯編控制(Assembly Control)偽指令
匯編控制偽指令用于控制匯編程序的執(zhí)行流程,常用的匯編控制偽指令包括以下幾條:
— IF 、ELSE 、ENDIF
— WHILE 、WEND
— MACRO 、MEND
— MEXIT
1、IF、ELSE、ENDIF
語法格式:
IF 邏輯表達(dá)式
指令序列 1
ELSE
指令序列 2
ENDIF
IF 、ELSE 、ENDIF偽指令能根據(jù)條件的成立與否決定是否執(zhí)行某個指令序列。當(dāng)IF后面的邏輯表達(dá)式為真,則執(zhí)行指令序列1 ,否則執(zhí)行指令序列2 。其中,ELSE及指令序列2可以沒有,此時,當(dāng)IF后面的邏輯表達(dá)式為真,則執(zhí)行指令序列1 ,否則繼續(xù)執(zhí)行后面的指令。
IF 、ELSE 、ENDIF偽指令可以嵌套使用。
使用示例:
GBLL Test ;聲明一個全局的邏輯變量,變量名為Test
IF Test = TRUE
指令序列 1
ELSE
指令序列 2
ENDIF
2、WHILE、WEND
語法格式:
WHILE 邏輯表達(dá)式
指令序列
WEND
WHILE 、WEND偽指令能根據(jù)條件的成立與否決定是否循環(huán)執(zhí)行某個指令序列。當(dāng)WHILE后面的邏輯表達(dá)式為真,則執(zhí)行指令序列,該指令序列執(zhí)行完畢后,再判斷 邏輯表達(dá)式的值,若為真則繼續(xù)執(zhí)行,一直到邏輯表達(dá)式的值為假。
WHILE 、WEND偽指令可以嵌套使用。
使用示例:
GBLA Counter ; 聲明一個全局的數(shù)學(xué)變量,變量名為Counter
Counter SETA 3 ;由變量Counter 控制循環(huán)次數(shù)
……
WHILE Counter < 10
指令序列
WEND
7、EXPORT(或GLOBAL)
語法格式:
EXPORT 標(biāo)號 {[WEAK]}
EXPORT偽指令用于在程序中聲明一個全局的標(biāo)號,該標(biāo)號可在其他的文件中引用。EXPORT 可用GLOBAL代替。標(biāo)號在程序中區(qū)分大小寫,[WEAK] 選項聲明其他的同名標(biāo)號優(yōu)先于該標(biāo)號被引用。
使用示例:
AREA Init ,CODE ,READONLY
EXPORT Stest ;聲明一個可全局引用的標(biāo)號Stest
END
8、IMPORT
語法格式:
IMPORT 標(biāo)號 {[WEAK]}
IMPORT偽指令用于通知編譯器要使用的標(biāo)號在其他的源文件中定義,但要在當(dāng)前源文件中引用,而且無論當(dāng)前源文件是否引用該標(biāo)號,該標(biāo)號均會被加入到當(dāng)前源文件的符號表中。標(biāo) 號在程序中區(qū)分大小寫,[WEAK] 選項表示當(dāng)所有的源文件都沒有定義這樣一個標(biāo)號時,編譯器也不給出錯誤信息,在多數(shù)情況下將該標(biāo)號置為0 ,若該標(biāo)號為B或BL指令引用,則將B或BL指令置為NOP操作。
使用示例:
AREA Init ,CODE ,READONLY
IMPORT Main ;通知編譯器當(dāng)前文件要引用標(biāo)號Main,但Main在其他源文件中定 義。
END
9、EXTERN
語法格式:
EXTERN 標(biāo)號 {[WEAK]}
EXTERN偽指令用于通知編譯器要使用的標(biāo)號在其他的源文件中定義,但要在當(dāng)前源文件中引用,如果當(dāng)前源文件實際并未引用該標(biāo)號,該 標(biāo)號就不會被加入到當(dāng)前源文件的符號表中。標(biāo)號在程序中區(qū)分大小寫, [WEAK] 選項表示當(dāng)所有的源文件都沒有定義這樣一個標(biāo)號時,編譯器也不給出錯誤信息,在多數(shù)情況下將該標(biāo)號置為0 ,若該標(biāo)號為B或BL指令引用,則將B或BL指令置為NOP操作。
使用示例:
AREA Init ,CODE ,READONLY
EXTERN Main ;通知編譯器當(dāng)前文件要引用標(biāo)號Main,但Main在其他源文件中定 義。
END
10、GET(或INCLUDE)
語法格式:
GET 文件名
GET偽指令用于將一個源文件包含到當(dāng)前的源文件中,并將被包含的源文件在當(dāng)前位置進(jìn)行匯編處理? 以使用INCLUDE代替GET。
匯編程序中常用的方法是在某源文件中定義一些宏指令,用EQU定義常量的符號名稱,用MAP和FIELD定義結(jié)構(gòu)化的數(shù)據(jù)類型,然后用GET偽指令將這個 源文件包含到其他的源文件中。使用方法與C 語言中的"include” 相似。
GET偽指令只能用于包含源文件,包含目標(biāo)文件需要使用INCBIN偽指令
使用示例:
AREA Init ,CODE ,READONLY
GET a1.s ; 通知編譯器當(dāng)前源文件包含源文件a1.s
GET C:\a2.s ; 通知編譯器當(dāng)前源文件包含源文件C:\a2.s
END
11、INCBIN
語法格式:
INCBIN 文件名
INCBIN偽指令用于將一個目標(biāo)文件或數(shù)據(jù)文件包含到當(dāng)前的源文件中,被包含的文件不作任何變動的存放在當(dāng)前文件中,編譯器從其后開始繼續(xù)處理。
使用示例:
AREA Init ,CODE ,READONLY
INCBIN a1.dat ; 通知編譯器當(dāng)前源文件包含文件a1.dat
INCBIN C:\a2.txt ;通知編譯器當(dāng)前源文件包含文件C:\a2.txt
END