栈是什么?
栈(Stack)是一种 后进先出(LIFO) 的数据结构。在汇编中,它由 SS:SP 指向。
PUSH 与 POP
|
|
- PUSH:先将 SP 减 2,再写入数据
- POP:先读取数据,再将 SP 加 2
栈帧结构
函数调用时,栈中会形成栈帧:
|
|
函数调用流程
|
|
为什么需要栈?
- 保存返回地址:
CALL自动将下一条指令地址压栈 - 传递参数:通过栈传递,避免寄存器不够用
- 保存上下文:子程序可以随意使用寄存器,退出前恢复
- 局部变量:每个函数有独立的栈帧,互不干扰
总结
理解栈,就理解了程序执行的"时间线"。每一次函数调用,都是在栈上翻开新的一页。
下一篇:《标志位详解:CF/ZF/SF/OF 如何影响程序流程》