理解CPU与执行指令原理

本文侧重介绍cpu的工作任务,与cpu执行指令的过程是怎么样的?

目录

1.理解CPU

1.1.CPU的功能

1.2.CPU的逻辑构成

2.认识指令

2.1.什么是指令

2.2.CPU执行指令的准备工作(重点)

3.指令的执行过程

前景知识:

 什么是计算机

就是遵循冯诺依曼体系结构。也就是由CPU、存储器、输入设备、输出设备组成的。基本基调:计算机使用二进制表示存储数据

(1)CPU(中央处理器):进行算术运算和逻辑判断

(2)存储器:用于存储数据(使用二进制方式存储)

1)存储器分成内存和外存

2)外存类型很大,其中,硬盘是典型的代表

(3)输入设备:用户给计算机发号施令的设备

网卡、蓝牙、触摸屏、键盘、鼠标、摄像头

(4)输出设备:计算机各用户汇报结果的设备。

蓝牙、网卡、触摸屏、显示屏,音响


1.理解CPU

1.1.CPU的功能

1.进行各种算术运算 2.进行各种逻辑判断

1.2.CPU的逻辑构成

1)如13%的数字:CPU的占有率。如3.36Hz:CPU的频率。如内核:核心

2)占有率:干活时间/总时间

例子:CPU像一个打工人,如果一天工作时间为8小时,但是花4小时把活做完了,剩下时间摸鱼,此时CPU的占有率为:50%

一般都不是为100%,因为在一个程序中,会同时运行着很多的程序,这些程序并不都是全力在干活

3)频率:表示工作的快慢

CPU的频率分为基础频率(最低的时候)和最大频率,一般的频率都是在不断的跳动

4)核心  

一般都是多核心,核心越多,工作效率也越快,计算机的性能也就更高。所以写在引入更多的核心,就需要各个核心相互配合工作,因此,多线程就是这么来的

2.认识指令

指令就是CPU中的一部分,下面了解CPU是怎么工作的。

2.1.什么是指令

(1)指令,可以粗略的认为是CPU在被设计的时候,给程序员提供的一些“编程接口”。所以指令≈API

(2)不同的CPU,所提供的指令不一样,但大体相同。

(3)CPU有多种架构,不同架构的CPU,支持的指令也就不一样

(4)指令=操作码+操作数(内存地址或者寄存器编号)

2.2.CPU执行指令的准备工作(重点)

指令,需要先加载到内存中,然后才能被cpu读取 

(1)执行指令的大致三步

1.读取指令(将内存中的指令数据,读取到CPU的寄存器中)

2.解析指令(分析当前的指令是做什么)

3.执行指令

寄存器是cpu中一块很小的内存空间 

(2)指令表

指令功能说明4位opcode操作的地址或寄存器
LOAD_A从RAM的指定地址,将数据加载到A寄存器00104位RAM地址
LOAD_B从RAM的指定地址,将数据加载到B寄存器00014位RAM地址
STOP_A将数据从A寄存器写入RAM的指定地址01004位RAM地址
ADD计算两个指定寄存器的数据之和,并将结果放入第二个寄存器1000

2位的寄存器ID

2位的寄存器ID

上面的0010之类的是为了区分这是一个什么操作,后面操作的地址啥的类似函数的参数

上述的指令是8位二进制数字(一个字节):前面四位用来区分是什么操作,后面四位是操作数

操作数:如果是前面三个地址,就是通过这个四位数的地址找到地址中存放的数据,这个数据才是真正的操作数。

(3)程序表

例如下面这种,需要根据下面的表执行指令操作

第二列的数据,不一定是数据,也有可能是地址。只有当程序跑起来才能知道

1)介绍PC

在cpu中有一个特殊的寄存器,用来保存接下来要从哪个内存地址(如上面的地址0-15)取指令(如地址右边的就是指令,也有可能是数据),一般称为程序计数器,简称PC

举例

 假设此时从0号开始执行,CPU每次读取执行完一个指令之和,就会自动把PC中的值进行+1,顺序的读取下一条。但是如果遇到一些跳转指令,就不是+1,就会跳转到指定的位置。

3.指令的执行过程

 第一轮操作:

默认从0号地址开始 

