大会IA32 $ 16,%esp

时间:2013-08-25 03:14:37

标签: assembly

我刚开始学习装配。我一直在编写简单的C编码并将其编译为汇编。以下是非常简单的。

C编码

int main(){
    int a;
    a = 25;
    return a;
}

装配

main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $16, %esp
    movl    $25, -4(%ebp)
    movl    -4(%ebp), %eax
    leave
    ret

我不明白为什么16从%esp减去。

2 个答案:

答案 0 :(得分:4)

在堆栈上分配16个字节。在x86架构上,堆栈从较高地址到较低地址。从堆栈指针中减去16会为您的函数分配该内存。

答案 1 :(得分:2)

它在堆栈上创建一些空间(称为函数堆栈帧)来存储局部变量,并在离开函数时立即销毁。编译器生成的数字可能会有所不同,也可能超出函数的需要。