微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM汇编伪指令详解(3)

ARM汇编伪指令详解(3)

时间:11-21 来源:互联网 点击:

: 2 的

表达式次幂+偏移量。
使用示例:
AREA Init , CODE , READONLY , ALIEN = 3 ;指定后面的指令为 8 字节对齐。
指令序列
END

3、 CODE16、CODE32
语法格式:
CODE16 (或 CODE32 )
CODE16 伪指令通知编译器,其后的指令序列为 16 位的 Thumb 指令。
CODE32 伪指令通知编译器,其后的指令序列为 32 位的 ARM 指令。
若在汇编源程序中同时包含 ARM 指令和 Thumb 指令时,可用 CODE16 伪指令通知编译器其后的指令序

列为 16 位的 Thumb 指令, CODE32 伪指令通知编译器其后的指令序列为 32 位的 ARM 指令。因此,在使

用 ARM 指令和 Thumb 指令混合编程的代码里,可用这两条伪指令进行切换,但注意他们只通知编译器其后

指令的类型,并不能对处理器进行状态的切换。
使用示例:
AREA Init , CODE , READONLY
……
CODE32 ;通知编译器其后的指令为 32 位的 ARM 指令
LDR R0 ,= NEXT + 1 ;将跳转地址放入寄存器 R0
BX R0 ;程序跳转到新的位置执行,并将处理器切换到 Thumb 工作状态
……
CODE16 ;通知编译器其后的指令为 16 位的 Thumb 指令
NEXT LDR R3,=0x3FF
……
END ;程序结束

4、 ENTRY
语法格式:
ENTRY
ENTRY 伪指令用于指定汇编程序的入口点。在一个完整的汇编程序中至少要有一个 ENTRY (也可以有

多个,当有多个 ENTRY 时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个 ENTRY

(可以没有)。
使用示例:
AREA Init , CODE , READONLY
ENTRY ;指定应用程序的入口点
……

5、 END
语法格式:
END
END 伪指令用于通知编译器已经到了源程序的结尾。
使用示例:
AREA Init , CODE , READONLY
……
END ;指定应用程序的结尾

6、 EQU
语法格式:
名称 EQU 表达式 { ,类型 }
EQU 伪指令用于为程序中的常量、标号等定义一个等效的字符名称,类似于 C 语言中的# define 。


其中 EQU 可用 “ * ” 代替。
名称为 EQU 伪指令定义的字符名称,当表达式为 32 位的常量时,可以指定表达式的数据类型,可以

有以下三种类型:
CODE16 、 CODE32 和 DATA
使用示例:
Test EQU 50 ;定义标号 Test 的值为 50
Addr EQU 0x55 , CODE32 ;定义 Addr 的值为 0x55 ,且该处为 32 位的 ARM 指令。

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
GE T C:\a2.s ;通知编译器当前源文件包含源文件C:\ a2.s ……
END

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top