首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制LDR指令在拇指程序集中的文字池中放置值

强制LDR指令在拇指程序集中的文字池中放置值
EN

Stack Overflow用户
提问于 2021-04-25 15:27:04
回答 1查看 159关注 0票数 3

我试图创建一个匹配的GBA反汇编使用devkitpro,我遇到了拇指指令LDR R1, =0x3FF的麻烦。

我希望它将0x3FF放在文字池中,并生成一个PC相对地址,这就是组装版本所做的,但是它坚持要创建一个MOVW 32位指令。

我试过使用长度说明符LDR.N来强制它生成一个16位指令,但是这看起来一点也没有区别。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-25 16:18:15

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

我可能误解了您的问题,但我并没有从下面的程序中获得任何movw指令--您可能只是为GBA指定了错误的cpu,或者您使用的是自1994年引入以来不太可能是arm7tdmi的默认cpu。

ldr.s

代码语言:javascript
复制
.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

代码语言:javascript
复制
    .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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67255061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档