函数的局部变量
-
拿参数是bp+
-
拿局部变量是bp-
-
平栈是先把bp赋给sp
栈越界
-
超过三次以上的循环就避免使用递归
保护寄存器
-
保护通用寄存器
push ax
push bx
push cx
push dx
.....
随便玩儿
业务逻辑代码
.....
pop dx
pop cx
pop bx
pop ax
保护寄存器
-
保护BP寄存器
在函数调用一开始就保护bp
push bp
mov bp,sp
.
.
.
mov sp,bp
pop bp
ret
保存bp寄存器
函数的调用流程
1.push参数(64位cpu 随意使用寄存器)
2.call指令调用(降下一条指令地址入栈)
3.保护bp,将sp赋值给bp
4.提升sp指针,作为局部变量空间(sp - n)
5.保护外部用到的寄存器
6.业务逻辑代码
7.恢复通用寄存器
8.恢复sp(sp指向bp/sp + n)
9.恢复bp(pop bp)
9.返回 ret
网友评论