【问题标题】:How to use "printf" in raspberry pi assembly language如何在树莓派汇编语言中使用“printf”
【发布时间】:2016-11-05 19:08:15
【问题描述】:

printf 对您可以打印的值的数量有限制吗?

这是我的代码。

.data
.balign 4       
   string: .asciz "\n%d %d %d %d\n"        
.text
.global main
.extern printf

main:
    push    {ip, lr}        @ push return address + dummy register
                            @ for alignment
    ldr     r0, =string     @ get address of string into r0
    mov     r1, #11
    mov     r2, #22
    mov     r3, #33
    mov     r4, #444
    bl      printf          @ print string and pass params
                            @ into r1, r2, and r3
    pop     {ip, pc}        @ pop return address into pc

当我编译并执行这段代码时,它会打印:

11 22 33 1995276288

如您所见,R4 中的值没有打印出正确的值。

不知道为什么?

【问题讨论】:

  • 因为只有前 4 个参数在寄存器中传递。听起来你忘记阅读调用约定文档了。

标签: assembly arm


【解决方案1】:

只有前 4 个参数在 ARM 上的寄存器 (r0-r3) 中传递 - 任何其他参数都在堆栈上传递。详情请查看procedure call ABI

【讨论】:

  • 这解释了问题。谢谢
  • @DanielRobertWebb:那么你应该点击这个答案上的复选标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2017-10-13
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多