ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
[TOC] ## push:压栈 PUSH 指令首先减少 ESP 的值,再将源操作数复制到堆栈。操作数是 16 位的,则 ESP 减 2,操作数是 32 位的,则 ESP 减 4。PUSH 指令有 3 种格式: ``` PUSH reg/mem16 PUSH reg/mem32 PUSH inm32 ``` `push %eax` ,相当于: ``` subl $4, %esp # 栈顶指针减4 movl %eax, (%esp) #%eax -> esp 地址 ``` ## pop:出栈 POP 指令首先把 ESP 指向的堆栈元素内容复制到一个 16 位或 32 位目的操作数中,再增加 ESP 的值。如果操作数是 16 位的,ESP 加 2,如果操作数是 32 位的,ESP 加 4: ``` POP reg/mem16 POP reg/mem32 ``` `pop %eax` ,相当于: ``` movl (%esp), %eax addl %4, %esp #栈顶指针加4 ```