为什么海湾合作委员会生产ANDL $ -16?

时间:2014-04-26 10:56:04

标签: assembly x86 32-bit disassembly gas

我需要一些帮助来理解为什么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吗?

1 个答案:

答案 0 :(得分:6)

andl    $-16, %esp   # ???

以上行不是从esp减去16而是将对齐它减去16字节边界。
虽然下面的一个是减去,主要是为了保留堆栈上的一些空间。

subl    $48, %esp    # ???