作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 03:50:06
什么是伪指令?常用的伪指令功能有哪些
用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行.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 是要加载的寄存器.