ARM Cortex-M4:在汇编中调用printf时遇到的问题



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

    .data
    .balign 4
output_string:
    dcb "content in R1 is 0x%xn", 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。

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

或者有一些更正式的方式来做这样的汇编内函数调用?

我认为你应该使用:

ldr r0, =output_string

=前缀是汇编器的一种简写,可以使其加载任意32位常量。参见ARM信息中心页面

最新更新