C语言:函数栈帧

这篇具有很好参考价值的文章主要介绍了C语言:函数栈帧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

寄存器:
eax
ebx
ecx
edx

ebp
esp
必须理解这两个寄存器(寄存器是独立于内存的)
这两个寄存器存放的是地址,用来维护函数栈帧(正在调用哪个函数,两个寄存器就维护哪个函数的栈帧)

每一个函数都要创建一个空间(栈区创建,栈区的使用是先使用高地址,后使用低地址)

main函数是被别人调用的

ebp压栈
esp的值赋值给ebp(更新了ebp的指向)
esp值减去 0E4H(此时两个寄存器新维护了一段空间)
三次push是压入三个元素(不用管)
后面不管
C语言:函数栈帧
C语言:函数栈帧
形参的传入是在main函数栈帧里面完成的

局部变量是怎样创建的

  • 函数栈帧创建好后,进行初始化,局部变量在栈帧中分配空间

函数传参

  • 函数还未调用的时候就将函数参数进行压栈,在add函数中通过指针偏移量拿到参数值

函数结果返回文章来源地址https://www.toymoban.com/news/detail-467974.html

  • 返回值是通过寄存器带回来的

到了这里,关于C语言:函数栈帧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【汇编语言】CS、IP寄存器

    理论:CPU执行何处的指令,取决于CS:IP 应用:程序员可以通过改变CS、IP中的内容,进行控制CPU即将要执行的目标指令; 问题:如何改变CS、IP中的值? 设想: 1、通过使用Debug中的R命令进行修改寄存器的值,例如rcs, rip。 结论:不可以。原因是:Debug是调试手段,并非程序方

    2024年02月08日
    浏览(50)
  • 汇编语言——第11章 标志寄存器

    目录 ​​​​​​​ 引言 11.1 ZF标志 11.2 PF标志 11.3 SF标志 检测点11.1 11.4 CF标志 11.5 OF标志 检测点11.2 11.6 abc指令 11.7 sbb指令 11.8 cmp指令 11.9 检测比较结果的条件转移指令 检测点11.3 11.10 DF标志和串传送指令 1、DF标志 2、串传送指令 11.11 pushf和popf 11.12 标志寄存器在Debug中的表示

    2024年02月07日
    浏览(43)
  • 【理解ARM架构】操作寄存器实现UART | 段的概念 | IDE背后的命令

    🐱作者:一只大喵咪1201 🐱专栏:《理解ARM架构》 🔥格言: 你只管努力,剩下的交给时间! UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。 串口在嵌入式中用途非常的广泛,主要的用途有: 打印调试信息; 外接各种模块:GPS、蓝牙; 串口因为结构

    2024年02月05日
    浏览(46)
  • 8086汇编语言寄存器清零学习

    mov ax, 0      这样应清零了; sub ax, ax     这样也清了; xor ax, ax     这样也清零了;自己跟自己异或,异或是同则结果为0、不同结果为1;自己和自己,每一位都是相同的,异或后结果为0; and ax, 0     和0相与,这样也清零了; 自己写代码用 xor ax, ax ,用这个就对了,都

    2024年02月11日
    浏览(45)
  • 【汇编语言】栈区与SS:SP寄存器

    汇编语言 - 栈 栈是一块特殊的内存空间,本文涉及的CPU为8086CPU,所有与内存地址有关的数字皆为16进制 栈的运行规律 - 先进后出,后进先出 以下为入栈的过程: 以下是出栈的过程: 以上就是栈的运行机制,栈的入栈叫做push,出栈叫做pop 在8086CPU中,栈是一块特殊的内存空

    2023年04月08日
    浏览(65)
  • RISC-V基础之函数调用(五)函数递归调用及函数参数数量溢出(超出现有寄存器个数)约定(包含实例)

    首先先解释一下栈在函数调用中的作用,更详细的部分请参照考研复习之数据结构笔记(五)栈和队列(上)(包含栈的相关内容)_管二狗赶快去工作!的博客-CSDN博客 函数嵌套调用栈的作用是用来保存和恢复函数调用过程中的相关信息,如参数、局部变量、返回地址、上下

    2024年02月14日
    浏览(51)
  • Cortex-M3/M4内核中断及HAL库函数详解(1):中断相关寄存器

    Keil uVision5 Cortex M3权威指南(中文) Cortex M3与M4权威指南 stm32f407的HAL库工程 STM32F4xx中文参考手册 在Cortex-M3/M4内核上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。其中,Cortex-M3/M4内核包括15个系统异常,大部分系统异常的中断优先级都可以设置。外部中断由

    2024年01月21日
    浏览(52)
  • Verilog语言中的线型wire变量与寄存器类型reg变量讲解

    (1)创建wire线型 (2)在always块中要赋值的不能是wire类型,只能是reg类型 (3)输入类型不能是reg类型 (4)输出reg类型,但没有触发条件时,软件会自动将触发器综合掉

    2024年02月16日
    浏览(47)
  • 【ARM 嵌入式 C 入门及渐进 12 --寄存器位清0和置位函数实现】

    在 C 语言中,可以使用宏定义来创建用于清除(清零)或设置(置一)32位地址中特定位的函数。以下是两个宏定义的示例: 这里的 addr 是指向目标32位地址的指针, bit 是需要操作的位的索引(从0开始计数)。 示例使用方式 假设要操作的是一个具有可读写属性的寄存器,它

    2024年03月22日
    浏览(58)
  • [C#] .NET8增加了Arm架构的多寄存器的查表函数(VectorTableLookup/VectorTableLookupExtension)

    作者: zyl910 发现.NET8增加了Arm架构的多寄存器的查表函数(VectorTableLookup/VectorTableLookupExtension),这给编写SIMD向量化算法带来了方便。 在学习Arm的AdvSimd(Neon)指令集时,发现它的Lookup(查表)功能,类似X86的Sse系列指令集中的字节Shuffle(换位。如 _mm_shuffle_epi8 )功能。 而

    2024年03月24日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包