计算机组成原理-函数调用的汇编表示(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

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu