【计算机组成原理】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种处理方式
软件开发中,经常会遇到项目资源不足的情况,项目团队如果无法及时获得所需的人力、财力、物力等资源,往往会影响团队士气以及任务质量,造成无法按时完成任务,进而影响项目进度。 因此及时处理和应对资源不足的情况&…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...