我试图创建一个匹配的GBA反汇编使用devkitpro,我遇到了拇指指令LDR R1, =0x3FF的麻烦。
我希望它将0x3FF放在文字池中,并生成一个PC相对地址,这就是组装版本所做的,但是它坚持要创建一个MOVW 32位指令。
我试过使用长度说明符LDR.N来强制它生成一个16位指令,但是这看起来一点也没有区别。
虽然我可以直接使用PC相对地址,因为这是在文字池的中间,这将导致我不得不删除大量的池,并以同样的方式实现加载,这将是非常混乱的,所以这只是最后的手段。如果有人知道一些方法,我可以强迫这个指令生成一个PC相关地址,这将是非常有帮助的。谢谢!
发布于 2021-04-25 16:18:15
下次提出问题时,您应该提供一个最小的,可复制的例子,因为这将使人们更容易帮助您。
我可能误解了您的问题,但我并没有从下面的程序中获得任何movw指令--您可能只是为GBA指定了错误的cpu,或者您使用的是自1994年引入以来不太可能是arm7tdmi的默认cpu。
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 ; 0x3ffhttps://stackoverflow.com/questions/67255061
复制相似问题