第2章 寄存器
典型的CPU由 运算器、控制器、寄存器等器件构成。
器件靠内部总线相连。
- 运算器进行信息处理;
- 寄存器进行信息存储;
- 控制器控制各种器件进行工作
- 内部总线连接各种器件,在他们之间进行数据的传送。
寄存器是CPU中 程序员可以用指令读写的部件。
2.1 通用寄存器
8086CPU所有寄存器都是16位的,可以存放两个字节。
AX、BX、CX、DX4个寄存器通常用来存放一般性的数据,称为通用寄存器。
例如AX:
2.2 字在寄存器中的存储
8086CPU可以一次性处理两种尺寸的数据。
- 字节:byte,8个bit; 8位寄存器中;
- 字:word,两个字节; 高位字节、低位字节。
H、B
2.3 几条汇编指令
- 汇编指令,不区分 大小写;
- 注意指令的两个操作对象的位数应但是一致的;
2.4 物理地址
所有的内存单元构成的存储空间是一个一维的线性空间
每一个内存单元在这个空间中都有唯一的地址,称为 物理地址。
CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址;
在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址;
不同CPU由不同的形成物理地址的方式;
2.5 16位结构的CPU
n位结构,描述了一个CPU具有下面的结构特性:
- 运算器一次最多可以处理n位数据;
- 寄存器最大宽度是 n位;
- 寄存器和运算器之间的通路是 n 位;
能一次性处理、传输、暂时存储信息的最大长度是 n 位。
2.6 8086CPU给出物理地址的方法
8086CPU采用一种在内部用两个16位地址合成的方法形成一个20位的物理地址。
地址加法器采用: 物理地址=段地址*16+偏移地址 的方法用端地址和便宜地址合成物理地址。
2.7 “段地址*16+偏移地址=物理地址”的本质含义
两个 低位 计算出 高位
2.8 段的概念
2.9 段寄存器
8086CPU有 4 个段寄存器:CS、DS、SS、ES;
2.10 CS和IP
CS位代码段寄存器; IP为指令指针寄存器;
例如:CS为M, IP为N, cpu将从内存 M*16 + N 内存单元,读取一条指令并执行。
8086CPU工作过程简要描述:
1、从CP:IP指向的内存单元 读取指令, 读取的指令进入指令缓冲器;
2、IP=IP+所读取指令的长度,从而指向下一条指令;
3、执行指令。 转到(1),重复;
区分内存或指令:将CS:IP 指向的内存单元中的内容看作指令;
2.11 修改CS、IP的指令
程序员能够 用指令读写的部件只有 寄存器;
程序员可以通过改变寄存器中的内容实现对CPU的控制;
CPU从何处执行指令是由CS、IP中的内容决定的;程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令;
修改寄存器的值: mov ax,123;等等
但是mov指令不能用于设置 CS、IP的值;有另外的指令:jmp
jmp 段地址:偏移地址
例如: jmp 2AE3:3, CS=2AE3H, IP=0003H; CPU将从2AE33H处读取指令。
若只想修改IP的内容: jmp 某一合法寄存器; jmp ax, 含以上好似:mov IP, ax
2.12 代码段
将一组内存单元定义为一个段,用来存放代码,从而定义了一个代码段;
将代码段中的指令被执行:
CPU只认被 CS:IP指向的内存单元中的内容为指令。
所以必须 要将CS:IP指向所定义的代码段中的第一条指令的首地址;
比如,一段代码存放在 123B0H - 123B9H; 可设 CS=123BH、IP=0000H