(1)取指令

(2)解析指令

1)先拆分

2)将操作码和指令表对照

发现0010的操作是LOAD_A,说明后面的四位数据就是地址,需要去该地址上面取出数据作为真正的操作数。

取出真正的操作数:1110为14,就需要去14号地址

 

(3)执行指令

第二轮操作:

(1)取指令

(2)解析指令

1)拆分指令

2)查询指令表

发现0001是LOAD_B的操作,后面跟着的数据就是四位数地址,需要去程序表中取出该地址上面的数据作为真正的操作数

 1111十进制为15,也就是取出15号地址的数据

(3)执行指令

第三轮操作:

(1)取指令

(2)解析指令

1)拆分指令

2)查找指令表

操作码:1000就是ADD操作,也就是把两个寄存器上面的数据进行相加,并且把结果放入第二个寄存器中。操作数:0100就是两个寄存器的编号,0100就需要拆分成01和00;按照之前约定:00就是寄存器A,01就是寄存器B

(3)执行指令

第四轮操作:

(1)读指令

指令为:0100 1101

(2)解析指令

1)拆分指令

2)查找指令表

操作码:0100就是STOP_A操作,说明后面跟着的四位数是地址;1101十进制就是13

(3)执行指令

第五轮操作:

(1)取指令

(2)解析指令

0000 0000的指令在指令表中没有,但是默认为结束程序的意思

(3)执行指令

退出程序

上述指令的操作,都是在cpu中执行的

实际应用场景:

当一个不能挂的服务器发生bug时,可以写入特定的程序,是可以修改服务器的内存数据的。直接写到指定的内存中,并且修改原有的服务器指令中的逻辑,插入跳转指令,跳过bug。

也就是写入跳转指令,当执行到bug指令前,让程序跳转过去,进而避免发生bug,这种操作称为热补丁

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序使用Vant组件库流程

目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小程序版本。这样开发原生微信小程序的会方便很多。 官方网址:Vant Weapp - 轻量、可靠的小程序 UI 组件库 步骤一 通过 npm 安装 npm i vant/weap…

RXMA1 RK211 075 AC220V中间继电器 柜内安装板前接线 JOSEF约瑟

系列型号 RXMA1 RK 211 063中间继电器;RXMA1 RK 211 064中间继电器; RXMA1 RK 211 066中间继电器;RXMA1 RK 211 072中间继电器; RXMA1 RK 211 073中间继电器;RXMA1 RK 211 074中间继电器; RXMA1 RK 211 025中间继电器;…

k8s入门到实战(十二)—— pod的深入理解

pod 深入理解 pod 容器生命周期 pod 的几种状态 可以使用命令kubectl get pod -w实时监控查看 pod 的状态 running:正常运行状态Pending:资源分配不对的时候会挂起,出现此状态Terminating:某个节点突然关机,上面的 p…

uniapp微信小程序消息订阅详解

一、微信公众平台申请订阅模板 注意:订阅信息 这个事件 是 当用户 点击的时候触发 或者 是 支付成功后触发, 用户勾选 “总是保持以上选择,不再询问” 之后或长期订阅,下次订阅调用 wx.requestSubscribeMessage 不会弹窗&#xf…

浅析扩散模型与图像生成【应用篇】(十三)——PITI

13. Pretraining is All You Need for Image-to-Image Translation 该文提出一种基于预训练扩散模型的图像转换方法,称为PITI。其思想并不复杂,就是借鉴现有视觉和NLP领域中常见的预训练方法,考虑预先在一个大规模的任务无关数据集上对扩散模…

基于java+springboot+vue实现的校园二手交易系统(文末源码+Lw+ppt)23-336

摘 要 自从新冠疫情爆发以来,各个线下实体越来越难做,线下购物的人也越来越少,随之带来的是一些不必要的浪费,尤其是即将毕业的大学生,各种用品不方便携带走导致被遗弃,造成大量的浪费。本系统目的就是让…

浏览器如何渲染页面

浏览器渲染页面的过程是一个多步骤的复杂流程,下面我将通过一个简单的例子来逐步说明这一过程: 以下是浏览器渲染该页面的主要步骤: 请求HTML文档: 用户在浏览器中输入URL并回车,浏览器向服务器发送HTTP请求。 服务器…

