寄存器
一个典型的CPU中,往往由以下几个部分组成:
- 运算器进行信息处理
- 控制器控制各个器件进行工作
- 寄存器进行信息存储
- 内部总线连接各种器件
**对于一个汇编程序员而言,CPU中主要部件就是寄存器。**寄存器是程序员可以用指令读写的部件,程序员可以通过修改各种寄存器的值来实现对CPU的控制。
8086CPU中有14个寄存器
- 通用寄存器:AX,BX,CX,DX,SI,DI,SP,BP
- 特殊用途寄存器:IP,FLAGS
- 段寄存器:CS,SS,DS,ES
通用寄存器
用途
- AX:累加寄存器,常用于存储计算结果,如mul, div指令的最终结果,也常用于存储函数的返回值
- BX:基址寄存器,常用于存储基址(8086内存寻址方式相关内容)
- CX:计数器,常用于存储循环次数,函数长度等内容
- DX:数据寄存器,常用于存储运算过程中的数据
- SI:源变址寄存器,常用于存储源数据的地址中的变址部分
- DI:目的变址寄存器,常用于存储目的数据地址中的变址部分
- SP:堆栈指针,常用于指向栈顶
- BP:基址指针
这些通用寄存器均为16bit,仅有AX,BX,CX,DX这四个寄存器可以分为两个8bit寄存器。AX可以分为AH(High)和AL(Low),AH为高位字节,AL为低位字节,其余同AX。
数据在寄存器中的存储
在8086CPU中,可以一次性处理的数据有两种:
- 字节型数据(8bit)
- 字型数据(16bit)
这里主要讲字型数据的存储,以20000存储到AX中为例子
- 20000的二进制为 01001110 00100000
- 这里可以看到高8位和低8位,实际存储的时候,会将高8位存储在AH中,将低8位存储在AL中。
段寄存器
用途
在8086CPU计算物理地址的时候,需要提供两个16bit的地址:段地址,偏移地址。公式是:物理地址 = 段地址 16 + 偏移地址 的方式来计算出20bit的物理地址(详细部分在内存那一部分)。
那么我们可以清楚地知道,需要存储部件来存储段地址,这就是段寄存器的用途。