我正在开发一个辅助项目,这是一个小型编译器。我无法理解为什么_printf
在打印一个整数时至少需要16字节的堆栈空间才能工作?
下面的我的代码段根据需要打印42
。
16字节堆栈
.global _main
_main:
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movl $42, %eax
movl %eax, -4(%rsp)
leaq L_.str(%rip), %rdi
movl -4(%rsp), %eax
movl %eax, %esi
callq _printf
addq $16, %rsp
popq %rbp
retq
.section __TEXT,__cstring,cstring_literals
L_.str:
.asciz "%d\n"
如果我将堆栈大小更改为16
以下,则会导致崩溃,请对12
说:
subq $12, %rsp
...
...
addq $12, %rsp
我正在这样编译汇编代码:gcc -o IntegerTest IntegerTest.s