我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 指令寄存器 >

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

归档日期:08-25       文本归类:指令寄存器      文章编辑:爱尚语录

  用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。 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 labelexpr] 其中: cond 是一个可选的条件代码(请参阅条件执行)。 .W 是可选的指令宽度说明符。 Rt 是要加载的寄存器。

本文链接:http://f-taiken.net/zhilingjicunqi/699.html