汇编七

函数的局部变量

  • 拿参数是bp+

  • 拿局部变量是bp-

  • 平栈是先把bp赋给sp

汇编七_第1张图片

栈越界

  • 超过三次以上的循环就避免使用递归

保护寄存器

  • 保护通用寄存器
push ax
push bx
push cx
push dx
.....
随便玩儿
业务逻辑代码
.....
pop dx
pop cx
pop bx
pop ax
汇编七_第2张图片
保护寄存器
  • 保护BP寄存器

在函数调用一开始就保护bp

push bp
mov bp,sp
.
.
.
mov sp,bp
pop bp
ret
汇编七_第3张图片
保存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

以上

你可能感兴趣的:(汇编七)