计算机中CPU的运行到函数的调用过程

2023-11-05

以下内容是摘抄博客:https://www.cnblogs.com/liunlls/p/cpu.html

 

CPU的内部结构

    我们都知道CPU是一台电脑的核心部件,所有的程序都是通过它运行的,那么CPU是如何让一个程序跑起来的呢?我们今天就来一起简单的做个了解,首先看下CPU的基本结构

 

程序流程

    假如现在我们有个两个数相加的程序,当你点击运行这个程序时,系统会将这个程序复制到内存中。程序中的这些数据和指令会被存储在一个一个小的“内存空间”,并给每个空间一个“门牌号”,也就是内存中的地址。

    系统将程序复制到内存中后,会将程序计数器设定到程序运行的开始位置(假设这个程序的开始位置是0100),然后开始运行;当CPU每执行一条指令,程序的累加器的值就自动加1,然后CPU的控制器就会参照程序计数器的数值从内存中读取命令并执行,那么我们用图表示这个流程的话大概是下图中的样子

    

    在CPU进行运算时,标志寄存器的数值会根据运算结果自动设定。如果程序执行到跳转指令的时候,会根据地址中的内容跳转到对应的地址;条件分支在跳转指令之前会进行比较运算,然后CPU根据标志寄存器的数值进行判断是否要跳转

   

    函数调用

    对CPU的执行流程有了个大概的了解后,我们现在可以来看看咱们平时写的程序函数是怎么运行的了。在介绍之前我们先了解两个机器语言指令

call指令,把函数要执行的指令地址存储在名为栈的主内存

return指令,把保存在栈中的地址设定到程序计数器中

    在上图中,函数执行到0132的时候,并不是通过跳转指令跳转到Add函数的入口,而是通过call指令;这个地方和我没前面讲到的条件分支跳转指令是不一样的,因为调用完函数,我们还要返回函数调用的地方继续下一条指令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机中CPU的运行到函数的调用过程 的相关文章

  • SpringBoot为什么没有web.xml了

    SpringBoot为什么没有web xml了 今天我们来放松下心情 不聊分布式 云原生 来聊一聊初学者接触的最多的 java web 基础 几乎所有人都是从 servlet jsp filter 开始编写自己的第一个 hello worl
  • IDEA中快速查看maven依赖树关系, 以及快速解决jar包冲突

    安装Maven Helper 插件 打开pom xml 切换到Dependency Analyzer 即可看见jar包的传递依赖关系 比如 spring boot starter websocket 中已经包含了spring boot st
  • HW5300V3-ISCSI存储运维,看这一篇就够了04-创建启动器

    操作步骤 1 选择 资源分配 gt 主机 gt 启动器 单击 创建 2 系统弹出 创建启动器 对话框 在 类型 中选择启动器类型 为主机添加启动器 操作步骤 1 选择 资源分配 gt 主机 gt 启动器 根据业务需求 选择一个或多个待添加给
  • Golang 同步方式

    目录 1 channel 2 Sync Mutex 3 Sync waitGroup 4 Sync Once 5 Sync context 6 Sync pool 7 atomic包 针对变量进行操作 Sync包简述 收集了一些Golang
  • 快速排序实现(递归与非递归)

    快速排序 前言 快排递归 快速排序 挖坑法 快速排序 Hoare法 快速排序 前后指针法 快速排序的优化 三数取中 小区间优化 快排非递归 前言 首先我们来了解一下什么是快速排序 快速排序是交换排序中的其中一个 是一种比较高效的排序方法 时
  • Splunk 会议回顾: 大数据的关键是机器学习

    Splunk的用户大会已经接近尾声 三天时间的会议里 共进行了160多个主题研讨 涵盖了从安全 运营到商业智能 甚至包括物联网 会议中一遍又一遍出现相同的中心主题 大数据的关键是机器学习 存储不再是一个问题 从运行Hadoop兼容节点的专用
  • rdkafka是否支持基于jks的ssl配置

    不可以 https github com edenhill librdkafka wiki Using SSL with librdkafka 目前rdkafa的支持配置如下链接 https github com edenhill libr
  • selenium 使用chrome时与chromedriver版本不匹配的问题

    这几天想试一下 selenium 但安装配置好之后 总是会报一个奇怪的错误 具体错误信息如下 selenium common exceptions WebDriverException Message unknown error Runti
  • 剑指Offer:(数组)数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 一 题目 数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 例如输入一个长度为9的数组 1 2 3 2 2 2 5 4 2 由于数字2在数组中出现了5次 超过数组长度的一半 因此输出2 如果不存在则
  • Destination Host Unreachable 解决方法

    网上有很多种产生这样情况的原因 DNS设置等 我这里却是由于GATEWAY引起的 没改之前是192 168 0 1 导致一直无法ping 通DNS地址 如 ping 8 8 8 8 一直出现Destination Host Unreacha

