汇编七

函数的局部变量

  • 拿参数是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

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容