【计算机组成原理】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种处理方式
软件开发中,经常会遇到项目资源不足的情况,项目团队如果无法及时获得所需的人力、财力、物力等资源,往往会影响团队士气以及任务质量,造成无法按时完成任务,进而影响项目进度。 因此及时处理和应对资源不足的情况&…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...