ARM模式,加载32位常量。一般情况

时间:2014-12-27 21:17:40

标签: arm

我正在寻找一种通用方式在ARM模式下加载32位常量。 不幸的是,我不能同时使用" ldr rX,= const" (由于外部问题)也没有movw / movt(我的目标是armv6k)

这是我的尝试:

mov rX, 0
orr rX, (const&0x000000FF)
orr rX, (const&0x0000FF00)
orr rX, (const&0x00FF0000)
orr rX, (const&0xFF000000)

我的代码是否正确?你能建议我一个更好的方法吗?谢谢。

1 个答案:

答案 0 :(得分:3)

arm和gnu汇编程序都允许语法:

ldr rX,=0x12345678

这导致pc相对寻址范围内的位置(如果可能)被分配数据字0x12345678并且指令编码为pc相对负载,基本上:

ldr r0,my_data
...
my_data: .word 0x12345678

您的另一种选择是少于您概述的一条指令:

mov rX,0x0000078
orr rX,rX,0x00005600
orr rX,rX,0x00340000
orr rX,rX,0x12000000

现在至少使用gcc,不知道arm,如果使用ldr rX,= number功能并且数字可以用单个动作编码,它将编码单个mov ...