运算器为微处理器提供了处理数据的能力,除此之外微处理器还需要具备暂存数据的能力,这就要依靠微处理器中的寄存器了。
在微处理器中,寄存器是一组能够被以非常快的速度来访问的存储单元,用来暂存正在被微处理器处理的数据,包括那些即将被送到运算器中处理的数据和运算器运算得到的处理结果。受限于芯片的集成度,早期的微处理器通常只有少数几个寄存器,而且这些寄存器通常都是具有专门用途的专用寄存器。比如6502微处理器只有6个寄存器,而且都是专用寄存器:累加器A、变址寄存器X和Y、状态寄存器、程序计数器PC和堆栈指针SP。在这些寄存器中,累加器A是唯一被用来执行算术指令的寄存器,也是使用最频繁的寄存器,6502指令集中很大一部分指令都必须使用累加器A作为其操作数。这种寄存器结构被称作“累加器结构”。早期微处理器中的寄存器通常使用触发器构建,其目的是为了提高寄存器的访问速度,从而提高微处理器整体的性能。
随着微电子技术的进步和芯片集成度的不断提高,尤其是RISC技术引起的微处理器设计思想上的重大变革,微处理器中的寄存器数量不断增加,并且出现了寄存器之间可以互相替代的通用寄存器结构。这种结构的微处理器通常包括一组功能上相同的可以互相替代的多个寄存器,这些寄存器通过寄存器名或寄存器索引来访问,指令显式指明其所使用的操作数在哪个寄存器之中。通用寄存器结构在编译优化、指令级并行处理等方面具有累加器结构所不可比拟的优势,在现代微处理器设计中被广泛采用。
除了累加器结构和通用寄存器结构之外,堆栈结构的寄存器组织也是另外一种常见的寄存器结构,但由于其效率相对比较低,难以实现指令级的并行处理,在目前的微处理器设计中已经比较少见了。在使用通用寄存器结构或堆栈结构的微处理器中,由于需要实现的寄存器数量比较多,在设计时经常将这些寄存器组成为寄存器堆或者寄存器文件的形式来实现。
在现代微处理器设计中,寄存器这个名词更多地被用来意指由一个指令之输出或输入可以直接索引到的寄存器组群,也就是一个微处理器的指令集中所定义的寄存器集合,又可以称其为“架构寄存器”。微处理器中实际实现的寄存器数量可能远远大于架构寄存器中所规定的数量,并通过寄存器映射、寄存器重命名等技术实现架构寄存器与实际寄存器之间的映射关系,从而提高微处理器的性能,并保持架构和指令集上的向下兼容。
由于设计于寄存器结构从累加器结构向通用寄存器结构过渡的年代,8086微处理器采用了一种通用寄存器结构和累加器结构混合的寄存器结构。8086微处理器设计了14个寄存器,这14个寄存器又可以分成4组:通用寄存器4个及专用寄存器4个,段寄存器4个,程序指针1个和状态寄存器1个。其中4个段寄存器和程序指针通常被认为是总线接口部件BIU的一部分,而通用寄存器、专用寄存器和状态寄存器则属于EU。
8086的4个16位通用寄存器分别被命名为AX、BX、CX、DX,可以将其高低字节分成两个8位的寄存器分别使用,命名为AH、AL、BH、BL、CH、CL、DH和DL。这四个16位寄存器在通用的功能之外还有如下特点。
●AX:具备累加功能,可以作为16位累加器使用,AL可以作为8位累加器使用。
●BX:在基址变址寻址的时候作为基址寄存器使用。
●CX:在循环类指令与字符串处理指令执行中作为默认的计数器寄存器使用。
●DX:在双字长运算(如整数乘法和除法)时用来存放高16位数据。
除上述4个通用寄存器外,8086/8088还包括4个16位的专用寄存器,它们是SI、DI、SP和BP:
●SI:源变址寄存器(Source Index),在间接寻址时,作为地址寄存器或变址寄存器使用;在字符串处理命令中,和数据段寄存器DS配合作为源变址寄存器使用。
●DI:目的变址寄存器(Destination Index),在间接寻址时,作为地址寄存器或变址寄存器使用;在字符串处理指令中,和附加段寄存器ES配合作为目的变址寄存器使用。
●SP:堆栈指针寄存器(Stack Pointer),用来指出在存储器中开辟的堆栈的顶部偏移地址,又称栈顶偏移地址,一般和堆栈段寄存器SS配合使用。
●BP:基地址指针寄存器(Base Pointer),在间接寻址时用作基地址寄存器,多与堆栈段寄存器SS配合使用。
8086的标志寄存器FLAGS被设计为一个16位的寄存器,其不同的位代表不同的处理器状态标志,如图2-10所示。(www.xing528.com)
图2-10 标志寄存器
8086的标志寄存器中的标志位可以被分成两类:其中一类用来记录程序中运行结果的状态信息,根据有关指令的运行结果由CPU自动设置。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码标志。条件码标志包括:
●进位标志CF(Carry Flag),记录运算时最高有效位产生的进位值,若计算时最高位出现进位或借位时,CF置1。
●符号标志SF(Sign Flag),记录运算结果的符号。结果为负时置1,否则置0。SF又称作负标志位。
●零标志ZF(Zero Flag),运算结果为0时ZF位置1,否则置0。
●溢出标志OF(Overflow Flag),在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。
●辅助进位标志AF(Auxiliary Carry Flag),记录运算时第3位(半个字节)产生的进位值,即如运算中低四位产生进位或借位时,该标志置1。AF主要用于BCD编码的十进制运算调整。
●奇偶标志PF(Parity Flag),用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。PF又称作偶标志位。除了条件码标志之外,8086还有3位控制标志位:
●方向标志DF(Direction Flag),用于在串处理指令中控制处理信息的方向。当DF=1时,串处理从高地址向低地址方向处理。当DF=0时,串处理就从低地址向高地址方向处理。
●陷阱标志TF(Trap Flag),用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。
●中断标志IF(Interrupt Flag),用于控制可屏蔽硬件中断。当IF=1时,允许8086微处理器响应中断请求,否则关闭中断。又称中断屏蔽标志。
8086提供了设置某些状态信息的指令,如STI、CLI等。必要时,程序员可使用这些指令来建立和修改状态寄存器中的状态位。
其后,在80386使X86系列微处理器进入32位时代之后,X86微处理器的寄存器架构也升级到了32位,16位的AX、BX、CX和DX寄存器升级为了32位的EAX、EBX、ECX和EDX,与此同时,SI、DI和BP升级为ESI、EDI和EBP,IP也升级为EIP,并且增加了FS、GS段寄存器。而且这些32位寄存器的低16位仍然可以作为16位的AX、BX、CX和DX(和AH/AL、BH/BL、CH/CL、DH/DL 8位寄存器),16位的SI、DI、BP、IP等寄存器使用,以保持80386寄存器架构与8086的向下兼容。
在微处理器的各部件之间,如寄存器之间、寄存器与运算器之间、寄存器与外部总线接口之间经常需要传送数据,这就要求微处理器内部为这种数据传递提供数据通路。微处理器中的数据通路设计关系到微处理器内部的数据能否顺畅流动,对于提高微处理器的处理性能至关重要。在早期的微处理器中,数据通路经常使用总线型结构,所以又被称作内部数据总线。内部数据总线的宽度通常与寄存器、运算器的宽度一致。随着微电子技术的进步和微处理器性能的提高,微处理器内部的数据通路越来越多地使用交换星型和网型的结构,借以提高微处理器内部的数据传递能力。
除了运算器、寄存器以及数据通路之外,控制电路也是8086微处理器中EU的重要组成部分之一。EU控制电路首先从指令队列中读取指令并对其进行译码,然后根据不同指令的功能产生出需要的控制信号,控制各相关部件的动作。EU控制电路和BIU中的输入/输出控制电路一起组成了8086微处理器的控制电路。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。