寄存器和暂存器有什么不一样?各自有何特点及应用?
寄存器是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,存放门位二进制代码的寄存器需用竹个触发器来构成。
好的,我们来详细解释一下寄存器和暂存器的区别、特点和应用。
核心区别:
- 寄存器是明确的硬件组件。 它们是 CPU 内部为数不多、由物理电路直接实现的高速存储单元,有特定的名称(如 EAX, RAX, R0, R1, PC, SP)和专门的用途(通用计算、地址索引、指令指针、堆栈指针等)。
- 暂存器是一种使用方式或概念。 它指的是任何被用来临时存储中间计算结果、变量或操作数的存储位置。这个位置可以是:
- 一个实际的硬件寄存器(这是最高效的方式)。
- 一段CPU高速缓存(Cache)。
- 一块内存(RAM)上的地址(最常见的情况,特别是当寄存器不够用时)。
- 甚至特定应用中FPU寄存器、向量寄存器的一部分。
简单来说:寄存器是一种具体的硬件资源;而暂存器指的是“临时存放数据的地方”,这个地方通常首选寄存器,但寄存器不够用时就需要使用内存位置来充当“暂存器”。
详细对比与特点
1. 寄存器 (Register)
- 硬件本质:
- 是 CPU 核心的一部分,由 SRAM 或触发器(Flip-Flops)等高速电路直接实现。
- 与 CPU 的运算逻辑单元(ALU)和控制单元紧密相连。
- 特点:
- 数量有限: 一般只有几十个到几百个(具体架构不同)。这是最宝贵的资源。
- 访问速度最快: 因为就在 CPU 核心内部,访问延迟通常只需 1个时钟周期 或更低。其速度远快于高速缓存和内存。
- 零成本访问(相对): CPU 访问寄存器几乎不消耗额外的指令周期(除了执行指令本身的操作)。
- 直接操作: CPU 指令直接通过名字引用寄存器(如
ADD R1, R2, R3表示R1 = R2 + R3)。 - 特定功能: 很多寄存器有专门的用途(尽管许多架构也有通用寄存器):
- 程序计数器: 存储下一条要执行的指令地址。
- 堆栈指针: 指向当前程序栈的顶部。
- 基址/变址寄存器: 用于内存地址计算。
- 状态/标志寄存器: 存储算术/逻辑运算结果的状态(如进位、溢出、零标志)。
- 通用寄存器: 用于存放操作数、计算结果、地址值等。
- 指令依赖: CPU 架构的指令集设计紧密围绕可用的寄存器。
- 应用:
- 执行计算: 存放算术逻辑运算的操作数和结果(是 ALU 的主要输入/输出)。
- 寻址: 存储或计算内存地址(基址、变址、堆栈指针)。
- 函数调用:
- 传递前几个参数(函数调用约定的一部分)。
- 保存函数返回地址。
- 保存调用者的寄存器状态(需要时)。
- 存储函数的局部变量(如果能分配到寄存器)。
- 循环控制: 存储循环计数器。
- 临时存储: 在执行过程中存放任何中间值(寄存器本身就是最理想的暂存器)。
2. 暂存器 (Scratch Register / Temporary Storage)
- 概念本质:
- 强调的是临时存储中间值的功能性角色,而不是一个特定的硬件实体。
- 是一种使用方式的描述。
- 特点:
- 位置多样:
- 首选: 实际硬件寄存器。这是最理想、最高效的“暂存器”。
- 常见: 内存位置。当寄存器数量不足时,编译器/程序员将局部变量、临时值等分配到堆栈或堆上的内存位置。这些位置在功能上就充当了“暂存器”的角色。
- 可能: 高速缓存行。
- 无固定数量: 理论上,可以使用的内存位置(用于作为软件定义的暂存器)几乎是无限的(受内存容量限制)。
- 访问速度可变:
- 如果是寄存器:访问极快(1周期)。
- 如果是 L1 缓存:几到十几个周期。
- 如果是内存:可能需要数百个周期(相对于寄存器极慢)。
- 管理主体:
- 如果位置是硬件寄存器:由 CPU 硬件架构固定。
- 如果位置是内存地址:由编译器(分配局部变量、临时存储)、程序员或运行时系统(如操作系统管理堆)管理。
- 操作方式:
- 如果是寄存器:通过汇编指令直接操作寄存器名。
- 如果是内存地址:通过
LOAD(读) 和STORE(写) 指令(或等效指令)访问内存地址。高级语言中对应的是变量引用。
- 位置多样:
- 应用:
- 存放局部变量: 函数内部的变量,生命周期只在函数执行期间。
- 存放临时结果: 复杂计算中的中间步骤值。
- 表达式求值: 计算表达式时存放操作数和中间结果。
- 函数参数传递:
- 前几个通过寄存器(被视为高效传递的暂存器)。
- 后续的通过堆栈内存(堆栈上的位置成为参数传递的暂存器)。
- 保存调用者状态: 函数调用前,将被调用函数可能破坏的寄存器值“临时”保存到堆栈内存。
- 中断/异常处理: 将 CPU 状态(寄存器内容)临时保存到堆栈或特定内存区域。
- 编译器优化: 在代码生成和优化过程中,编译器会虚拟大量“临时变量”(暂存器),并尽可能将其分配到物理寄存器或堆栈上。
总结表格
| 特性 | 寄存器 | 暂存器 (概念) |
|---|---|---|
| 本质 | 具体的硬件组件 (CPU 内部的存储单元) | 临时的使用方式/概念 (存储中间结果的位置) |
| 硬件支持 | 是 (CPU核心电路) | 可能利用寄存器,也可能利用内存 |
| 位置 | 确定且有限的物理单元 | 不固定:寄存器 或 内存位置 或 缓存 |
| 数量 | 有限 (几十到几百个) | 理论上无限 (内存),但需看具体上下文 |
| 访问速度 | 最快 (通常 1 个时钟周期) | 可变:若是寄存器则快,若是内存则慢得多 |
| 操作方式 | CPU 指令直接引用寄存器名称 | 寄存器:直接引用;内存:需 LOAD/STORE |
| 管理主体 | CPU 架构设计固定 | 寄存器:架构固定;内存:编译器/程序员/OS |
| 主要应用 | 核心计算、寻址、状态控制、高效临时存储 | 一切需要临时存放中间数据的地方 |
| 关键区别 | 是什么 (硬件) | 怎么用 (功能) |
简单记忆:
你可以把 CPU 的寄存器看作是 CPU 手边自带的高速工作台抽屉(数量少但拿取东西超快)。程序员/编译器在做计算时,必须把当前操作所需的原材料(数据)和工具(地址)放到这些抽屉里,CPU 才能高效干活。
而 “暂存器” 就是泛指“临时放东西的地方”。最理想的临时存放地点就是这些手边的抽屉(寄存器)。但当抽屉(寄存器)装不下时,就只能把暂时用不到的东西(数据)存到远处的仓库(内存)里,等到需要用到时再跑一趟搬回来(LOAD)。虽然仓库空间(内存)大得多,但来回跑腿(内存访问)需要消耗大量的额外时间。
因此,编译器最重要的优化之一就是寄存器分配,尽量让关键变量和临时值放到“抽屉”(寄存器)里当高效的暂存器,而不是经常跑“仓库”(内存)。
用单片机的SPI控制ADS1191,发送命令写寄存器后读取相应寄存器的值就不一样,而且每次读出来的都不一样,为什么?
现用单片机的SPI控制ADS1191,使用内置晶振时钟,发送命令写寄存器后,再读取相应寄存器的值就不一样,而且每次读出来的都
对ADS1258进行配置,对某一个寄存器写指令,为什么写进去的和读回来的不一样?
现在对ADS1258进行配置,对某一个寄存器写指令,然后再次读回来这个寄存器的值,为什么写进去的和读回来的
ADS1247模拟SPI读取寄存器数据,读取的数据每次都不一样,为什么?
ADS1247模拟SPI 读取寄存器数据,读取的数据每次都不一样。比对过时序,程序没有问题。示波器抓取的波形显示命令已经发出,试了好几块板子都是这样。 PS:START 引脚已经拉高
"痞子衡嵌入式:i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计"
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1010 1170型号上不一样的SNVS GPR寄存器读写控制设计。 痞子衡之前两篇文章 《在SBL项目实战中妙用
资料下载
佚名
2021-12-04 11:36:12
NFC与RFID有什么不一样?资料下载
电子发烧友网为你提供NFC与RFID有什么不一样?资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
资料下载
远不及你
2021-04-22 08:53:46
两种常见的镇流器有哪些不一样资料下载
电子发烧友网为你提供两种常见的镇流器有哪些不一样资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
资料下载
佚名
2021-03-28 08:48:30
大功率LED封装有什么不一样?资料下载
电子发烧友网为你提供大功率LED封装有什么不一样?资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
资料下载
挽你何用
2021-03-28 08:45:58
盘点 | 伺服电机控制器 VS 步进电机控制器,有啥不一样?
步进电机和伺服电机是工控领域应用最广泛的两类产品,而它们的核心分别是步进电机控制器与伺服电机控制器,本文将给大家讲解这两种器件不一样的地方。
资料下载
笑过就走
2021-01-31 06:17:24
i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计资料分享
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计。 痞子衡之前两篇文章 《在SBL项目实战中妙用
ST用户手册中寄存器名字和软件中寄存器的名字不一样
ST用户手册中寄存器名字和软件中寄存器的名字不一样。比如说,用户手册中SIU_PCR344是这么写的。但是我用的软件cosmic中对这个
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 芯片的工作原理是什么?
- ssd是什么意思
- 什么是蓝牙?它的主要作用是什么?
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- dtmb信号覆盖城市查询
- 怎样挑选路由器?
- 华为芯片为什么受制于美国?
- 元宇宙概念股龙头一览
- type-c四根线接法图解
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- BLDC电机技术分析
- 复位电路的原理及作用
- dsp是什么意思?有什么作用?
- iphone13promax电池容量是多少毫安
- 苹果无线充电器怎么使用?
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 传感器常见类型有哪些?
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机