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中的值没有打印正确的值。
我不知道为什么?
1条答案
按热度按时间mum43rcc1#
只有前4个参数在ARM上的寄存器(r 0-r3)中传递,任何其他参数都在堆栈上传递。查看调用ABI的过程以了解详细信息。