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

发布网友 发布时间:2022-04-22 00:12

我来回答

1个回答

热心网友 时间:2022-05-30 19:26

用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。 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 ±KB 到字节或半字对齐的地址。 ±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 是要加载的寄存器。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com