8086的寄存器结构
从图2.1中可以看到,8086内含14个16位寄存器。下面分五方面加以介绍。
1.通用寄存器
图2.1中的Ax、BX、CX和DX是4个16位的通用寄存器。为了能处理字节数据,这4个寄存器都可看成由2个8位寄存器组成,它们可单独使用。例如,AX可看成由高8位寄存器AH和低8位寄存器AL组成。在编程时,通用寄存器既可作为源操作数(其内容作为参与运算的数),又可作为目的操作数(用来存放运算结果)。
2.指针和变址寄存器
图2.1中的SP和BP同属指针寄存器。sP就是第一章讲到的栈指针寄存器,用来指示栈顶的位置。由于堆栈是作为一个段出现的,所以SP的内容是栈顶单元在现行堆栈段中的段内偏移量。BP为变址指针。图2.1中的SI和DI同属变址寄存器。SI称为源操作数变址寄存器,DI称为目的操作数变址寄存器。BP、SI和DI都是为提供多种寻址方式而设置的。
所谓“寻址方式”,是指在指令中往往不直接给出操作数的地址,而是给出形成操作数地址的有关信息,执行指令时需要利用这些信息来形成操作数地址。例如,对于指令“MOV AX,[SI+2]”,源操作数地址的段地址是段寄存器DS的当前内容,而源操作数地址的段内偏移量
是SI的当前内容加2所得的结果。这一条指令的功能是读取从上述逻辑地址开始的两个相邻存储单元的内容赋给AX(低位地址存储单元的内容赋给AL,高位地址存储单元的内容赋给AH)。
3.段寄存器
段寄存器在上面已做介绍,它们是Cs、Ds、sS和Es。前面提到一个程序中可以设置几个数据段,对其他类型的段也是如此,可以设置多个段,但一段时间内只能使用其中的一个。
要用到某个段,只需将该段的段地址送到相应的段寄存器中。因此,4个段寄存器保存着各自现行段(即现在正在使用的段)的段地址。
4.指令指针
图2.1中位于BIu部分的IP寄存器称为指令指针,它与第一章讲的指令计数器有相似之处,但有所不同。指令计数器用来形成下一条要执行的指令的地址,当时没有考虑指令流水线操作,要执行的指令需要从存储器中现取。8086采用指令流水线操作方式,指令采用预取机制,IP指向下一条待取的指令,即IP中存储了下一条待取指令的地址,确切地说,存储着下一条待取指令在现行代码段中的偏移量。取出的指令被送入指令队列。指令队列中的指令只有在到达队列的最前端,才能被送往Eu执行。
5.标志寄存器
标志寄存器也是16位,但只使用了其中的9位,如图2.6所示。

这9个标志位可分为两类:一类反映指令执行的重要特征,为状态标志;另一类用于控制微处理器的操作,为控制标志。
1)状态标志位
①进位标志位(CF):指出该指令是否在最高位产生了进位或借位。
②辅助进位标志位(AF):对字节操作指令,反映该指令在执行时低4位是否产生了向高4位的进位或借位;对字操作指令,反映该指令在执行时低字节是否产生了向高字节的进位或借位。
③溢出标志位(OF):反映该指令的运算结果是否超出范围。
④零标志位(zF):反映该指令的运算结果是否为0。
⑤奇偶标志位(PF):表示该指令的运算结果的低8位“1”的个数是否为偶数。
⑥符号标志位(sF):反映该指令的运算结果符号位的状态。
2)控制标志位
①方向标志位(DF):控制串操作指令的地址变化的方向,即每一次操作后地址是增大还是减小。
②中断允许标志位(IF):控制是否允许响应可屏蔽中断请求。IF为1时,允许响应。
③跟踪标志位(TF):该标志位是为方便程序调试而设置。将TF置1,可使微处理器进入单步执行方式。所谓“单步执行”,是指cPu每执行一条指令后产生一个内部中断,表现形式为程序暂停下来。此时,用户可以检查机器的当前状态,如有关寄存器的内容、存储单元的内容以及标志寄存器的内容等,检查是否达到指令的预期目的。单步执行是调试程序最有效的方法。