聊聊计算机中的寄存器

news2024/12/23 6:39:38

文章目录

    • 前言
    • 数据寄存器(DR)
    • 地址寄存器(AR)
    • 程序状态寄存器(PSW)
    • 累加寄存器(AC)
    • 乘商寄存器(MQ)
    • 程序计数器(PC)
    • 指令寄存器(IR)
    • MAR、MDR
    • 小结

作者:小牛呼噜噜 | https://xiaoniuhululu.com
计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」

前言

现代CPU内部除了运算器和控制器,还有一个常见的组件: 寄存器是CPU内部用来存放数据的一些小型的存储区域,用来暂时存放参与运算的数据以及运算结果。

在https://mp.weixin.qq.com/s/KecubYROQztHvwPicJb9wQ这篇文章中,我们了解了计算机各个硬件读写速度的差异,其中从存储器速度、容量和价格的关系金字塔图发现:

最上层的寄存器速度最快,容量最小,价格也最昂贵

下面我们来看看几个常见寄存器:

数据寄存器(DR)

数据寄存器(Data Register,DR)又称数据缓冲寄存器,数据寄存器用于存放操作数,其位数应满足多数数据类型的数值范围,其主要功能是作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之间操作速度上的差异。

数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存存入一条指令或一个数据字时,也将它们暂时存放在数据寄存器中。

数据寄存器的作用是 :

  1. 作为CPU和主存、外围设备之间信息传送的中转站;
  2. 弥补CPU和主存、外围设备之间在操作速度上的差异;
  3. 在单累加器结构的运算器中,数据寄存器还可兼作操作数寄存器。

地址寄存器(AR)

地址寄存器(Address Register,AR)用来保存CPU当前所访问的主存单元的地址。其本身可以具有通用性,也可用于特殊的寻址方式,如用于基址寻址的段指针(存放基地址)、用于变址寻址的变址寄存器和用于堆栈寻址的栈指针。地址寄存器的位数必须足够长,以满足最大的地址范围。

由于在主存和CPU之间存在操作速度上的差异,所以必须使用地址寄存器来暂时保存主存的地址信息,直到主存的存取操作完成为止。

程序状态寄存器(PSW)

程序状态寄存器(PSW),用来保存各类运算指令或测试指令的结果的各种状态信息

除此之外,程序状态字寄存器还用来保存中断和系统工作状态等信息,以便CPU和系统及时了解机器运行状态和程序运行状态。

程序状态寄存器 是构成 运算器的重要组成部分

累加寄存器(AC)

累加寄存器通常简称累加器(AC),是一个通用寄存器。

累加器的功能是:当运算器的算术逻辑单元ALU执行算术或逻辑运算时,为ALU提供一个工作区,可以为ALU暂时保存一个操作数或运算结果。显然,运算器中至少要有一个累加寄存器。

乘商寄存器(MQ)

在运算器中,乘商寄存器主要负责数据的乘法与除法运算并可保存运算结果,是运算器的基本组成部分,是运算器三个基本寄存器之一。

程序计数器(PC)

程序计数器(PC),具有寄存信息计数两种功能,一般用来存放下一条指令在主存储器中的地址

在程序执行之前,首先必须将程序的首地址,即程序第一条指令所在主存单元的地址送入PC,因此PC的内容即是从主存提取的第一条指令的地址。

当执行指令时,CPU能自动递增PC的内容,使其始终保存将要执行的下一条指令的主存地址,为取下一条指令做好准备。

但是,当遇到转移指令时,下一条指令的地址将由转移指令的地址码字段来指定,而不是像通常的那样通过顺序递增PC的内容来取得。

指令寄存器(IR)

指令寄存器(Instruction Register,IR),用来保存当前欲执行的指令

当执行一条指令时,首先把该指令从主存读取到数据寄存器中,然后再传送至指令寄存器。

指令包括操作码和地址码两个字段,为了执行指令,必须对操作码进行测试,识别出所要求的操作,指令译码器 就是完成这项工作的。指令译码器对指令寄存器的操作码部分进行译码,以产生指令所要求操作的控制电位,并将其送到微操作控制线路上,在时序部件定时信号的作用下,产生具体的操作控制信号。

指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码,即可向操作控制器发出具体操作的特定信号。

MAR、MDR

