一個典型的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
```