1

我试图在 ARM M4 程序集中调用 printf 并遇到一些问题。目的是转储 R1 中的内容。代码如下

    .data
    .balign 4
output_string:
    dcb "content in R1 is 0x%x\n", 0
....
    .text
....
    push {r0, r1}
    mov r1, r0
    ldr r0, =output_string
    bl printf
    pop {r0, r1}

我遇到的问题是,当将“output_string”地址放入R0时,该值加上一个额外的1。例如,如果符号“output_string”的值为0x2000,则R0将得到值0x2001。

我觉得这与 THUMB/ARM 模式有关。但是我已经在数据部分声明了“output_string”,为什么汇编器仍然将它翻译为指令地址?

还是有一些更正式的方法来进行这种汇编函数调用?

4

1 回答 1

0

我认为你应该使用:

ldr r0, =output_string

前缀是汇编程序的=简写,可以加载任意 32 位常量。请参阅此 ARM 信息中心页面。

于 2014-03-26T08:59:03.790 回答