寄存器(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执行其中的内容。