在 ARM asm 中使用移位偏移量来寻址标签

问题描述 投票:0回答:1

我有兴趣在循环中使用计数器来使用 Arm 组件不断加载字符串数组。 字符串间隔 16 个字节,索引偏移量为 r4。

@r4 contains 0
printInventory:
    ldr     r0, =PrintLetter
    ldr     r1, [=FirstString,r4, LSL #4] @Loads the address of (FirstString + 16*r4)
    bl      printf
//snip
    add     r4, r4, #1
    b printInventory

编译器不接受此语法。实施这样的事情的可接受的方式是什么?

assembly arm syntax-error
1个回答
0
投票

我意识到,当加载标签时,它实际上是加载一个到电脑的偏移量,即:

ldr r1, =FirstString

其实是

ldr r1, [pc, #0x20]

或者任何标签的偏移量。 我意识到这意味着我所做的事情是行不通的。我的解决方法如下:

printInventory:
ldr     r0, =PrintLetter
ldr     r1, =FirstString @Loads the address of FirstString
add     r1, r1, r4, LSL #4
bl      printf
//snip
add     r4, r4, #1
b printInventory

如果您遇到类似问题,我希望这对您有所帮助,并感谢那些发表评论的人。

© www.soinside.com 2019 - 2024. All rights reserved.