写点什么

寄存器基本原理介绍(上篇)

  • 2019-10-26
  • 本文字数:2279 字

    阅读完需:约 7 分钟

寄存器基本原理介绍(上篇)

寄存器的类型众多,简要阐述几个最重要的,在此之前先来看看存储单元和总线


存储单元一般应具有存储数据和读写数据的功能,以 8 位二进制作为一个存储单元,也就是一个字节。每个单元有一个地址,是一个整数编码,可以表示为二进制整数。程序中的变量和主存储器的存储单元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据。存储地址一般用十六进制数表示,而每一个存储器地址中又存放着一组二进制(或十六进制)表示的数,通常称为该地址的内容。


存储器被划分为若干个存储单元,编号顺序是从 0 开始,,比如一个和存储器有 100 个存储单元,那么他的编号就是 0-99。


微型储存器的容量是以字节为最小单位来计算的,对于拥有 100 的存储单元的存储器,他的容量是 100 个字节。


以上说到,存储器被划分为多个存储单元,从零开始编号,就像是一条街上的门牌号一样,那么 CPU 要读取这些数据,就像是在这一条街里找这个门牌号一样,先要确定在哪里住。


由此可见,CPU 要相对数据进行读写,必须和芯片进行下面 3 类交互:


  • 存储单元的地址(地址信息)

  • 器件的选择,读或者写命令(控制信息)

  • 读或写的数据(数据信息)


那么,CPU 是如何让将这些新词传输到存储器的芯片中的,这就涉及到一个概念,我们都知道,计算机能够处理的信息都是电信号,也就是高低电平,电信号当然是由导线来传送。在计算机中,由专门连接 CPU 和其他芯片的导线,我们通常称为总线,总线从物理的概念来讲,就是一根根导线的集合。根据传出信息的不同,总线从逻辑上讲主要分为 3 类:地址总线,控制总线以及数据总线。



分析上图,三个基础导线首先 CPU 通过地址线将信息发出,然后通过控制线发出内存读写任务,选中存储器芯片,并命令从中读取数据,最后通过数据线将数据送入 CPU。


接下来,详细介绍一下。

地址总线

现在,我们知道 CPU 是通过地址总线来指定存储单元的,那么可见地址总线上能传递多少不同的信息,就能对多少个存贮单元进行寻址。


现在假设,一个 CPU 有 10 根地址线,一根导线能传递的状态只有两种,一种是高电平,一种是低电平,就是二进制的 0 和 1,那么 10 根导线就是 10 位 2 进制数据,那么 10 位进制能组成多少不同的数据呢?2 的 10 次方个,最小为 0,最大是 1023。如果一个 CPU 由 N 根地址总线,那么可以说这个 CPU 的地址总线的宽度为 N,这样的 CPU 最多可以寻找 2 的 N 次方个内存单元。


地址总线由微处理器产生,主要用来存储输入输出接口,传送地址信息,是一条单向总线。



上图就是对地址总线一个简单的概述,帮助大家理解。上图共有 5 条地址线,一次传输五位二进制数。

数据总线

数据总线主要负责 CPU 与其他部件的数据传送,数据总线的宽度决定了 CPU 和外界的数据传输速度,8 根数据线一次性可传送一个 8 位二进制数,也就是一根一个数据,共一个字节,16 根就是传输两个字节。


数据总线是一条双向总线,CPU 和其他部件的双向传输信号。


8088CPU 的数据总线宽度为 8,8086CPU 的数据总线宽度为 16,8086 的数据传送要快一些。

控制总线

控制总线控制外部器件,控制总线只是一个总称,其实是由一些不同的控制线集合,有多少根控制总线就意味着对外部器件有多少种控制,控制总线决定着 CPU 对外部器件的控制能力。


控制总线主要传输控制信号、时序信号和状态信号,也是一条双向总线。


以上简单说了总线相关的问题,对于理解寄存器有很大帮助,接下来聊聊寄存器。寄存器是中央处理器内的组成部分,寄存器是有限存储容量的高速存储部件,可用来暂存指令、数据和地址。


寄存器是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求,而接口寄存器可以同时被内部电路和外部电路或软件访问,CPU 中的寄存器就是其中一种,作为软硬件的接口,为广泛的通用编程用户所熟知。


在计算机领域,寄存器是 CPU 内部的元件,包括通用寄存器、专用寄存器和控制寄存器。寄存器拥有非常高的读写速度,所以在寄存器之间数据传送非常快。不同的 CPU 寄存器是不相同的,在此以 8086CPU 为例,8086CPU 一共有 14 个寄存器。这里不依次介绍,先介绍最主要的。

通用寄存器

8086CPU 所有的寄存器都是 16 位的,可以存放两个字节。AX、BX、CX 和 DX 这四个寄存器主要用来存放一般性数据,也称为通用寄存器。以 AX 为例,来看下其内部结构。



