什么是伪指令?常用的伪指令功能有哪些

 我来答
庆文山德典
2019-03-16 · TA获得超过3万个赞
知道小有建树答主
回答量:1.1万
采纳率:33%
帮助的人:591万
展开全部
用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。
ADRL
伪指令
将相对于程序或相对于寄存器的地址载入寄存器中。

ADR
指令相似。ADRL
所加载的地址比
ADR
所加载的地址更宽,因为它可生成两个数据处理指令。
Note
汇编版本老于
ARMv6T2
的处理器的
Thumb
指令时,ADRL
是无效的。
语法
ADRL{cond}
Rd,label
其中:
cond
是一个可选的条件代码(请参阅条件执行)。
Rd
是要加载的寄存器。
label
表达式,与程序或寄存器相关。
有关详细信息,请参阅相对寄存器和程序相对的表达式。
用法
ADRL
始终汇编为两个
32
位指令。
即使使用单个指令就可完成地址访问,也会生成多余的第二个地址。
如果汇编程序无法将地址构建为两个指令,则它将生成一条错误消息,汇编将失败。
有关加载更宽范围地址的信息,请参阅LDR
伪指令(另请参阅将常数加载到寄存器)。
ADRL
可生成与位置无关的代码,因为地址与程序或寄存器有关。
如果
label
与程序有关,则其表示的地址必须要与
ADRL
伪指令在同一汇编程序区域内,请参阅AREA。
如果使用
ADRL
来为
BX

BLX
指令生成目标,则当目标中包含
Thumb
指令时,您就要自己设置地址的
Thumb
位(位
0)。
体系结构和范围
可用范围取决于所用的指令集
ARM
±64KB
到字节或半字对齐的地址。
±256KB
字节,字对齐地址。
32

Thumb
±1MB
字节,字节、半字或字对齐地址。
16

Thumb
ADRL
不可用。
上面给出的范围是相对于位于当前指令后的、离当前指令有四个字节(在
Thumb
代码中)或两个字(在
ARM
代码中)间隔的点而言的。

ARM

32

Thumb
中,如果地址为
16
字节对齐,或与该点的相对性更高,则相对地址的范围可更大。
MOV32
伪指令
将以下项之一加载到寄存器:
一个
32
位常数值
任何地址。
MOV32
始终会生成两个
32
位指令,即一个
MOV、MOVT
对。
您可利用它加载任何
32
位常数或访问整个地址空间。
如果用
MOV32
加载地址,则所生成的代码将与位置有关。
语法
MOV32{cond}
Rd,
expr
其中:
cond
是一个可选的条件代码(请参阅条件执行)。
Rd
是要加载数据的寄存器。Rd
不可为
sp

pc。
expr
可以是下列项之一:
symbol
程序区域中的标签。
constant
任何
32
位常数。
symbol
+
constant
标签加上
32
位常数。
用法
MOV32
伪指令的主要功能有:
当单个指令中无法生成立即数时,生成文字常数。
将相对于程序的地址或外部地址载入寄存器中。
无论链接器将包含
MOV32

ELF
代码段置于何处,该地址始终有效。
Note
以这种方式加载的地址是在链接时确定的,因此代码不是位置无关的。
如果所引用的标签位于
Thumb
代码中,则
MOV32
将会设置该地址的
Thumb
位(位
0)。
体系结构
此伪指令在
ARMv6T2

ARMv7
中的
ARM

Thumb
状态下均有效。
LDR
伪指令
将以下项之一载入寄存器:
一个
32
位常数值
一个地址。
Note
本节仅介绍
LDR

指令。
有关
LDR
指令
的详细信息,请参阅
内存访问指令。
有关使用
LDR
伪指令加载常数的信息,请参阅用
LDR
Rd,
=const
加载。
语法
LDR{cond}{.w}
Rt,=[expr
|
label‑expr]
其中:
cond
是一个可选的条件代码(请参阅条件执行)。
.W
是可选的指令宽度说明符。
Rt
是要加载的寄存器。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式