分享
 
 
 

伪指令

王朝百科·作者佚名  2009-12-03
窄屏简体版  字體: |||超大  

用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。

ADRL 伪指令

将相对于程序或相对于寄存器的地址载入寄存器中。 与 ADR 指令相似。ADRL 所加载的地址比 ADR 所加载的地址更宽,因为它可生成两个数据处理指令。

Note

汇编版本老于 ARMv6T2 的处理器的 Thumb 指令时,ADRL 是无效的。

语法

ADRL 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 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{.w} Rt,=[expr | label‑expr]

其中:

cond

是一个可选的条件代码(请参阅条件执行)。

.W

是可选的指令宽度说明符。

Rt

是要加载的寄存器。

expr

取值为一个数值常数:

如果 expr 的值位于范围内,则汇编程序将会生成一个 MOV 或 MVN 指令。

如果 expr 的值不在 MOV 或 MVN 指令的范围内,则汇编程序会将常数放入文字池中,并会生成一个相对于程序的 LDR 指令,该指令可从文字池中读取此常数。

label‑expr

是一个与程序相关的表达式或外部表达式。 汇编程序会将 label‑expr 的值放入文字池中,并会生成一个与程序有关的 LDR 指令,该指令可从文字池中加载该值。

如果 label‑expr 是一个外部表达式,或未包含在当前代码段内,则汇编程序将会在目标文件中放入一个链接器重新定位指令。 链接器将在链接时生成该地址。

如果 label‑expr 是一个局部标签(请参阅局部标签),则汇编程序会在目标文件中放入一个链接器重新定位指令,并会为该局部标签生成一个符号。 该地址将在链接时生成。 如果局部标签引用了 Thumb 代码,则还会设置该地址的 Thumb 位(位 0)。

Note

在 RVCT2.2 中,没有对地址的 Thumb 位进行设置。 如果此设置会影响您的代码,则请使用命令行选项 ‑‑untyped_local_labels 迫使汇编程序在引用 Thumb 代码中的标签时不设置 Thumb 位。

用法

LDR 伪指令的主要功能如下:

当立即数由于超出了 MOV 和 MVN 指令的范围,而不能被移入寄存器中时,生成文字常数。

将相对于程序的地址或外部地址载入寄存器中。 无论链接器将包含 LDR 的 ELF 代码段置于何处,该地址始终有效。

Note

以这种方式加载的地址是在链接时确定的,因此代码不是位置无关的。

pc 到文字池中的值的偏移量必须小于 ±4KB(ARM、32 位 Thumb‑2),或在 0 到 +1KB(Thumb、16 位 Thumb‑2)范围内。 您必须确保有一个满足范围要求的文字池。 有关详细信息,请参阅LTORG。

如果所引用标签在 Thumb 代码中,LDR 伪指令将会设置 label‑expr 的 Thumb 位(位 0)。

有关如何使用 LDR 的详细说明,以及有关 MOV 和 MVN 的详细信息,请参阅将常数加载到寄存器。

Thumb 代码中的 LDR

对于 ARMv6T2 及更高版本的 Thumb 代码,您可以使用 .W 宽度说明符强制 LDR 生成 32 位指令。LDR.W 始终生成 32 位指令,即使利用 16 位 MOV 就可完成常数的加载,或在 16 位 pc 相对载入范围内有文字池。

如果在第一次汇编时,汇编程序尚不知道常数值的相关信息,则不带 .W 的 LDR 将会在 Thumb 代码中生成 16 位指令,即使这会导致对于可在 32 位 MOV 或 MVN 指令中生成的常数,会通过 16 位 pc 相对加载来完成其加载。 但是,如果在第一次汇编时汇编程序就已经知道了该常数,并且该常数可以通过 32 位 MOV 或 MVN 指令生成,则将会使用 MOV 或 MVN 指令。

LDR 伪指令不会生成 16 位标记设置 MOV 指令。 可使用 ‑‑diag_warning 1727 汇编程序命令行选项来检查是否使用了 16 位指令。

有关如何在不利用文字池加载的情况下来生成常数或地址的信息,请参阅MOV32 伪指令。

示例

LDR r3,=0xff0 ; loads 0xff0 into r3

; => MOV.W r3,#0xff0

LDR r1,=0xfff ; loads 0xfff into r1

; => LDR r1,[pc,offset_to_litpool]

; ...

; litpool DCD 0xfff

LDR r2,=place ; loads the address of

; place into r2

; => LDR r2,[pc,offset_to_litpool]

; ...

UND 伪指令

生成无体系结构定义的指令。 执行未定义指令会引发未定义指令异常。 请让无体系结构定义的指令保持在未定义状态。

语法

UND{.w} {#expr}

其中:

cond

是一个可选的条件代码(请参阅条件执行)。对于 ARM 代码或 16 位 Thumb 代码,不允许此伪指令使用 cond。

.W

是可选的指令宽度说明符。

expr

取值为一定范围内的数值常数:

对于 ARM 代码,为 0-65535

对于 32 位 Thumb 代码,为 0-4095

对于 16 位 Thumb 代码,为 0-255。

如果省略了 expr,则使用的值为 0。

Thumb 代码中的 UND

对于 ARMv6T2 及更高版本处理器的 Thumb 代码,您可利用 .W 宽度说明符强制 UND 生成 32 位指令。UND.W 始终生成 32 位指令,即使 expr 在 0-255 范围之内。

反汇编

此伪指令生成的编码将反汇编为 DCI。

; litpool DCD place

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有