标题:
ARM指令集-伪指令
[打印本页]
作者:
look_w
时间:
2017-9-24 15:44
标题:
ARM指令集-伪指令
3.5
伪指令
ARM
编译器一般都支持汇编语言的程序设计和
C/C++
语言的程序设计,以及两者的混合编程。在
ARM
汇编语言
程序
里
,有一些特殊指令助记符,这些助记符与指令系统的助记
符
不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令
,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的
,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。
在
ARM
的汇编程序
中,有
如下几种伪
指令:
ARM
伪指令、符号定义伪指令
、
数据定义
伪指令、
段定义伪指令、模块控制伪指令、汇编
控制伪指令
、
宏
处理伪
指令
等等
。
需要特别指出的是,除了几条
ARM
伪指令以外,其它的伪指令依赖于编译器。也就是说,不同的
ARM
编译器的伪指令集是不相同的。例如,
ADS
编译器的段定义伪指令为
AREA
,而
IAR
编译器的段定义伪指令为
RSEG
和
ASEG
。这种情况使得不同编译器下编出的
ARM
汇编程序是不同的。读者在阅读不同学习材料时应注意分辨在不同编译器下
ARM
汇编程序的区别。
本书介绍的是
IAR EWARM
编译器支持的
ARM
汇编伪指令。
3.5.1 ARM
伪指令
ARM
伪指令不是
ARM
指令集中的指令。它可以象其它
ARM
指令一样使用,但在编译时这些指令将被等效的
ARM
指令所取代。
1、LDR-大范围地址读取
LDR伪指令的格式为:
LDR{条件} reg,=expr/label_expr
reg
为加载的目的寄存器;
expr
为
32
位立即数;
label_expr
为地址表达式或外部表达式。
LDR
伪指令将
32
位常量或一个
32
位地址加载到指定寄存器。
如:
LDR R0
,
=#0x12345
;加载
32
位立即数
0x12345
到寄存器
R0
LDR R0
,
=DATA_BUF+60
;加载
DATA_BUF
地址
+60
2、ADR-小范围地址读取
ADR伪指令的格式为:
ADR{条件} reg,expr
reg
为加载的目的寄存器;
expr
为相对偏移表达式,非字对齐时取值范围为
-255~255
字节,字对齐时取值范围为
-1020~1020
字节。
ADR
伪指令将基于当前
PC
相对偏移的地址值读取到寄存器中。
如:
Start: MOV R0
,
#10
ADR R4
,
start
;相当于
SUB R4
,
PC
,
#0x0c
3、ADRL-中范围地址读取
ADRL伪指令与ADR类似,不同在expr
的取值范围,非字对齐时取值范围为
64KB
,字对齐时取值范围为
256KB
。
4、NOP-空操作
3.5.2
数据定义伪指令
1、DCB和DC8
该伪指令的格式为:
标号 DCB或DC8 表达式
DCB
和
DC8
伪指令用于分配一片连续的
8
位字节存储单元,并用伪指令中指定的表达式初始化。其中表达式可以为
0
~
255
的数字或字符串。
如:
Str DCB “This is a test!”
;分配一个字符串,每个字符
8
位字节
2、DCW和DC16、DCD和DC3
2
与
DCB
和
DC8
用法相同,不同的是分别分配
16
位半字节单元和
32
位字单元。
3、DF32和DF64
分别表示
32
位的单精度浮点数和
64
位的双精度浮点数。
4、DS8、DS16、DS24和DS32
分别用于保留
8
位字节、
16
位半字、
24
位字和
32
位字的存储器空间。
如:
Dataspace DS8 100
;保留
100
个
8
位字节的存储器空间
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0