push指令
push
指令的原理
-
堆栈指针的调整:
-
在x86架构中,堆栈向低地址方向增长。
-
执行
push
指令时,首先将堆栈指针ESP
(或在x86_64架构中为RSP
)减小,以为新的数据腾出空间。对于32位系统,堆栈指针减小4个字节;对于64位系统,堆栈指针减小8个字节。
-
-
数据写入堆栈:
- 将要压入堆栈的数据写入新的堆栈指针位置。
pop指令
pop
指令的原理
-
数据从堆栈弹出:
- 从当前堆栈指针位置读取数据。
-
堆栈指针的调整:
-
在x86架构中,堆栈向低地址方向增长。
-
执行
pop
指令时,将堆栈指针ESP
(或在x86_64架构中为RSP
)增加,以释放之前存储的数据空间。对于32位系统,堆栈指针增加4个字节;对于64位系统,堆栈指针增加8个字节。
-
call指令
call原理
保存返回地址:
call
指令会将下一条指令的地址(即返回地址)压入堆栈。
跳转到子程序:
call
指令会将程序计数器(PC,x86架构中为EIP
或RIP
)设置为子程序的地址,从而跳转到子程序执行。
ret指令
ret
指令用于从函数返回。它的主要作用是:
-
从栈中弹出返回地址。
-
跳转到返回地址继续执行。