另外寄存器不只存在CPU中,存储器中也存在寄存器,比如MAR、MDR

  • MAR:存储器地址寄存器,用于存放将被访问的存储单元的地址。作用和AR类似
  • MDR:存储器数据寄存器,用于存放欲存入存储器中的数据或最近从存储器中读出的数据。作用和DR类似

其中MAR位数反映储存单元的个数,即最多能表示多少个不同的状态;MDR位数=储存字长=每个储存单元的大小

小结

将上面各个寄存器组合起来,我们可以画出一幅计算机更细化的组成图:

当存储器开始读操作的时候,存储器将指定地址单元内的指令读至MDR,再由MDR送至IR。
IR将指令中的操作码送到CU中,用来分析指令并发出各种微操作命令序列。再加指令中地址码送到MAR,用来去操作数

在CPU内部必须给ALU提供数据,因此ALU必须可直接访问MDR,ALU的外围还可以有另一些寄存器AC、MQ、X,这些寄存器用于ALU的输入、输出以及用于和MDR及用户可见寄存器交换数据。

在CPU的控制和状态寄存器中,还有用来存放程序状态字PSW的寄存器,该寄存器用来存放条件码和其他状态信息。在具有中断系统的机器中还有中断标记寄存器等等。


参考资料:

计算机组成原理(第2版)

https://blog.csdn.net/weibo1230123/article/details/83106141


本篇文章到这里就结束啦,很感谢你能看到最后,如果觉得文章对你有帮助,别忘记关注我!更多精彩的文章

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国内第一篇讲解减少卡顿的代码级详细文章

原文链接:原文链接 系统网站应用出现过卡顿,但却不知道如何优化。国内第一篇讲如何减少卡顿的代码级别详细文章,也是性能优化系列文章中的一篇,欢迎点赞、关注,也欢迎对其中的内容进行评论。 经常听人说,“…

配置CentOS为ssh免密码互相通信

文章目录配置CentOS为ssh免密码互相通信配置4台CentOS的集群配置4台CentOS为ssh免密码互相通信配置CentOS为ssh免密码互相通信 配置4台CentOS的集群 修改 /etc/sysconfig/network-scripts/ifcfg-ens33 文件,配置虚拟机 IP,以其中一个虚拟机为例&#x…

html实现贪吃蛇游戏(源码)

文章目录1.实现贪吃蛇1.1 界面设计1.2 界面动态效果1.3 界面主代码2.资源目录源码下载作者:xcLeigh 文章说明 html实现贪吃蛇源码,酷炫的界面效果,点击开始游戏后,通过键盘的上下左右按键,操作移动方向,代码…

@DateTimeFormat和@JsonFormat介绍

文章目录1.DateTimeFormat注解1.1DateTimeFormat注解简介1.2DateTimeFormat注解的功能1.3DateTimeFormat注解的注意点1.4DateTimeFormat功能演示1.4.1类型转换异常情况测试1.4.2接收url路径传参格式测试1.4.3接收Form-Data数据格式测试1.4.4接收JSON数据格式测试2.JsonFormat注…

python实现基于RPC协议的接口自动化测试

什么是RPC RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议。从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。 RPC 是一种软件通信协议,一个程序可…

Day1:垂直水平居中方式(至少6种,必须包含弹性盒子)

目录 垂直水平居中方式 方式1:弹f性盒子(1) (推荐) 方式2:弹性盒子(2) (推荐) 方式3:弹性盒子(3) 方式4:grid布局(1) (推荐) 方…

vs2019 编译调试 QT Creator 源码

vs2019 编译调试 QT Creator 源码 开始使用Qt Creator 5.15.2 调试编译 Qt Creator 6.0.2源码,对源码进行了 裁剪,将一些暂时用不到的文件删除,比如plugins里面的绝大部分文件。然后使用vs2019打开工程,进行编译调试。下面对这个…

IDEA2022插件:EasyCode一键生成增删改查代码

IDEA2022插件:EasyCode一键生成增删改查代码 文章目录IDEA2022插件:EasyCode一键生成增删改查代码建表下载插件IDEA连接数据源引入必要依赖配置SpringBoot数据库连接使用EasyCode生成代码生成效果启动测试小错误接口测试自行配置更好用尾述结语建表 新建…

