NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

  • 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 也就是低位字节,这两个字节可以划分为两个独立的数据。


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-10-26 08:007086

评论

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

手把手教学基于深度学习的遥感影像倾斜框算法训练与分析

cv君

人工智能 深度学习 AI 智能 视觉

首席AI架构师进阶之旅开启!第4期60位AICA学员硬核开学

百度大脑

AI 百度飞桨

入选Gartner全球AI报告,阿里云解读AI工程化的三大基础能力

阿里云大数据AI技术

机器学习 AI Gartner

加入即可服务1.83亿个家!海尔智家让开发者面向亿万家庭

DT极客

在这里,每一行代码都需要被认真对待

DT极客

实时 摔倒识别 /运动分析/打架等异常行为识别/控制手势识别等所有行为识别全家桶 原理 + 代码 + 数据+ 模型 开源!

cv君

AI 目标检测 视频理解 引航计划

波卡生态DeFi系统开发方案

薇電13242772558

区块链 defi

Three.js杂记(三)—— 物体运动

空城机

JavaScript 大前端 WebGL 3D可视化 three.js

爬虫入门经典(十二) | 一文带你快速爬取豆瓣电影

不温卜火

python 爬虫

数据分析实战项目-蛋壳公寓投诉分析

诡途

Python 数据分析 蛋壳公寓

想当程序员,如何判断自己是否适合当前端程序员?

孙叫兽

程序员 大前端 引航计划

爬虫入门经典(四) | 如何爬取豆瓣电影Top250

不温卜火

python 爬虫

python 爬虫之selenium可视化爬虫

诡途

Python 爬虫 selenium

2021年ONNX开发者大会即将召开

百度大脑

百度飞桨 ONNX

寻找被遗忘的勇气(二十二)

Changing Lin

3月日更

大前端工程师进阶之路,Node全栈为前端带来更多可能

孙叫兽

大前端 全栈 Node

Three.Js杂记(一)——起步

空城机

大前端 WebGL 3D可视化 three.js

初来乍到,请多关照

空城机

杂记

Three.js杂记(二)——绘制点、线、面

空城机

JavaScript 大前端 WebGL 3D可视化 three.js

爬虫入门经典(七) | 一文带你爬取淘宝电场

不温卜火

python 爬虫

如何优化管理,打造高效的技术团队?

有只小耳朵

团队管理 技术管理 数字化转型

智能家居操作系统谁最强?海尔智家独有“智家大脑”行业最领先

DT极客

一气之下开发了个群聊机器人

诡途

Python 办公自动化 群聊机器人

C 语言性能优化:循环展开

1

编程 程序员 性能优化 C语言 循环展开

如何巧妙的去除数组中的空格?

程序媛观澜

c++ 字符串

飞桨刷新分子性质预测榜单,助力AI药物研发

百度大脑

AI 药物研发 百度飞桨

一套亿级用户的IM架构技术干货(下篇):可靠性、有序性、弱网优化等

JackJiang

飞桨中国行首站重庆 解读产业 智造

百度大脑

百度 飞桨 中关村智酷

【实战问题】-- 缓存穿透,缓存击穿和缓存雪崩的区别以及解决方案

秦怀杂货店

Java redis 缓存 架构 分布式

2.4 Go语言从入门到精通:条件和循环

xcbeyond

3月日更 Go 语言

助力香港成为全球寿命最长的城市,我们如何看医管局的数字化转型?

有只小耳朵

数字化转型 人才培养

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