运算器的功能
扫描二维码
随时随地手机看文章
运算器的基本功能是完成对各种数据的加工处理,例如算术四则运算,与、或、求反等逻辑运算,算术和逻辑移位操作,比较数值,变更符号,计算主存地址等。运算器中的寄存器用于临时保存参加运算的数据和运算的中间结果等。运算器中还要设置相应的部件,用来记录一次运算结果的特征情况,如是否溢出,结果的符号位,结果是否为零等。
计算机所采用的运算器类型很多,从不同的角度分析,就有不同的分类方法。从小数点的表示形式可分为定点运算器和浮点运算器。定点运算器只能做定点数运算,特点是机器数所表示的范围较小,但结构较简单。浮点运算器功能较强,既能对浮点数,又能对定点数进行运算,其数的表示范围很大,但结构相当复杂。从进位制方面分为二进制运算器和十进制运算器。一般计算机都采用二进制运算器,随着计算机广泛应用于商业和数据处理,越来越多的机器都扩充十进制运算的功能,使运算器既能完成二进制的运算,也能完成十进制运算。计算机中运算器需要具有完成多种运算操作的功能,因而必须将各种算法综合起来,设计一个完整的运算部件。
浮点运算器
1、浮点运算器的一般结构浮点运算可用两个松散连接的定点运算部件来实现:即阶码部件和尾数部件,浮点运算器的一般结构尾数部件实质上就是一个通用的定点运算器,要求该运算器能实现加、减、乘、除四种基本算术运算。其中三个单字长寄存器用来存放操作数:AC为累加器,MQ为乘商寄存器,DR为数据寄存器。AC和MQ连起来还可组成左右移位的双字长寄存器AC-MQ。并行加法器用来完成数据的加工处理,其输入来自AC和DR,而结果回送到AC。MQ寄存器在乘法时存放乘数,而除法时存放商数,所以称为乘商寄存器。DR用来存放被乘数或除数,而结果(乘积或商与余数)则存放在AC-MQ。在四则运算中,使用这些寄存器的典型方法如下:运算类别 寄存器关系加法AC+DR→AC减法AC-DR→AC乘法DR×MQ→AC-MQ除法AC÷DR→AC-MQ对阶码部件来说,只要能进行阶码相加、相减和比较操作即可。在图2-21中,操作数的阶码部分放在寄存器E1和E2,它们与并行加法器相连以便计算。浮点加法和减法所需要的阶码比较是通过E1-E2来实现的,相减的结果放入计数器E中,然后按照E的符号为决定哪一个阶码较大。在尾数相加或相减之前,需要将一个尾数进行移位,这是由计数器E来控制的,目的是使E的值按顺序减到0。E每减一次1,相应的尾数则向右移1位。一旦尾数高速完毕,它们就可按通常的定点方法进行处理。运算结果的阶码值仍放到计数器E中。
2、点协处理器,80x87是美国Intel公司为处理浮点数等数据的算术运算和多种函数计算而设计生产的专用算术运算处理器。由于它们的算术运算是配合80x86CPU进行的,所以又称为协处理器。我们以80x87为例来讨论浮点运算器部件的组成。浮点协处理器的主要功能如下:
(1) 可与配套的CPU芯片异步并行工作。80x87相当于386的一个I/O部件,本身有它自己的指令,但不能单独使用,它只能作为386主CPU的协处理器才能运算。因为真正的读写主存的工作不是80x87完成,而是由386执行的。如果386从主存读取的指令是80x87浮点运算指令,则它们以输出方式把该指令送到80x87,80x87接收后进行译码并执行浮点运算。在80x87进行运算期间,386可取下一条其他指令予以执行,因而实现了并行工作。如果在80x87执行浮点运算指令过程中386又取来一条80x87指令,则80x87以给出“忙”的标志信号加以拒绝,使386暂停向80x87发送命令。只有待80x87完成浮点运算而取消“忙”的标志信号以后,386才可以进行一次发送操作。
(2) 高性能的80位字长的内部结构,有8个80位字长的以堆栈方式管理的寄存器组。80x87从存储器取数和向存储器写数时,均用80位的临时实数和其他6种数据类型执行自动转换。全部数据在80x87中均以80位临时实数的形式表示。因此80x87具有80位的内部结构,并有八个80位字长以 “先进后出”方式管理的寄存器组,又称寄存器堆栈。这些寄存器可以按堆栈方式工作,此时,栈顶被用作累加器;也可以按寄存器的编号直接访问任一个寄存器。(3) 浮点数的格式,完全符合IEEE制定的国际标准。
(4) 能处理包括二进制浮点数、二进制整数和十进制数串三大类共7种数据。此7种数据类型在寄存器中表示如下:短整数(32位整数) S 31位 (二进制补码) 长整数(64位整数) S 63位 (二进制补码) 短实数(32位浮点数) S 指数 尾数(23位) 长实数(64位浮点数) S 指数 尾数(52位) 临时实数(80位浮点数) S 指数 尾数(64位) 十进数串(十进制18位) S -- d17d16 … d1d0。此处S为一位符号位,0代表正,1代表负。三种浮点数阶码的基值均为2。阶码值用移码表示,尾数用原码表示。尾数有32位、64位、80位三种。不仅仅是一个浮点运算器,还包括了执行数据运算所需要的全部控制线路,就运算部分讲,有处理浮点数指数部分的部件和处理尾数部分的部件,还有加速移位操作的移位器线路,它们通过指数总线和小数总线与八个80位字长的寄存器堆栈相连接。
(5) 内部的出错管理功能为了保证操作的正确执行,80x87内部还设置了三个各为16位字长的寄存器,即特征寄存器、控制字寄存器和状态寄存器。特征寄存器用每两位表示寄存器堆栈中每个寄存器的状态,即特征值为00-11四种组合时表明相应的寄存器有正确数据、数据为0、数据非法、无数据四种情况。控制字寄存器用于控制80x87的内部操作。其中PC为精度控制位域(2位):00为24位,01为备用,10为53位,11为64位。RC为舍入控制位域(2位):00为就近舍入,01朝-方向舍入,10朝+方向舍入,11朝0舍入。IC为无穷大控制位:该位为0时+与-作同值处理,该位为1时+与-不作同值处理。控制寄存器的低6位作异常中断屏蔽位:IM为非法处理,DM为非法操作数,ZM为0作除数,OM为上溢,UM为下溢,PM为精度下降。状态字寄存器用于表示80x87的结果处理情况,例如当“忙”标志为1时,表示正在执行一条浮点运算指令,为0则表示80x87空闲。状态寄存器的低6位指出异常错误的6种类型,与控制寄存器低6位相。当的控制寄存器位为0(未屏蔽)而状态寄存器位为1时,因发生某种异常错误而产生中断请求。
3.CPU内的浮点运算器,奔腾CPU将浮点运算器包含在芯片内。浮点运算部件采用流水线设计。指令执行过程分为8段流水线。前4段为指令预取(DF)、指令译码(D1)、地址生成(D2)、取操作数(EX),在U,V流水线中完成;后4段为执行1(X1)、执行2(X2)、结果写回寄存器堆(WF)、错误报告(ER),在浮点运算器中完成。一般情况下,由V流水线完成一条浮点操作指令。浮点部件内有浮点专用的加法器、乘法器和除法器,有8个80位寄存器组成的寄存器堆,内部的数据总线为80位宽。因此浮点部件可支持IEEE754标准的单精度和双精度格式的浮点数。另外还使用一种称为临时实数的80位浮点数。对于浮点的取数、加法、乘法等操作,采用了新的算法并用硬件来实现,其执行速度是80486的10倍多。