【Java多线程】1——多线程知识回顾

1 多线程知识回顾 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记仓库👉https://github.com/A-BigTree/tree-learning-notes 个人主页👉https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star…

测试开发工程师(QA)职业到底需要干些什么?part6:数据测试工程师QA

常见任务和工作内容 作为数据测试工程师QA(Quality Assurance),您的主要职责是确保数据的质量、准确性和一致性。以下是数据测试工程师QA的一些常见任务和工作内容: 数据验证和准确性测试:您将负责验证数据的准确性和…

数论问题代码模板

文章目录 一、质数1.1、质数筛(筛1~n中的所有质数)1.2、判断一个数是否为质数1.3、对一个数进行质因数分解 二、快速幂2.1、费马小定理——乘法逆元2.2、快速幂 三、约数3.1、N个数的正约数集合3.2、一个数的正约数集合 四、欧拉函数(互质数数…

洗地机好用吗?哪款型号值得推荐?看完本文你就知道

在如今社会生活节奏不断加快的情况下,洗地机已经成为众多家庭的必备的清洁设备,面对市面上种类繁多的洗地机,我们常常会发出感叹“洗地机好用吗?洗地机哪个型好用?”等的疑问,今天,为了帮助大家…

一文搞定用python实现终身免费的听书工具

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

C语言程序练习——汉诺塔递归

1. 题目 在终端输入汉诺塔层数n&#xff0c;实现将n层汉诺塔通过三座塔座A、B、C进行排列 2. 代码 #include <stdio.h>int hannuota(int len, int str, int tmp, int dst) {if (1 len){printf("%c -> %c\n", str, dst);}else{hannuota(len-1, str, dst, …

好展位、抢先订!2024第二十二届上海国际涂料展|上海涂料展

致/To: 展会负责人、 市场部、 企划部、 销售部负责人 2024中国国际涂料博览会暨第二十二届中国国际涂料展览会 时间&#xff1a;2024年8月7-9日 地点&#xff1a;上海新国际博览中心 主办方&#xff1a; 中国涂料工业协会 承办方&#xff1a; 北京涂博国际展览有限公司 …

javaSwing坦克大战游戏

在游戏开发领域&#xff0c;坦克大战是一款经典的游戏&#xff0c;其简单而又耐玩的玩法吸引了无数玩家。而今&#xff0c;在Java编程技术的支持下&#xff0c;我们可以用Java Swing技术轻松实现这款经典游戏。本文将介绍如何使用Java Swing技术编写坦克大战游戏&#xff0c;并…

某对象存储元数据集群改造流水账

软件产品&#xff1a;某厂商提供的不便具名的对象存储产品&#xff0c;核心底层技术源自HDFS和Amazon S3&#xff0c;元数据集群采用了基于MongoDB的NOSQL数据库产品和MySQL数据库产品相结合。 该产品的元数据逻辑示意图如下&#xff1a; 业务集群现状&#xff1a;当前第3期建…

Qt 窗口MainWindow(上)

Qt 窗口是通过 QMainWindow 类来实现的。 QMainWindow 是一个为用户提供主窗口程序的类&#xff0c;继承自 QWidget 类&#xff0c;并且提供了⼀个预定义的布局。QMainWindow 包含一个菜单栏&#xff08;menubar&#xff09;、多个工具栏(toolbars)、多个浮动窗口&#xff08;…

JVM第八讲:GC - Java 垃圾回收基础知识

GC - Java 垃圾回收基础知识 本文是JVM第八讲&#xff0c; Java 垃圾回收基础知识。垃圾收集主要是针对堆和方法区进行&#xff1b;程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的&#xff0c;只存在于线程的生命周期内&#xff0c;线程结束之后也会消失&#xff0…

Vue3尚硅谷张天禹笔记

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…

Java零基础入门到精通_Day 3

37 switch default&#xff1a; 后面的break;可以省略 38 春夏秋冬 注意事项:在switch语句中&#xff0c;如果case控制的语句体后面不写break&#xff0c;将出现穿透现象&#xff0c;在不判断下一个case值的情况下&#xff0c;向下运行 直到遇到break&#xff0c;或者整体swi…