运算器的结构
扫描二维码
随时随地手机看文章
运算器包括寄存器、执行部件和控制电路3个部分。在典型的运算器中有3个寄存器:接收并保存一个操作数的接收寄存器;保存另一个操作数和运算结果的累加寄存器;在进行乘、除运算时保存乘数或商数的乘商寄存器。执行部件包括一个加法器和各种类型的输入输出门电路。控制电路按照一定的时间顺序发出不同的控制信号,使数据经过相应的门电路进入寄存器或加法器,完成规定的操作。
为了减少对存储器的访问,很多计算机的运算器设有较多的寄存器,存放中间计算结果,以便在后面的运算中直接用作操作数。为了提高运算速度,某些大型计算机有多个运算器。它们可以是不同类型的运算器,如定点加法器、浮点加法器、乘法器等,也可以是相同类型的运算器。运算器的组成决定于整机的设计思想和设计要求,采用不同的运算方法将导致不同的运算器组成。但由于运算器的基本功能是一样的,其算法也大致相同,因而不同机器的运算器是大同小异的。运算器主要由算术逻辑部件、通用寄存器组和状态寄存器组成。
1、算术逻辑部件ALU。ALU 主要完成对二进制信息的定点算术运算、逻辑运算和各种移位操作。算术运算主要包括定点加、减、乘和除运算。逻辑运算主要有逻辑与、逻辑或、逻辑异或和逻辑非操作。移位操作主要完成逻辑左移和右移、算术左移和右移及其他一些移位操作。某些机器中,ALU 还要完成数值比较、变更数值符号、计算操作数在存储器中的地址等。可见,ALU 是一种功能较强的组合逻辑电路,有时被称为多功能发生器,它是运算器组成中的核心部件。ALU 能处理的数据位数(即字长)与机器有关。如 Z80单板机中,ALU 是 8 位;IBM PC/XT和 AT 机中,ALU 为 16 位;386 和 486微机中,ALU 是 32 位。ALU 有两个数据输入端和一个数据输出端,输入输出的数据宽度(即位数)与 ALU 处理的数据宽度相同。
2、通用寄存器组设计的机器的运算器都有一组通用寄存器。它主要用来保存参加运算的操作数和运算的结果。早期的机器只设计一个寄存器,用来存放操作数、操作结果和执行移位操作,由于可用于存放重复累加的数据,所以常称为累加器。通用寄存器均可以作为累加器使用。通用寄存器的数据存取速度是非常快的,一般是十几个毫微秒(μs)。如果 ALU 的两个操作数都来自寄存器,则可以极大地提高运算速度。通用寄存器同时可以兼作专用寄存器,包括用于计算操作数的地址(用来提供操作数的形式地址,据此形成有效地址再去访问主存单元)。例如,可作为变址寄存器、程序计数器(PC)、堆栈指示器(SP)等。必须注意的是,不同的机器对这组寄存器使用的情况和设置的个数是不相同的。
3、状态寄存器状态寄存器用来记录算术、逻辑运算或测试操作的结果状态。程序设计中,这些状态通常用作条件转移指令的判断条件,所以又称为条件码寄存器。一般均设置如下几种状态位:1)零标志位(Z):当运算结果为 0 时,Z 位置“1”;非 0 时,置“0”;2)负标志位(N):当运算结果为负时,N 位置“1”;为正时,置“0”;3)溢出标志位(V):当运算结果发生溢出时,V 位置“1”;无溢出时,置“0”;4)进位或借位标志(C):在做加法时,如果运算结果最高有效位(对于有符号数来说,即符号位;对无符号数来说,即数值最高位)向前产生进位时,C 位置“1”;无进位时,置“0”。在做减法时,如果不够减,最高有效位向前有借位(这时向前无进位产生)时,C 位置“1”;无借位(即有进位产生)时,C 位置“0”。除上述状态外,状态寄存器还常设有保存有关中断和机器工作状态(用户态或核心态)等信息的一些标志位(应当说明,不同的机器规定的内容和标志符号不完全相同),以便及时反映机器运行程序的工作状态,所以有的机器称它为“程序状态字”或“处理机状态字”(Processor Status Word,PSW )。