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