函数栈帧的创建和销毁(图解)

编程入门 行业动态 更新时间:2024-10-10 06:17:34

<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数栈帧的创建和销毁(图解)"/>

函数栈帧的创建和销毁(图解)

目录

  • 基础知识介绍
    • 1. 寄存器的种类与功能
    • 2. 常用汇编指令
    • 3. 内存模型
  • 演示函数栈帧的创建销毁过程
    • 1. 为main()函数开辟栈帧
    • 2. 在main()函数中创建变量
    • 3. 调用Add()函数前的准备
    • 4. 为Add()函数开辟栈帧
    • 5. 在Add()函数中创建变量并运算
    • 6. Add()栈帧的销毁
    • 7. 返回main()函数栈帧
  • 总结


电脑中的任何指令都是在CPU上的运行的,但是CPU本身只负责运算不负责存储,数据一般都是存储在内存和寄存器(储存最常用的数据)。
想要理解函数栈帧的创建和销毁,首先必须了解三个知识点:寄存器常用汇编指令内存模型

基础知识介绍

1. 寄存器的种类与功能

寄存器名称功能
eax累加寄存器,相对于其他寄存器,在运算方面比较常用。
ebx基地址寄存器,在内存寻址时存放基地址。
ecx计数寄存器,用于循环操作,比如重复的字符存储操作,或者数字统计。
edx作为EAX的溢出寄存器,总是被用来放整数除法产生的余数。
esi源变址寄存器,主要用于存放存储单元在段内的偏移量。通常在内存操作指令中作为“源地址指针”使用。
edi目的变址寄存器,主要用于存放存储单元在段内的偏移量。
eip控制寄存器,存储CPU下次所执行的指令地址(存放指令偏移地址)。
esp栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,esp也就越来越小。在32位平台上,esp每次减少4字节。栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。是CPU机制决定的,pushpop指令会自动调整esp的值。
ebp基址指针,指栈的栈底指针。基址指针寄存器(extended base pointer),一般与esp配合使用,可以存取某时刻的esp,这个时刻就是进入一个函数内后,CPU会将esp的值赋给ebp,此时就可以通过ebp对栈进行操作,比如获取函数参数,局部变量等。其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

2. 常用汇编指令

  • push指令:它首先减少esp的值,再将源操作数复制到栈地址,在32位平台上,esp

更多推荐

函数栈帧的创建和销毁(图解)

本文发布于:2024-03-08 12:29:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1720873.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!