随机推荐

  • word删除分节符后之前的格式乱了_分页符&分节符,你知道多少

    Word中 我们经常会遇到分页符和分节符 它们对文档排版 打印 页边距调整 批量调整文档格式等非常重要 分隔符包括 分页符和分节符 分页符 是分页的一种符号 实则就是一条虚线 一般是插在每页的后面 它是位于上一页结束以及下一页开始的位置 分
  • VUE-模板

    Vue js 使用了基于 HTML 的模板语法 允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据 所有 Vue js 的模板都是合法的 HTML 所以能被遵循规范的浏览器和 HTML 解析器解析 在底层的实现上 Vue 将模板编
  • [910]Visual Studio2019安装及使用

    一 下载安装包 下载地址1 https visualstudio microsoft com zh hans rr https www baidu com link url b1goBv9 kKk8djltygQxPnrrNv9bLT0nH
  • Qt学习笔记15:setWindowFlags和 setAttribute

    文章目录 1 setWindowFlags QT WindowFlags 2 setAttribute Qt WA DeleteOnClose true 1 setWindowFlags QT WindowFlags setWindowFl
  • linux入门(五)查找命令总结,含五星级命令find详解

    文章目录 查找命令 which bash 查看bash命令存放的路径 whereis bash 查看bash命令存放的路径 PATH变量 locate 查找文件或目录 默认是模糊查找 find 用于查找文件或目录 默认是精确查找 name
  • JMeter常见错误解决方法—你知道几种

    1 Windows 平台 双击 jmeter bin 目录下 jmeter bat 文件 jmeter 无法启动且报错如下 此问题是没有配置 jdk 环境变量所致 配置好 jdk 环境变量即可 2 若提示 ERRORLEVEL 3 错误 则
  • 1041. 考试座位号(15)

    每个PAT考生在参加考试时都会被分配两个座位号 一个是试机座位 一个是考试座位 正常情况下 考生在入场时先得到试机座位号码 入座进入试机状态后 系统会显示该考生的考试座位号码 考试时考生需要换到考试座位就座 但有些考生迟到了 试机已经结束
  • 分块大法

    所谓分块 就是将原序列处理成各个小块 目的是尽量地达到处理和询问之间的平衡 对于分块类问题 常常可以提取出 在给定区间内进行操作 或询问区间内满足给定条件的元素等 接下来 例题 首先是男神hzwer的博客链接 hzwer 因为下述题目皆由此
  • 基于centos7 mysql主从搭建

    1 在主机上安装好mysql 方便等一会主从搭建在从机上再安装mysql 可以参考以下链接 Centos7安装MySQL详细步骤 在centos7上安装mysql 緑水長流 z的博客 CSDN博客 2 对主机centos7 master 做
  • 数据挖掘分类技术

    1 过分拟合问题 造成原因有 1 噪声造成的过分拟合 因为它拟合了误标记的训练记录 导致了对检验集中记录的误分类 2 根据少量训练记录做出分类决策的模型也容易受过分拟合的影响 由于训练数据缺乏具有代表性的样本 在没有多少训练记录的情况下 学
  • Spine之八——网格和自由变形(FFD)

    Spine 自由变形 FFD 实现乳摇 1 切到装配模式 2 选中图片 3 勾上 Mesh 勾上后就可以编辑网格点了 1 点 Edit Mesh 2 创建网格点 这里是编辑网格点的工具 1 移动 2 增加 3 删除 4 设置网格点 删除所有
  • 【无线点对点网络时延分析和可视化】模拟无线点对点网络中的延迟以及物理层和数据链路层之间的相互作用(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 本文模拟无线点对点网络 考虑传输延迟 排队
  • CentOS7安装Docker

    Docker Docker 分为 CE 和 EE 两大版本 CE 即社区版 免费 支持周期 7 个月 EE 即企业版 强调安全 付费使用 支持周期 24 个月 Docker CE 分为 stable test 和 nightly 三个更新频
  • 2020这一年,我完成了这几件大事

    2020这一年 我完成了这几件大事 1 感情 拥有了余生的合伙人 2 工作 找到了自己喜欢的方向 一个长处 3 生活 走走停停 4 读书 兴之所至 1 感情 拥有了余生的合伙人 1 3 关键词 殇 4 6 关键词 静 7 9 关键词 安 1
  • MySQL数据库3--多表查询

    多表查询 多表查询顾名思义就是从多张表中一次性的查询出我们想要的数据 我们通过具体的sql给他们演示 先准备环境 DROP TABLE IF EXISTS emp DROP TABLE IF EXISTS dept 创建部门表 CREATE
  • sqlserver中用户的创建,登录。用户与登录名的区别

    文章目录 前言 一 sql如何创建用户 并将用户添加到相应数据库下 二 用户登录失败 解决方案 三 登录名 用户名 角色三者的区别 前言 sql server中用户的管理 利用sql server创建用户 使用创建的用户进行登录 登录名与用
  • 总结的快速排序

    很多时候对快速排序的具体格式记得都不太清楚 在网上搜了一下 加上自己的理解就摆到了这里 先声明一下 头文件至少要包括以下几个 最好都写上 写上不扣分 include
  • 2023年超实用的27个VSCode插件推荐

    Visual Studio Code 或者称作VS Code 是一个广为人知且评价很高的代码编辑器 它有许多特性和扩展功能 以增强开发体验 使用VS Code的主要好处之一是它的灵活性 允许开发人员根据自己的特定需求进行自定义 此外 VS
  • H2介绍 – Java嵌入式数据库

    H2是一个用Java开发的嵌入式数据库 这里指的嵌入式不是手持设备之类的 而是H2数据库作为一个类库 直接嵌入到上层的应用程序中 与应用运行在同一个进程中 最大的优势在于可以同应用程序打包在一起发布 对于客户端应用来说 非常方便 比如说腾讯
  • 计算机中CPU的运行到函数的调用过程

    以下内容是摘抄博客 https www cnblogs com liunlls p cpu html CPU的内部结构 我们都知道CPU是一台电脑的核心部件 所有的程序都是通过它运行的 那么CPU是如何让一个程序跑起来的呢 我们今天就来一起