【计算机组成原理】CPU的工作原理
一.CPU的组成结构
CPU主要有运算器、控制器、寄存器和内部总线等组成,其大概的样子长这样:

看不懂没关系,我们将采用自顶而下的方法来讲解CPU的具体工作原理,我们首先来说一下什么叫寄存器,顾名思义,寄存器就是用于暂存东西的,类似去超市的时候门口放着的那些暂存箱,你把东西临时放进去,等逛完超市之后就把它拿回来,就这么个作用,如果有兴趣想要了解一下寄存器为什么可以暂存东西,可以参考以前写过的文章:【计算机组成原理】寄存器的本质——锁存器
二.CPU的思考过程
首先,CPU摸鱼了很久,终于想起来要干点活了,不然该被优化了,那么它第一件事情就是去领取一下任务,但是任务在哪里找呢?这时候,它就打开了程序计数器PC(作用请看第三节3.1.程序计数器PC)。
程序计数器PC里面保存了下一条待运行指令(也可以称为任务,但是一般都叫指令)的地址,这个程序计数器PC就像个悬赏榜一样,告诉CPU任务发起人在哪里,让CPU去指定的地址找任务发起人,执行相应的指令。
当CPU在程序计数器PC找到地址后,会将当前所访问的内存单元的地址保存到地址寄存器AR(作用请看第三节3.2.地址寄存器AR)中去,然后让程序计数器PC指向下一条待运行的指令:

紧接着,CPU就拿着地址顺着地址总线找到了任务发起人,并且拿到了指令,把指令从数据总线里取出来放到了指令寄存器IR(作用请看第三节3.3.指令寄存器IR)中:

指令寄存器IR拿到指令后,指令译码器ID(作用请看第三节3.4.指令译码器ID)找上门来,根据指令格式(作用请看第三节3.5.指令格式)检查指令寄存器中的指令,分析出来操作码是什么,操作数在哪里之类的,如果操作数在内存中,就需要将相应的操作数从内存中取回至存储单元SRAM处,如果在寄存器中就直接就直接取用了。

操作控制器OC拿着清单检查发现操作数准备好了,操作码也有了,然后就给CPU的运算部门下达指令,开始运算,这时真正指令执行的时刻才到来。

运算器开始工作,算数逻辑单元ALU(作用请看第三节3.6.算数逻辑单元ALU)开始进行运算,期间如果数据过多处理不过来,就将数据暂时存放在累加寄存器AC(作用请看第三节3.7.累加寄存器AC)中,如果有操作数在存储单元里即将需要使用了,就把数据暂存在数据缓冲寄存器DR(作用请看第三节3.8.数据缓冲寄存器DR)中,将计算的状态存放在状态寄存器PSW(作用请看第三节3.9.状态寄存器PSW)中。

