ARM匯編偽指令介紹
nbsp; 語法格式: CODE16 (或 CODE32 ) CODE16 偽指令通知編譯器,其后的指令序列為 16 位的 Thumb 指令。 CODE32 偽指令通知編譯器,其后的指令序列為 32 位的 ARM 指令。 若在匯編源程序中同時包含 ARM 指令和 Thumb 指令時,可用 CODE16 偽指令通知編譯器其后的指令序列為 16 位的 Thumb 指令, CODE32 偽指令通知編譯器其后的指令序列為 32 位的 ARM 指令。因此,在使用 ARM 指令和 Thumb 指令混合編程的代碼里,可用這兩條偽指令進行切換,但注意他們只通知編譯器其后指令的類型,并不能對處理器進行狀態(tài)的切換。 使用示例: AREA Init , CODE , READONLY …… CODE32 ;通知編譯器其后的指令為 32 位的 ARM 指令 LDR R0 ,= NEXT + 1 ;將跳轉(zhuǎn)地址放入寄存器 R0 BX R0 ;程序跳轉(zhuǎn)到新的位置執(zhí)行,并將處理器切換到 Thumb 工作狀態(tài) …… CODE16 ;通知編譯器其后的指令為 16 位的 Thumb 指令 NEXT LDR R3,=0x3FF …… END ;程序結(jié)束 4、 ENTRY 語法格式: ENTRY ENTRY 偽指令用于指定匯編程序的入口點。在一個完整的匯編程序中至少要有一個 ENTRY (也可以有多個,當有多個 ENTRY 時,程序的真正入口點由鏈接器指定),但在一個源文件里最多只能有一個 ENTRY (可以沒有)。 使用示例: AREA Init , CODE , READONLY ENTRY ;指定應用程序的入口點 …… 5、 END 語法格式: END END 偽指令用于通知編譯器已經(jīng)到了源程序的結(jié)尾。 使用示例: AREA Init , CODE , READONLY …… END ;指定應用程序的結(jié)尾 6、 EQU 語法格式: 名稱 EQU 表達式 { ,類型 } EQU 偽指令用于為程序中的常量、標號等定義一個等效的字符名稱,類似于 C 語言中的# define 。 其中 EQU 可用 “ * ” 代替。 名稱為 EQU 偽指令定義的字符名稱,當表達式為 32 位的常量時,可以指定表達式的數(shù)據(jù)類型,可以有以下三種類型: CODE16 、 CODE32 和 DATA 使用示例: Test EQU 50 ;定義標號 Test 的值為 50 Addr EQU 0x55 , CODE32 ;定義 Addr 的值為 0x55 ,且該處為 32 位的 ARM 指令。 7、 EXPORT(或GLOBAL) 語法格式: EXPORT 標號 EXPORT 偽指令用于在程序中聲明一個全局的標號,該標號可在其他的文件中引用。 EXPORT可用 GLOBAL 代替。標號在程序中區(qū)分大小寫, [WEAK] 選項聲明其他的同名標號優(yōu)先于該標號被引用。 使用示例: AREA Init , CODE , READONLY EXPORT Stest ;聲明一個可全局引用的標號Stest…… END 8、 IMPORT 語法格式: IMPORT 標號 IMPORT 偽指令用于通知編譯器要使用的標號在其他的源文件中定義,但要在當前源文件中引用,而且無論當前源文件是否引用該標號,該標號均會被加入到當前源文件的符號表中。 標號在程序中區(qū)分大小寫, [WEAK] 選項表示當所有的源文件都沒有定義這樣一個標號時,編譯器也不給出錯誤信息,在多數(shù)情況下將該標號置為 0 ,若該標號為 B 或 BL 指令引用,則將 B 或 BL指令置為 NOP 操作。 使用示例: AREA Init , CODE , READONLY IMPORT Main ;通知編譯器當前文件要引用標號Main,但Main 在其他源文件中定義…… END 9、 EXTERN 語法格式: EXTERN 標號 EXTERN 偽指令用于通知編譯器要使用的標號在其他的源文件中定義,但要在當前源文件中引用,如果當前源文件實際并未引用該標號,該標號就不會被加入到當前源文件的符號表中。標號在程序中區(qū)分大小寫, [WEAK] 選項表示當所有的源文件都沒有定義這樣一個標號時,編譯器也不給出錯誤信息,在多數(shù)情況下將該標號置為 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 定義結(jié)構(gòu)化的數(shù)據(jù)類型,然后用 GET 偽指令將這個源文件包含到其他的源文件中。使用方法與 C 語言中的 “ include ” 相似。 GET 偽指令只能用于包含源文件,包含目標文件需要使用 INCBIN 偽指令 使用示例: AREA Init , CODE , READONLY &nbs |