强制LDR指令将值放入THUMB程序集中的文字池中

我正在尝试使用 devkitpro 创建匹配的 GBA 反汇编,但我在使用 THUMB 指令时遇到了问题LDR R1, =0x3FF

我希望它放在0x3FF文字池中并生成一个相对于 PC 的地址,这是汇编版本所做的,但是它坚持创建一个MOVW32 位指令。

我尝试使用长度说明符LDR.N强制它生成 16 位指令,但这似乎没有任何区别。

虽然我可以直接使用相对于 PC 的地址,但由于这是在文字池的中间,这将导致我不得不删除大量的池并以相同的方式实现加载,这将非常混乱,所以这只是最后的手段。如果有人知道某种方式,我可以强制此指令生成一个与 PC 相关的地址,这将非常有帮助。谢谢!

回答

下次您提出问题时,您应该提供一个最小的、可重现的示例,因为这将使人们更容易为您提供帮助。

我可能误解了您的问题,但我没有movw在从以下程序组装的代码中得到任何说明 - 您可能只是为GBA指定了错误的 cpu ,或者您可能使用了不太可能是的默认 cpu arm7tdmi,因为它于 1994 年推出。

ldr.s

.cpu arm7tdmi
.thumb
ldr r1, =0x3ff
.end

/opt/arm/10/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-as -c ldr.s
/opt/arm/10/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-objdump -d a.out 

a.out:     file format elf32-littlearm


Disassembly of section .text:

00000000 <.text>:
   0:   4900            ldr     r1, [pc, #0]    ; (4 <.text+0x4>)
   2:   0000            .short  0x0000
   4:   000003ff        .word   0x000003ff

设置 cpu ,例如, to cortex-m3,确实提供了与您所描述的一致的输出:

ldr.s

    .cpu cortex-m3
    .thumb
    ldr r1, =0x3ff
    .end

    /opt/arm/10/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-as -c ldr.s
    /opt/arm/10/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-objdump -d a.out 
    
    a.out:     file format elf32-littlearm
    
    
    Disassembly of section .text:
    
00000000 <.text>:
   0:   f240 31ff       movw    r1, #1023       ; 0x3ff

 


以上是强制LDR指令将值放入THUMB程序集中的文字池中的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>