2

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

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

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

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

4

1 回答 1

5

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

我可能误解了你的问题,但我没有得到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 设置为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

 
于 2021-04-25T16:18:15.583 回答