爱了爱了,这篇寄存器讲的有点意思

作 者:程序员cxuan
原文链接:
下面我们就来介绍一下关于寄存器的相关内容 。 我们知道 , 寄存器是 CPU 内部的构造 , 它主要用于信息的存储 。 除此之外 , CPU 内部还有运算器 , 负责处理数据;控制器控制其他组件;外部总线连接 CPU 和各种部件 , 进行数据传输;内部总线负责 CPU 内部各种组件的数据处理 。
那么对于我们所了解的汇编语言来说 , 我们的主要关注点就是 寄存器 。
为什么会出现寄存器?因为我们知道 , 程序在内存中装载 , 由 CPU 来运行 , CPU 的主要职责就是用来处理数据 。 那么这个过程势必涉及到从存储器中读取和写入数据 , 因为它涉及通过控制总线发送数据请求并进入存储器存储单元 , 通过同一通道获取数据 , 这个过程非常的繁琐并且会涉及到大量的内存占用 , 而且有一些常用的内存页存在 , 其实是没有必要的 , 因此出现了寄存器 , 存储在 CPU 内部 。
认识寄存器寄存器的官方叫法有很多 , Wiki 上面的叫法是 Processing Register ,也可以称为CPU Register , 计算机中经常有一个东西多种叫法的情况 , 反正你知道都说的是寄存器就可以了 。
认识寄存器之前 , 我们首先先来看一下 CPU 内部的构造 。
爱了爱了,这篇寄存器讲的有点意思文章插图
CPU 从逻辑上可以分为 3 个模块 , 分别是控制单元、运算单元和存储单元 , 这三部分由 CPU 内部总线连接起来 。
几乎所有的冯·诺伊曼型计算机的 CPU , 其工作都可以分为5个阶段:「取指令、指令译码、执行指令、访存取数、结果写回」 。

  • 取指令阶段是将内存中的指令读取到 CPU 中寄存器的过程 , 程序寄存器用于存储下一条指令所在的地址
  • 指令译码阶段 , 在取指令完成后 , 立马进入指令译码阶段 , 在指令译码阶段 , 指令译码器按照预定的指令格式 , 对取回的指令进行拆分和解释 , 识别区分出不同的指令类别以及各种获取操作数的方法 。
  • 执行指令阶段 , 译码完成后 , 就需要执行这一条指令了 , 此阶段的任务是完成指令所规定的各种操作 , 具体实现指令的功能 。
  • 访问取数阶段 , 根据指令的需要 , 有可能需要从内存中提取数据 , 此阶段的任务是:根据指令地址码 , 得到操作数在主存中的地址 , 并从主存中读取该操作数用于运算 。
  • 结果写回阶段 , 作为最后一个阶段 , 结果写回(Write Back , WB)阶段把执行指令阶段的运行结果数据写回到 CPU 的内部寄存器中 , 以便被后续的指令快速地存取;
计算机架构中的寄存器寄存器是一块速度非常快的计算机内存 , 下面是现代计算机中具有存储功能的部件比对 , 可以看到 , 寄存器的速度是最快的 , 同时也是造价最高昂的 。
爱了爱了,这篇寄存器讲的有点意思文章插图
我们以 intel 8086 处理器为例来进行探讨 , 8086 处理器是 x86 架构的前身 。 在 8086 后面又衍生出来了 8088。
在 8086 CPU 中 , 地址总线达到 20 根 , 因此最大寻址能力是 2^20 次幂也就是 1MB 的寻址能力 , 8088 也是如此 。
在 8086 架构中 , 所有的内部寄存器、内部以及外部总线都是 16 位宽 , 可以存储两个字节 , 因为是完全的 16 位微处理器 。 8086 处理器有 14 个寄存器 , 每个寄存器都有一个特有的名称 , 即
「AX , BX , CX , DX , SP , BP , SI , DI , IP , FLAG , CS , DS , SS , ES」
这 14 个寄存器有可能进行具体的划分 , 按照功能可以分为三种
  • 通用寄存器
  • 控制寄存器
  • 段寄存器
下面我们分别介绍一下这几种寄存器
通用寄存器通用寄存器主要有四种, 即 「AX、BX、CX、DX」 同样的 , 这四个寄存器也是 16 位的 , 能存放两个字节 。 AX、BX、CX、DX 这四个寄存器一般用来存放数据 , 也被称为 数据寄存器 。 它们的结构如下