我试图在 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”,为什么汇编器仍然将它翻译为指令地址?
还是有一些更正式的方法来进行这种汇编函数调用?