It's our wits that make us men.

2019/4/1 寄存器(CPU的工作原理)

Posted on By LuLu

寄存器(CPU的工作原理)

0.引言

  • CPU由运算器、控制器、寄存器 等器件组成,靠内部总线相连。
  • 内部总线实现CPU内部各器件之间的联系;外部总线实现CPU和主板上其他器件的联系。
  • 在CPU中:
    • 运算器进行信息处理;
    • 寄存器进行信息存储;
    • 控制器控制各种器件进行工作;
    • 内部总线连接各种器件在它们之间进行数据的传送。

1.通用寄存器

  • 8086有14个寄存器: AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、CS、ES、PSW。
  • AX、BX、CX、DX通常用来存放一般性数据,被称为通用寄存器。
  • 16位寄存器所能存储的数据最大值为2^16^-1 。
  • 为保证兼容性,8086 CPU的通用寄存器可以分为两个独立的8位寄存器使用。例: AX可分为AH和AL。

2.字在寄存器中的存储

  • 8086 CPU所有的寄存器是16位,可以存放2个字节(一个字)。
  • 一字节由8 bit 组成,可以存在8位寄存器中。
  • 字(word)是两字节,16位

3. 物理地址

  • 所有的内存单元构成一个一维的线性存储空间。
  • CPU访问内存单元时要给出内存单元的唯一地址就是物理地址。

4.16位结构的CPU

  • 运算器一次最多可以处理16位数据。
  • 寄存器的最大宽度为16位。
  • 寄存器和运算器之间的通路是16位。

5.8086 CPU给出物理地址的方法

  • 8086有20位的地址总线,可以传送20位地址,寻址能力为1M;但8086内部为16位结构,只能传送16位的地址。

  • 8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。

  • 8086CPU读写内存的步骤: 1、CPU中的相关部件提供段子和偏移地址这两个16位的地址; 2、段地址和偏移地址通过内部总线送入到一个称为地址加法器的部件; 3、地址加法器将两个16位地址合并成一个20位的地址; 4、地址加法器通过内部总线将20位物理地址送送入输入输出地址; 5、输入输出控制电路将20位物理地址送上地址总线;

    6、20位物理地址被地址总线传送到存储器。

  • 地址加法器工作原理:物理地址=段地址*16+偏移地址。

6.段寄存器

8086 CPU有4个段寄存器:CS(代码段)、DS(数据段)、SS(堆栈段)、ES(附加段),这4个段提供给8086CPU内存单元的段地址。

7.CS和IP

  • CS(代码段寄存器) 和IP(指令指针寄存器) 是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。在任意时刻CPU将CS:IP指向的内容当作指令执行。
  • 8086CPU工作过程的简要概述:
    • 从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;8086PC机刚开始启动时,CPU从内存FFFF0h单元中读取指令执行,FFFF0h单元中的指令时8086PC机开机后执行的第一条指令。
    • IP=IP+所读取指令的长度,从而正确的指向下一条指令;
    • 执行指令。转到步骤1,周而复始。

8.修改CS、IP的指令

  • mov指令(传送指令)可以改变8086CPU大部分寄存器的值,但不能用于设置CS、IP的值。

  • jmp指令(转移指令)可以用来同时修改CS和IP的值,格式为

    jmp 段地址:偏移地址;同时修改CS和IP jmp 某一合法寄存器;则是仅修改IP

9.代码段

  • 对于8086PC机,在编程时可以将长度为N(N小于等于64KB)的一组代码存在一组地址连续、起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。
  • 利用CS:IP来指向内存单元从而让CPU执行其中的内容。