CPU执行程序的三个阶段简单示例(取指,解码,执行)

这篇具有很好参考价值的文章主要介绍了CPU执行程序的三个阶段简单示例(取指,解码,执行)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础知识

        RAM:RAM是随机存取存储器(random access memory),是计算机内部存储器中的一种,也是其中最重要的,计算机和手机中一般把其叫做(运行)内存,它的速度要比硬盘快得多,所以用运行程序在RAM中,而存放运行时不用的数据则在硬盘中,什么时候需要数据,便把数据从硬盘中拿到内存,但同时RAM断电会丢失数据,所以我们电脑如果断电了就会丢失原来正在运行的数据。所以,手机中的RAM和电脑中的RAM的概念是相同的,RAM即内存越大,能同时在内存中执行的程序就越多,性能一般是越好的。

        寄存器:寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。包括通用寄存器、专用寄存器和控制寄存器。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

        计算机CPU执行程序分为三个阶段:取指阶段(FETCH PHASE)、 解码阶段(DECODE PHASE)、 执行阶段(EXECUTE PHASE),内部通过时钟信号控制,依次执行操作系统传给CPU的程序指令。

CPU执行一个ADD的流程示例

指令表

CPU执行程序的三个阶段简单示例(取指,解码,执行),CPU,取指,解码,计算机,寄存器,RAM

RAM数据初值

ADDRESS DATA
0 00101110
1 00011111
2 10000100
3 01001101
4 00000000
5 00000000
6 00000000
7 00000000
8 00000000
9 00000000
10 00000000
11 00000000
12 00000000
13 00000000
14 00000011
15 00001110
...

寄存器初值

        寄存器 A: 0000 0000 

        寄存器 B: 0000 0000

        寄存器 C: 0000 0000

        寄存器 D: 0000 0000

        指令寄存器: 0000 0000

        指令地址寄存器: 0000 0000

        下面开始演示两个数的和3+14的结果是如何被程序一步步执行的。

取指阶段

指令地址寄存器的值是0000 0000,表示去RAM的地址0000 0000位置将对应数据复制到指令寄存器中,指令寄存器的值变为:0010 1110

解码阶段

根据指令寄存器的值,查找指令表对应的指令信息。得到该指令的信息

0010:LOAD_A

1110:00000011

执行阶段

通过解码阶段,知道了这条指令对应的是给A寄存器取值,对应RAM的1110地址的值是 0000 0011。更新寄存器 A: 0000 0011

当一条指令完成后,就自动更新指令地址寄存器的地址+1,所以指令地址寄存器的值是0000 0001, CPU靠时钟控制继续从指令地址寄存器。

取指:更新指令寄存器值:00011111

解码: 0001:LOAD_B,   RAM 1111: 00001110

执行:更新寄存器B的值:00001110

更新指令地址寄存器的值:00000010

------------

取指:更新指令寄存器值:10000100

解码: 1000:ADD,   REGISTER 01: 寄存器B, REGISTER 00: 寄存器A

执行:ALU指令ADD指令,即寄存器01值(B) + 寄存器00值(A) =3+14=17, 17写回到 寄存器00(A)中。

更新指令地址寄存器的值:00000011

------------

取指:更新指令寄存器值:01001101

解码: 0100:STORE_A,    RAM 1101

执行:将寄存器A的值写回到RAM 1101地址,更新RAM  1101: 00010001

更新指令地址寄存器的值:00000100,

...

        以上就是CPU执行两个数的相加程序的流程示意。实际中还包括数据传输控制等线路的连接等。总之CPU就是不断完成FETCH,DECODE,EXECUTE来完成我们给它的各种命令。为了提升效率,现在计算机利用了指令流水线等设计,主要就是让CPU的不同部件由串行变成并行执行。或者增加计算机的执行核心个数。

CPU执行程序的三个阶段简单示例(取指,解码,执行),CPU,取指,解码,计算机,寄存器,RAM文章来源地址https://www.toymoban.com/news/detail-657802.html

