计算机组成原理-函数调用的汇编表示(call和ret指令 访问栈帧 切换栈帧 传递参数和返回值)

本文主要是介绍计算机组成原理-函数调用的汇编表示(call和ret指令 访问栈帧 切换栈帧 传递参数和返回值),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • call指令和ret指令
    • 高级语言的函数调用
    • x86汇编语言的函数调用
    • call ret指令
    • 小结
    • 其他问题
  • 如何访问栈帧
    • 函数调用栈在内存中的位置
    • 标记栈帧范围:EBP ESP寄存器
    • 访问栈帧数据:push pop指令
    • 访问栈帧数据:mov指令
    • 小结
  • 如何切换栈帧
    • 函数返回时,如何切换栈帧
      • ret指令
    • 小结
  • 如何传递参数和返回值
    • 一个栈帧内可能包含哪些内容
    • 汇编代码实战
    • 小结

call指令和ret指令

高级语言的函数调用

x86默认指的是32为如果为64位可以叫x64或x86-64
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

此时caller栈帧中有add函数调用的参数信息
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

x86汇编语言的函数调用

在这里插入图片描述

call ret指令

在这里插入图片描述

小结

在这里插入图片描述

其他问题

在这里插入图片描述

如何访问栈帧

函数调用栈在内存中的位置

在这里插入图片描述

标记栈帧范围:EBP ESP寄存器

注意x86系统中默认以4字节位栈的操作单位
在这里插入图片描述
在这里插入图片描述

访问栈帧数据:push pop指令

初始状态在这里插入图片描述
第一条指令执行后
在这里插入图片描述
第二条指令执行后
在这里插入图片描述
第三条指令执行后
在这里插入图片描述
第四条指令执行后
在这里插入图片描述
第五条指令执行后
在这里插入图片描述

访问栈帧数据:mov指令

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

如何切换栈帧

在这里插入图片描述
call没执行之前
在这里插入图片描述
call执行后
在这里插入图片描述
push指令执行后
在这里插入图片描述
mov指令执行后
在这里插入图片描述
在这里插入图片描述

函数返回时,如何切换栈帧

在这里插入图片描述
第一条指令执行后
在这里插入图片描述
在这里插入图片描述

相当于恢复之前使用call之后的状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ret指令

在这里插入图片描述

小结

跳转之前都是上一个函数的栈帧
在这里插入图片描述

如何传递参数和返回值

一个栈帧内可能包含哪些内容

如果当前函数不会调用下一个函数,那么该当前函数的栈帧的大小不需要是16字节对齐的
在这里插入图片描述
在这里插入图片描述

汇编代码实战

执行前两天指令后
在这里插入图片描述
执行sub指令后
在这里插入图片描述
再执行两天mov指令
在这里插入图片描述
执行两个mov指令
mov指令不支持两个操作数同时来自主存

在这里插入图片描述
再执行两个mov指令
在这里插入图片描述
执行call指令后
在这里插入图片描述
执行push 和mov指令后

在这里插入图片描述
执行两条mov指令
在这里插入图片描述

执行add指令后
在这里插入图片描述
执行完leave指令
在这里插入图片描述
执行完ret指令
在这里插入图片描述
执行完mov指令后
在这里插入图片描述
再执行下一条mov指令
在这里插入图片描述

小结

如果调用者有其他也使用的寄存器要被被调用者使用时
此时可以将调用者使用的寄存器压栈保存
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于计算机组成原理-函数调用的汇编表示(call和ret指令 访问栈帧 切换栈帧 传递参数和返回值)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/503092

相关文章

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中