【案例源码公开】国产AD+全志T3开发案例,为能源电力行业排忧解难!8/16通道

前 言 本文主要介绍基于全志科技T3(ARM Cortex-A7)国产处理器的8/16通道AD采集开发案例,使用核芯互联CL1606/CL1616国产AD芯片,亦适用于ADI AD7606/AD7616。CL1606/CL1616与AD7606/AD7616软硬件兼容。 备注: (1)创龙科技TL7606I模块使用AD芯片为核芯互联CL1606或ADI AD…

【C语言】初始C语言系列 代码详解 _ 编程入门 _【内附代码和图片】_ [初阶篇 _ 总结复习]

【前言】 本篇文章为初始C语言部分,C语言是编程的入门语言,所以也说是编程入门; 学好C语言的入门内容,才能真正的入门编程,而C语言的学习对于刚入门的同学还是有一些难度的,需要踏踏实实的自己去理解。 在此…

REDIS篇(4)——命令执行过程(readQueryFromClient)

前面讲过,ae循环在收到客户端请求时,会调用请求处理器——acceptTcpHandler ,而请求处理器会创建新的套接字并监听和绑定命令处理器——readQueryFromClient。本篇着重分析命令的执行过程。 大概可分为: 1、读取并分析套接口中协…

QT学习_06_UI设计

1 创建项目 前5篇的学习笔记都没有用到ui,从现在开始,就要用这个ui了 创建项目的时候,把这个Generate form√上 项目文件中,就多了mainwindow.ui 2 ui设计界面的介绍 双击这个.ui文件,就可以进入设计界面 下面简单的…

字节跳动内推软件测试【自动化测试】岗,最低年薪50W+

目录 字节跳动内推 测试开发工程师技能成长路径 字节跳动内推 今年大环境不好,内卷的厉害,薪资待遇好的工作机会更是难得。最近脉脉职言区有一条讨论火了: 哪家互联网公司薪资最‘厉害’? 下面的评论多为字节跳动,还炸…

JAVA计算机毕业设计网约车管理系统(附源码、数据库)

JAVA计算机毕业设计网约车管理系统(附源码、数据库) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

毕业设计源码-计算机毕业设计源码

2022年09月 09/28文件文档在线预览解决方案09/22商城系统09/22知识分享与团队协同软件09/22共享充电桩小程序09/22共享雨伞租借系统09/22小程序博客09/22共享充电宝小程序09/22美容美发小程序09/22民宿小程序09/22兼职小程序09/22相亲小程序09/22贴身管家小程序09/22扫码点餐小…

Spring IOC 核心流程介绍

前言 接下来我们编写入口代码,跟代码梳理一下Spring IOC一些重要的方法节点。IOC有12个比较重要的方法,把这12个方法学习一下,整个Spring IOC基本就差不多了。 编写Spring IOC入口 1、创建需要被管理的类 接口类: package se…

蜜罐技术二三事

目录 1. 蜜罐技术介绍 1.1 蜜罐技术是什么 1.2 蜜罐分类 2. 使用蜜罐技术获取信息 2.1 初始化项目 2.2 读取 PFRO.log 文件 2.2.1 PFRO.log 作用及位置 2.2.2 使用 fs 读取 PFRO.log 文件 2.2.3 关于 buffer 与字符编码(扩展) 2.3 使用 正则表…

美国FBA海运有哪几种渠道

美国FBA海运有两种渠道,下面具体来看下这两种渠道: 一、Matson美森(CLX/CCX/CLX) 1、CLX美森限时达。时效性:开船后12-18天内交UPS配送(通常在13-15天); 2、CCX美森正班船。时效性:开船后16-22天内交UPS配送(通常在18-20天); 3、C…

基于改进PSO-ABC算法的机器人路径规划(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 系统试图借助人工蜂群针对粒子群算法和蜂群算法在寻优中存在的一些早熟和收敛速精度不高等问题,本文分别对粒子算法和蜂群算法…

MySQL是怎么保证数据不丢失的

一.什么是两阶段提交 1.SQL语句(update user set name‘李四’ where id3)的执行流程是怎样的呢? 1.执行器先找引擎取 ID3这一行。ID 是主键,引擎直接用树搜索找到这一行。 2.如果 ID3 这一行所在的数据页本来就在内存中&#x…