到了这里,关于CPU执行程序的三个阶段简单示例(取指,解码,执行)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • AMEYA360报道:手机直连卫星通信发展的三个阶段

    卫星通信的发展从过去、现在与规划,可以分为三个阶段。手机卫星通信的第一个阶段中,较为典型的有铱星公司、海事卫星电话、天通卫星通信等,终端设备方面已经可以做到手持设备直接通过自带的天线与卫星进行通信。 包括铱星、天通卫星等,这些系统都是基于专用的

    2024年02月16日
    浏览(48)
  • FFMPEG解码实时流,支持cpu、gpu解码

    官网下载的ffmpeg目前只能下载到X64版本的库,具体编译请参考windows编译ffmpeg源码(32位库)_windows 32位ffmpeg动态库-CSDN博客 直接上代码 解码显示效果图 英伟达显卡播放效果因本人没有显卡不在这里展示,可以看出通过硬解降低将近一半的cpu。 代码参考 https://download.csdn.net/

    2024年01月18日
    浏览(45)
  • 【算法题】动态规划中级阶段之跳跃游戏、最大子数组和、解码方法

    动态规划(Dynamic Programming,简称 DP)是一种解决多阶段决策过程最优化问题的方法。它是一种将复杂问题分解成重叠子问题的策略,通过维护每个子问题的最优解来推导出问题的最优解。 动态规划的主要思想是利用已求解的子问题的最优解来推导出更大问题的最优解,从而

    2024年02月11日
    浏览(51)
  • 一文读懂CPU工作原理、程序是如何在单片机内执行的、指令格式之操作码地址码

    CPU的控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。由运算器执行对应的机器指令,并将结果通过地址总线写回数据段 中间处理器(CPU,Central Processing Uni

    2024年01月16日
    浏览(42)
  • 深度学习部署(十九): CUDA RunTime API YOLOV5后处理cpu解码以及gpu解码

    看看我们干了什么, 就是把bouding box恢复成框而已 对于模型推理后的后处理,可以直接使用cuda核函数进行解码,效率比较高 nms也可以在核函数里面实现 这里演示了一个yolov5的实际案例,后续其他的操作都是类似的 gpu_decoder难度较大,一般先写一个cpu的decoder, 再写个gpu_decode

    2023年04月11日
    浏览(52)
  • c#让三个线程按照顺序执行

    三个线程都是while(true)的循环体 A线程:采集数据 B线程:画曲线 C线程:存数据库 AutoResetEvent 是一个线程同步的类,它提供了一种机制,允许一个或多个线程等待直到接收到信号,然后继续执行。 以下是 AutoResetEvent 的一些常用成员: WaitOne() :使当前线程等待接收信号。

    2024年02月02日
    浏览(37)
  • 【源码解析】flink sql执行源码概述:flink sql执行过程中有哪些阶段,这些阶段的源码大概位置在哪里

    本文大致分析了flink sql执行过程中的各个阶段的源码逻辑,这样可以在flink sql执行过程中, 能够定位到任务执行的某个阶段的代码大概分布在哪里,为更针对性的分析此阶段的细节逻辑打下基础,比如create 的逻辑是怎么执行的,select的逻辑是怎么生成的,优化逻辑都做了哪

    2024年02月04日
    浏览(42)
  • Qt数据可视化示例01-显示实时音频数据的简单应用程序

    audiolevels 示例显示实时音频数据的简单应用程序。示例从麦克风读取音频电平, 并在条形图中显示这些电平。为了增加用于演示目的的负载,并使图形更漂亮, 使用稍作修改的数据来填充多行。 作为Qt 数据可视化的第一个示例,我们忽略数据源的获取,主要关注数据的呈现

    2024年01月18日
    浏览(70)
  • 如何保证三个线程按顺序执行?不会我教你

    👨‍🎓作者:bug菌 ✏️博客:CSDN、掘金、infoQ、51CTO等 🎉简介:CSDN|阿里云|华为云|51CTO等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计 15w+   ;硬核微信公众号「猿圈奇妙屋」,欢迎你的

    2024年02月07日
    浏览(47)
  • 【FFmpeg+Qt开发】解码流程 详细分析+代码示例

    一、FFMPEG 概述 ​二、FFMPEG 解码 2.1解码流程 2.2解码示例 FFmpeg 是一套可以用来记录、转换,数字音频、视频,并能将其转化为流的开源计算机程序。 FFmpeg 采用 LGPL 或 GPL 许可证;它提供了录制、转换以及流化音视频的完整解决案;它还包含了非常先进的音频 视频编解码库

    2024年01月23日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包