gpt4 book ai didi

assembly - ARM 程序集 : bad instruction "mov32"

转载 作者:行者123 更新时间:2023-12-05 08:28:13 25 4
gpt4 key购买 nike

我想将一个 32 位常量加载到一个寄存器中,我发现了一个可以执行此操作的伪指令“mov32”(mov32 pseudo-instruction)。然后我写了一个汇编文件,其中包括:

MOV32 r0, #0xABCDEF12

并使用linaro工具链(版本13.04)编译:

arm-linux-gnueabihf-as -march=armv7-a -mcpu=cortex-a9 test.s -o test.o

但失败并显示消息:

Error: bad instruction `mov32 r0, #0xABCDEF12'

不知道是不是统一汇编语言的问题。以防万一,我在源代码中写了“.syntax unified”,再次测试,还是失败了。 GNU 工具链是否支持 ARM 伪指令,如“mov32”、“ldr r0, =address”等?如果可以,我该如何解决这个问题?谢谢。

最佳答案

正如一位评论者所提到的,MOV32 是一个 pseudo-instruction supported by ARM's own development tools .由于您使用的是 GNU 工具链,因此您有几个选择:

正如 dwelch 提到的,您可以使用 LDR R0,=0xABCDEF12
这也是一个伪指令,它将导致立即数常量被放置在 文字池(散布在整个代码部分的小数据 block ),然后使用相对于 PC 的 LDR 加载。
如果常量可以编码为 imm8 ROR n(在你的情况下它不能,但假设你有 0x80000000)然后 LDR = 伪指令将被翻译成一个单一的 MOV 并且不会向文字池中添加任何内容。


您还可以使用 MOV32 转换成的指令:

MOVW R0,#0xEF12  
MOVT R0,#0xABCD

这需要 ARMv6T2 或更高版本。

关于assembly - ARM 程序集 : bad instruction "mov32",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16657203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com