为什么需要子程序?
汇编没有"函数"关键字,但我们可以用 CALL 和 RET 实现同样的效果。
子程序的基本结构
|
|
参数传递方式
1. 寄存器传参(最快)
|
|
2. 栈传参(适合多参数)
|
|
局部变量的作用
局部变量存储在栈中,每个函数调用有独立的副本:
- 不会污染全局数据
- 递归调用时自动隔离
- 函数返回后自动释放
调用约定
| 约定 | 参数传递 | 栈清理 | 寄存器保护 |
|---|---|---|---|
| C 调用 | 栈(右到左) | 调用者 | EAX/ECX/EDX 不保护 |
| Pascal | 栈(左到右) | 被调用者 | 所有寄存器保护 |
| fastcall | 寄存器 + 栈 | 调用者 | 混合 |
总结
子程序是汇编走向工程化的关键。掌握栈帧管理,你就能写出结构清晰、可维护的汇编代码。
下一篇:《宏指令与高级汇编技术:代码复用与元编程》