8086微处理器中包含4个通用寄存器、4个指针和变址寄存器、4个段寄存器、1个标志寄存器和1个指令指针。
1、通用寄存器
通用寄存器组包括4个16位的寄存器AX、BX、CX、DX。它们即可以作为16为寄存器使用,也可以分为两个8位寄存器使用,即高8位寄存器AH、BH、CH、DH和低8位寄存器AL、BL、CL、DL。这些数据寄存器既可以作为算术、逻辑运算的源操作数,向ALU提供参与运算的原始数据,也可以作为目标操作数,保存运算的中间结果或最后结果。在有些指令中,这些寄存器具有特定的用途:
AX:累加器
BX:基址寄存器
CX:计数寄存器
DX:数据寄存器
2、指针及变址寄存器
指针及变址寄存器包括两个指针寄存器SP(stack pointer)、BP(base pointer)和两个变址寄存器SI(sourse index)、DI(destination index)。这组寄存器通常用来存放存储器单元的16位偏移地址(即相对于段起始地址的距离,简称偏移地址)。
1)指令指针:在8086微处理器内存中有一个按照“先进后出”原则进行数据操作的区域,称为堆栈。CPU对堆栈的操作有两种,压入(PUSH)操作和弹出(POP)操作。在进行堆栈操作的过程中,SP用来指示堆栈栈顶的偏移地址,称为堆栈指针;而BP则用来存放位于堆栈段中的一个数据区的“基址”的偏移量,称为基址指针。
2)变址寄存器:SI、DI称为变址寄存器,它们用来存放当前数据所在存储单元的偏移地址。在串操作指令中,SI用来存放源操作数地址的偏移量,称为源变址寄存器;DI用来存放目标操作数地址的偏移量,称为目的变址寄存器。
3、段寄存器(segment registers)
在8086微处理器中有4个16位的段寄存器,这些寄存器指明了一个特定的现行段,用来存放各段的段基址,当用户指令设定了它们的初始值后,实际上已经确定了一个64KB的存储区段
代码段寄存器 CS(code segment):用来存放当前使用的代码段的段基址,用户编制的程序必须存放在代码段中,CPU将会依次从代码段取出指令代码并执行
数据段寄存器 DS(data segment):用来存放当前使用的数据段的段基址,程序运行所需要的原始数据以及运算的结果应存放在数据段中
附加段寄存器 ES(extra segment):用来存放当前使用的附加段的段基址,它通常也用来存放数据,在执行数据串操作指令时,用来存放目标数据串(此时DS用来存放源数据串)
堆栈段寄存器 SS(stack segment):用来存放当前使用的堆栈段的段基址,所有堆栈操作的数据均保存在这个段中
4、指令指针
指令指针IP为16位寄存器,IP的内容总是指向BIU(总线接口部件)将要取的下一条指令代码的16位偏移地址,当取出1字节指令代码后,IP自动加1并指向下一条指令代码的偏移地址。它的内容是由BIU来修改的,用户不能通过指令预置或修改IP的内容,但有些指令的执行可以修改它的内容,也可以将其内容压入堆栈或由堆栈中弹出。
5、标志寄存器
8086微处理器中有一个16位的标志寄存器(FR),但只使用了9位。其中6位为状态标志位,用来反映算术运算或逻辑运算结果的状态;3位为控制位,用来控制CPU的操作
1)状态标志位
CF(carry flag):进位标志。表示本次加法或减法运算中最高位(或
)产生进位或借位的情况。CF=1表示有进位,CF=0表示无进位(减法运算时表示借位的情况)
PF(parity flag):奇偶校验位。表示本次运算结果低8位中包含1的个数。PF=1表示有偶数个1,PF=0表示有奇数个1
AF(auxiliary carry flag):辅助进位标志。表示参加加法或减法运算中位向
位产生进位或借位的情况。AF=1表示有进位,AF=0表示无进位(减法时表示借位情况)
ZF(zero flag):零标志。表示当前的运算结果是否为0。ZF=1表示运算结果为0,ZF=0表示运算结果不为0
SF(sign flag):符号标志。表示运算结果的正、负情况。SF=1表示运算结果为负,SF=0表示运算结果为正
OF(overflow flag):溢出标志。表示运算结果中产生溢出的情况。OF=1表示当前正在进行的补码运算有溢出,OF=0表示无溢出。
2)控制标志位
DF(direction flag):方向标志。用来设定和控制字符串操作指令的步进方向。DF=1时,串操作过程中地址会自动递减1,DF=0时,地址自动递增1
IF(interrupt enable flag):中断允许标志。用来控制可屏蔽中断的标志位。IF=1时,开中断,CPU可以接受可屏蔽中断的请求,IF=0时,CPU不能接受可屏蔽中断请求。
TF(trap flag):单步标志。用来控制CPU进入单步方式。TF=1时,CPU处于单步工作方式,每执行一条指令就自动产生一次内部中断,TF=0时,CPU不能以单步方式工作。