问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

寄存器(CPU工作原理)

创作时间:
作者:
@小白创作中心

寄存器(CPU工作原理)

引用
CSDN
1.
https://m.blog.csdn.net/weixin_74144099/article/details/136556503

本文主要介绍了CPU中的寄存器工作原理,包括通用寄存器、字在寄存器中的存储、汇编指令、物理地址、16位结构的CPU、8086CPU给出物理地址的方法、段的概念、段寄存器、CS和IP、修改CS、IP的指令以及代码段等内容。

一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

1. 通用寄存器

8086CPU所有的寄存器都是16位的,可以存放两个字节。

AX、BX、CX、DX 通常用来存放一般性数据被称为通用寄存器。

8086上一代CPU中的寄存器都是8位的;

为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用。

  • AX可以分为AH和AL;
  • BX可以分为BH和BL;
  • CX可以分为CH和CL;
  • DX可以分为DH和DL。

AX的低8位(0位7位)构成了AL寄存器,高8位(8位15位)构成了AH寄存器。

AH和AL寄存器是可以独立使用的8位寄存器。

2. 字在寄存器中的存储

一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。

3. 几条汇编指令

注:汇编指令不分大小写

4. 物理地址

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

我们将这个唯一的地址称为物理地址。

5. 16位结构的CPU

概括的讲,16位结构描述了一个CPU具有以下几个方面特征:

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

6. 8086CPU给出物理地址的方法

8086有20位地址总线,可传送20位地址,寻址能力为1M。

但8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。

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

当8086CPU要读写内存时:

1)CPU中的相关部件提供两个16 位的地址,一个称为段地址,另一个称为偏移地址;

2)段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;

3)地址加法器将两个16位地址合成为一个20位的物理地址;

4)地址加法器通过内部总线将20位物理地址送入输入输出控制电路;

5)输入输出控制电路将20位物理地址送上地址总线;

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

地址加法器采用物理地址=段地址x16+偏移地址的方法用段地址和偏移地址合成物理地址。例如,8086CPU要访问地址为123C8H的内存单元,此时,地址加法器的工作过程如图所示(图中数据皆为十六进制表示)。

7. 段的概念

在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。

注意:

1)段地址×16 必然是 16的倍数,所以一个段的起始地址也一定是16的倍数;

2)偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K。

8. 段寄存器

段寄存器就是提供段地址的。8086CPU有4个段寄存器:CS、DS、SS、ES

当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。

9 . CS和IP

CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。

CS为代码段寄存器;IP为指令指针寄存器。

在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。

工作流程:

(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;

(2)IP = IP + 所读取指令的长度,从而指向下一条指令;

(3)执行指令。 转到步骤 (1),重复这个过程。

在 8086CPU 加电启动或复位后( 即 CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H。

即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行。

FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。

10. 修改CS、IP的指令

在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。

CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。

同时修改CS、IP的内容:

jmp 段地址:偏移地址

jmp 2AE3:3

jmp 3:0B16

功能:用指令中给出的段地址修改CS,偏移地址修改IP。

仅修改IP的内容:

jmp 某一合法寄存器

jmp ax (类似于 mov IP,ax)

jmp bx

功能:用寄存器中的值修改IP。

案例分析:

内存中存放的机器码和对应汇编指令情况: (初始:CS=2000H,IP=0000H)

(1)mov ax,6622

(2)jmp 1000:3

(3)mov ax,0000

(4)mov bx,ax

(5)jmp bx

(6)mov ax,0123H

(7)转到第(3)步执行

11. 代码段

对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。

可以将长度为 N( N≤64KB )的一组代码,存在一组地址连续、起始地址为 16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。

当我们要执行该代码段时,只需将CS:IP指向所定义的代码段中的第一条指令的首地址。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号