运算结束后,CPU继续回到程序计数器PC里面去,看看悬赏榜上的其他任务,周而复始,开始循环。
三.各寄存器的功能作用
3.1.程序计数器PC
程序计数器PC:又称为指令计数器,程序在第一次执行之前会将起始地址存入计数器中,往后每执行一条指令,CPU就自动修改PC的内容,以便随时保持着PC里面存放的地址总是下一条将要执行的指令的地址。程序执行分为顺序执行和转移执行两种。顺序执行时,CPU修改PC的过程就是简单地加1,转移执行时,后续指令的地址会根据当前指令的地址加上转移的偏移量得到,或者根据转移指令给出的直接转移地址得出。在8086CPU中,程序计数器PC就是CS:IP寄存器。CS:IP是怎么用地址加法器找到对应地址以及自加1的,可以以前发过的文章:【汇编语言】CS:IP寄存器
3.2.地址寄存器AR
地址寄存器AR:地址寄存器保存当前CPU所访问的内存单元的地址。存在的意义是由于内存和CPU存在着速度上的差异,需要用到地址寄存器充当缓存的作用,知道内存的读/写操作完成为止。
3.3.指令寄存器IR
指令寄存器IR:当CPU执行一条指令时,会将指令从内存中取出来放到缓冲寄存器,然后再送入指令寄存器IR中暂存。指令译码器会根据指令寄存器IR的内容产生各种位操作指令,控制其他的组成部件工作,完成所需的功能。
3.4.指令译码器ID
指令译码器ID:对指令中的操作码字段进行分析解释,识别该指令规定的操作,向操作控制器发出具体的控制信号,控制各部件工作,完成所需的功能。
3.5.指令格式
一般的指令格式如下:
| 前缀 | 操作码 | 寻址方式、操作数类型 | 立即数 | 偏移量 |
前缀用于记录指令的一些辅助信息,例如rep、段超越前缀等等,操作码就是mov、jmp这种操作码,寻址方式是指CPU的寻址方式(后续会编写一篇关于CPU寻址方式的文章,如果有更新会及时在这里添加链接),比如基址寻址、变址寻址等,操作数类型记录使用什么寄存器之类的,如果指令使用了立即数,就会将其记录在立即数这部分,如果寻址方式使用了偏移量,就会在偏移量部分记录指令格式中的偏移量部分。
3.6.算数逻辑单元ALU
算数逻辑单元ALU:是运算器中最重要的组成部件,负责处理数据,实现对数据的算是运算和逻辑运算
3.7.累加寄存器AC
累加寄存器AC:当运算器的算数逻辑单元执行算术或者逻辑运算时,为ALU提供一个临时工作区。比如进行减法运算时,会先将被减数去除暂存在AC中,再从内存中取出减数,然后通AC的被减数相减,所得到的结果送至AC中,运算结果是放在累加器中的。
3.8.数据缓冲寄存器DR
数据缓冲寄存器DR:对存储单元进行读/写操作时,使用DR暂存有存储单元读/写的一条指令或者数据字,将不同时间段内读/写的数据分隔开来。也可以作为CPU和内存、外部设备之间的数据传输中转站/缓冲区。
3.9.状态寄存器PSW
状态寄存器PSW:用于保存由算数指令和逻辑指令运行或者测试的结果建立的各种条件码内容,只要分为状态标志和控制标志。如进位标志(C)、溢出标志(V)、为0标志(Z)、为负标志(N)、中断标志(I)、方向标志(D)和单步标志等等。
相关文章:
【计算机组成原理】CPU的工作原理
一.CPU的组成结构 CPU主要有运算器、控制器、寄存器和内部总线等组成,其大概的样子长这样: 看不懂没关系,我们将采用自顶而下的方法来讲解CPU的具体工作原理,我们首先来说一下什么叫寄存器,顾名思义,寄存器…...
部署ELK
一、elasticsearch #拉取镜像 docker pull elasticsearch:7.12.1 #创建ELK docker网络 docker network create elk #启动ELK docker run -d --name es --net elk -P -e "discovery.typesingle-node" elasticsearch:7.12.1 #拷贝配置文件 docker cp es:/usr/share/el…...
纯前端实现图片验证码
前言 之前业务系统中验证码一直是由后端返回base64与一个验证码的字符串来实现的,想了下,前端其实可以直接canvas实现,减轻服务器压力。 实现 子组件,允许自定义图片尺寸(默认尺寸为100 * 40)与验证码刷新时间(默认时间为60秒)…...
#django基本常识01#
1、manage.py 所有子命令的入口,比如: python3 manage.py runserver 启动服务 python3 manage.py startapp 创建应用 python3 manage.py migrate 数据库迁移 直接执行python3 manage.py 可显示所有子命令...
什么是物流RPA?物流RPA解决什么问题?物流RPA实施难点在哪里?
RPA指的是机器人流程自动化,它是一套模拟人类在计算机、平板电脑、移动设备等界面执行任务的软件。通过RPA,可以自动完成重复性、繁琐的工作,提高工作效率和质量,降低人力成本。RPA适用于各种行业和场景,例如财务、人力…...
乐鑫工程部署过程记录
一、获取编译环境 1、下载sdk,ESP-IDF 这里有很多发布版本,当前我选择的是4.4.6,可以选择下载压缩包,也可以git直接clone 2、配置编译环境 我选择的是Linux Ubuntu下部署开发环境 查看入门指南 选择对应的芯片,我…...
to 后接ing形式的情况
look forward to seeing you. (期待着见到你) She admitted to making a mistake. (承认犯了个错误) He is accustomed to working long hours. (习惯于长时间工作)...
我做云原生的那几年
背景介绍 在2020年6月,我加入了一家拥有超过500人的企业。彼时,前端团队人数众多,有二三十名成员。在这样的大团队中,每个人都要寻找自己的独特之处和核心竞争力。否则,你可能会沉没于常规的增删改查工作中࿰…...
@EventListener注解使用说明
在Java的Spring框架中,EventListener注解用于监听和处理应用程序中的各种事件。通过使用EventListener注解,开发人员可以方便地实现事件驱动的编程模型,提高代码的灵活性和可维护性。本文将详细探讨EventListener注解的使用方法和作用&#x…...
算法通关村第五关-白银挑战实现队列
大纲 队列基础队列的基本概念和基本特征实现队列队列的基本操作Java中的队列 队列基础 队列的基本概念和基本特征 队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队,即我们常说的FIFO(first in fi…...
协力共创智能未来:乐鑫 ESP RainMaker 云方案线下研讨会圆满落幕
近日,乐鑫 ESP RainMaker 云方案线下研讨会(深圳)在亚马逊云科技与合作伙伴嘉宾的支持下成功举办,吸引了众多来自智能家电、照明电工、能源和宠物等行业的品牌客户、方案商和制造商。研讨会围绕如何基于乐鑫 ESP RainMaker 硬件连…...
读取谷歌地球的kml文件中的经纬度坐标
最近我在B站上传了如何获取研究边界的视频,下面分享一个可以读取kml中经纬度的matlab函数,如此一来就可以获取任意区域的经纬度坐标了。 1.谷歌地球中划分区域 2.matlab读取kml文件 function [sname,lon,lat] kml2xy(ip_kml) % ip_kml ocean_distubu…...
1深度学习李宏毅
目录 机器学习三件事:分类,预测和结构化生成 2、一般会有经常提到什么是标签label,label就是预测值,在机器学习领域的残差就是e和loss编辑3、一些计算loss的方法:编辑编辑 4、可以设置不同的b和w从而控制loss的…...
Flask_Login使用与源码解读
一、前言 用户登录后,验证状态需要记录在会话中,这样浏览不同页面时才能记住这个状态,Flask_Login是Flask的扩展,专门用于管理用户身份验证系统中的验证状态。 注:Flask是一个微框架,仅提供包含基本服务的…...
利用Graviton2和S3免费套餐搭建私人网盘
网盘是一种在线存储服务,提供文件存储,访问,备份,贡献等功能,是我们日常中不可或缺的一种服务。很多互联网公司都为个人和企业提供免费的网盘服务。但这些免费服务都有一些限制,比如限制下载速度࿰…...
跟着GPT学设计模式之单例模式
单例设计模式(Singleton Design Pattern)一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。 单例有几种经典的实现方式,…...
【MySQL索引与优化篇】数据库调优策略
数据库调优策略 文章目录 数据库调优策略1. 数据库调优的措施1.1 调优目标1.2 如何定位调优问题1.3 调优的维度和步骤第1步:选择合适的DBMS第2步:优化表设计第3步:优化逻辑查询第4步:优化物理查询第5步:使用 Redis 或 …...
基于BP神经网络的风险等级预测,BP神经网络的详细原理,
目录 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 代码链接:基于BP神经网络的风险等级评价,基于BP神经网络的风险等级预测(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.n…...
最新Ai智能创作系统源码V3.0,AI绘画系统/支持GPT联网提问/支持Prompt应用+搭建部署教程
一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...
项目资源不足,常见的5种处理方式
软件开发中,经常会遇到项目资源不足的情况,项目团队如果无法及时获得所需的人力、财力、物力等资源,往往会影响团队士气以及任务质量,造成无法按时完成任务,进而影响项目进度。 因此及时处理和应对资源不足的情况&…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
