_printf是否需要在堆栈上加上额外的空间才能工作?

时间:2018-06-29 17:21:54

标签: c macos gcc assembly x86-64

我正在开发一个辅助项目,这是一个小型编译器。我无法理解为什么_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

0 个答案:

没有答案
相关问题