上图只是一个简易的逻辑图,每一个小格就是一个存储单元,一共 16 个 ,编号 0-15,左边是高位,右边低位,这四个寄存器每一个 8 位都可以当作独立的寄存器来使用:


  • AX 可以分为 AH 和 AL

  • BX 可以分为 BH 和 BL

  • CX 可以分为 CH 和 CL

  • DX 可以分为 DH 和 DL


AX 的低八位,也就是 0 到 7 位,构成了 AL 寄存器,高八位,8 到 15 位,构成了 AH 寄存器,AH 和 AL 是可以独立使用的 8 位寄存器。例如,数据 1001 1100 0100 000(4E20H)是在寄存器中的数据。



寄存器 AH(4EH)



寄存器 AH(20H)


由此可见,在寄存器中高位存高位,当然以后会涉及到大端小端的问题,目前只需要理解高位存高位,低位存低位就可以了。


最后简单介绍计算机中较为常用的单位。我们大家应该都了解基本的换算单位,1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB。在这个里面有一个新的单位—字(word),一个字由两个字节构成,这两个字节称为这个字的高位字节和低位字节,这就能够很好的理解通用寄存器的问题,一个通用寄存器是 16 位,两个字节也就是一个字,AH 就是对应的高位字节,AL 也就是低位字节,这两个字节可以划分为两个独立的数据。


2019-10-26 08:007999

评论

发布
暂无评论
发现更多内容

Apache APISIX Ingress v1.5-rc1 发布

API7.ai 技术团队

APISIX kubenetes Ingress Controller

硅谷来信:快速行动,Facebook、Quora等成功的“神器”!

博文视点Broadview

WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!

沉默王二

GitHub 终端工具

数据治理体系演进简介

网易数帆

大数据 数据治理 元数据 数据标准

多业务模式下的交易链路探索与实践

转转技术团队

中台 状态机 FSM

2022 CCF国际AIOps挑战赛决赛暨AIOps研讨会报名已开启

BizSeer必示科技

人工智能 阿里云 华为云 信通院

手摸手带你 在 Windows 系统中安装 Istio

万猫学社

云原生 istio windows

我和TiDB的故事 | 遇上你是我的缘

TiDB 社区干货传送门

人物访谈 社区活动

HDD杭州站•ArkUI让开发更灵活

HarmonyOS开发者

HarmonyOS

关注微信公众号,自动登陆网站

源字节1号

微信小程序

版本控制篇 | 龙智邀您共赴GOPS全球运维大会,探索大规模、敏捷、高质量、开放式的软件研发与运营之路

龙智—DevSecOps解决方案

运维 DevSecOps GOPS大会

莅临GOPS大会龙智展位,获取Forrester最新报告:《Forrester Wave™:2021年第四季度企业服务管理报告》

龙智—DevSecOps解决方案

ITSM Forrester Wave Forrester

不是吧?还有人不会定位线上MySQL慢查询问题?

Java永远的神

Java MySQL 数据库 程序员 面试

文盘Rust -- 配置文件解析

TiDB 社区干货传送门

开发语言

我和 TiDB 的故事 | 横看成岭侧成峰

TiDB 社区干货传送门

人物访谈

官方发布·2022南京智博会定于10月份在新庄国展召开

AIOTE智博会

SonarQube即将亮相第十八届GOPS全球运维大会

龙智—DevSecOps解决方案

代码安全 GOPS大会 运维、 代码质量检测工具

开源一夏 | Java格式化日期 微秒

六月的雨在InfoQ

开源 8月月更

2022年6月互联网医疗领域月度观察

易观分析

医疗 市场

centOS7.3 安装启用 iptables 记录

JavaPub

Linux centos7 iptables

自从用了 Kiali 以后才知道,配置 Istio 的 流量管理 是如此容易

万猫学社

云原生 istio envoy kiali

一次多表关联顺序的慢查询——TiDB 关联特性

TiDB 社区干货传送门

性能调优

五大理由告诉你为什么开发人员选择代码质量静态分析工具Klocwork来实现软件安全

龙智—DevSecOps解决方案

静态代码分析 代码静态分析 SAST工具 SAST

后台权限系统的设计以及主流的五种权限模型详解

Java全栈架构师

Java 程序员 架构 面试 后端

sync-diff-inspector 使用实践

TiDB 社区干货传送门

6.x 实践

Python开启虚拟环境

技术小生

8月月更 Python虚拟环境

内存问题难定位,那是因为你没用ASAN

华为云开发者联盟

云计算 开发 内存

双因子与多因子身份验证有什么区别?

SEAL安全

身份验证

有多一只“手”的机器狗出没?就在昇腾AI开发者创享日·南京站

科技热闻

【7.29-8.5】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

没开发人员,接到开发物联网系统的活儿,干不干?

AIRIOT

低代码 物联网 低代码,项目开发

寄存器基本原理介绍(上篇)_语言 & 开发_周澳_InfoQ精选文章