一个典型的CPU(此处讨论的不是某一具体的CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连。
前一章所说的总线,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。简单地说,在CPU中:
* 运算器进行信息处理;
* 寄存器进行信息存储;
* 控制器控制各种器件进行工作;
* 内部总线连接各种器件,在它们之间进行数据的传送。
对于一个汇编程序员来说, CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。不同的CPU,寄存器的个数、结构是不相同的。8086CPU有14个寄存器,每个寄存器有一个名称
寄存器(缓存) cpu内部信息存储单元(简单的讲是cpu中可以存储数据的器件)
一个cpu中有多个寄存器,如:8086cpu有14个寄存器
* **通用寄存器**(存放一般性数据):AX、BX、CX、DX
* **变址寄存器**:SI、DI
* **指针寄存器**:SP(栈顶指针寄存器)、BP
* **指令指针寄存器**:IP
* **段寄存器**():CS(代码段寄存器)、SS(栈段寄存器)、DS(数据段寄存器)、ES(附加段寄存器)
* **标志寄存器**:PSW


共性:
8086cpu所有的寄存器都是16位的,可以存放两个字节
一个16位的寄存器存储一个16位的数据
他存储的最大值为2^16-1即65536-1进制为FFFFH(H表示16进制)
例子1:
在AX中存储18D(D表示10进制)
换成16进制为12H
换成2进制为10010B(B表示2进制)

例子2:
在AX中存储20000
换成16进制为4E20H
换成2进制为0100111000100000B

问题:8086上一代cpu中的寄存器都是8位的,如何保证程序的兼容性?
方案:通用的寄存器均可以分为两个独立的8位寄存器使用(细化:AX可以分为高八位AH和低八位AL)
AX的低8位(0位-7位)构成了AL寄存器,高8位(8位-15位)构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器。下图展示了16位寄存器及它所分成的,两个8位寄存器的数据存储的情况。

转成16位后4E保存在高八位,20保存在低八位

想一想,一个8位寄存器所能存储的数据的最大值为多少?2^8-1=255
由AX可以分为AH和AL
同理:
BX可以分为BH和BL
CX可以分为CH和CL
DX可以分为DH和DL
8086是16位cpu
8086的字长为16bit
80386的字长为32bit


## **用法举例**
### **es附加段寄存器**
```
assume cs:code
code segment
mov ax,0ffffH
mov ds,ax # (ds)=ffffH
mov ax,0020H
mov es,ax # 附加段寄存器(es)=0020H
mov bx,0
mov cx,12
s:mov dl,[bx] #(ffff:0)=(dl)=EAH即(dx)=00EAH
mov es:[bx],dl #(0020:0)=00EAH
inc bx #bx累加
loop s
mov ax,4c00H
int 21H
code ends
end
```
