我需要一些帮助来理解为什么GCC正在做
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp # ???
subl $48, %esp # ???
movl $8, 16(%esp)
movl $4, 20(%esp)
为什么先减去16再减去48呢?不会更容易做subl $64, %esp
吗?
答案 0 :(得分:6)
andl $-16, %esp # ???
以上行不是从esp
减去16而是将对齐它减去16字节边界。
虽然下面的一个是减去,主要是为了保留堆栈上的一些空间。
subl $48, %esp # ???