mih*_*iho 2 x86 assembly 32-bit gnu-assembler disassembly
我需要一些帮助来理解GCC为什么这么做
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp # ???
subl $48, %esp # ???
movl $8, 16(%esp)
movl $4, 20(%esp)
Run Code Online (Sandbox Code Playgroud)
为什么先减去16再减去48呢?这样做会不容易subl $64, %esp?
andl $-16, %esp # ???
Run Code Online (Sandbox Code Playgroud)
上面的行不是从16减去16,esp而是将其与16字节边界对齐.
而下一个是减去,主要是为了保留堆栈上的一些空间.
subl $48, %esp # ???
Run Code Online (Sandbox Code Playgroud)