装配 IA32 $16,%esp

Tun*_*yaw 1 assembly

我刚刚开始学习汇编。我一直在编写简单的 C 代码并将其编译为汇编语言。下面是非常简单的一种。

C编码

int main(){
    int a;
    a = 25;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

集会

main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $16, %esp
    movl    $25, -4(%ebp)
    movl    -4(%ebp), %eax
    leave
    ret
Run Code Online (Sandbox Code Playgroud)

我不明白的是为什么要从%esp中减去16。

ick*_*fay 5

这会在堆栈上分配 16 个字节。在x86架构上,堆栈从高地址到低地址。从堆栈指针中减去 16 即可分配该内存供函数使用。