本章主要介绍运算算法和运算部件。主要包括:定点数运算(包括移位运算、扩展运算、加减运算、乘法运算、除法运算)、浮点数运算、算术逻辑单元ALU和快速加法器。

具体总结如下:

(1) 定点数运算:由专门的定点运算器实现

  ① 移位运算

  a) 逻辑移位:对无符号数进行,左(右)边补0,低(高)位移出

  b) 算术移位:对带符号整数进行,移位前后符号位不变,编码不同,方式不同

  c) 循环移位:最左(右)边位移到最低(高)位,其他位左(右)移一位

  ② 扩展运算

  a) 零扩展:对无符号整数进行高位补0

  b) 符号扩展:对补码整数在高位直接补符

  ③ 加减运算

  a) 补码加/减运算:用于整数加/减运算。符号位和数值位一起运算,减法用加法实现。同号相加时,若结果的符号不同于加数的符号,则会发生溢出。

  b) 原码加/减运算:用于浮点数尾数加/减运算。符号位和数值位分开运算,同号相加,异号相减,大数减小数,结果取大数的符号。减法用加负数补码实现。

  ④ 乘法运算:用加法和右移实现。

  a) 补码乘法:用于整数乘法运算。符号位和数值位一起运算。采用Booth算法。

  b) 原码乘法:用于浮点数尾数乘法运算。符号位和数值位分开运算。数值部分用无符号数乘法实现。

  ⑤ 除法运算:用加/减法和左移实现。

  a) 补码除法:用于整数除法运算。符号位和数值位一起运算。

  b) 原码除法:用于浮点数尾数除法运算。符号位和数值位分开运算。数值部分用无符号数除法实现。

(2) 浮点数运算:由专门的浮点运算器实现

  ① 加减运算

  a) 对阶:小阶向大阶看齐,阶小的那个数的尾数右移,直到两数阶码相同,右移时,增加保护位。

  b) 尾数相加减:用定点数加/减运算实现。

   c) 规格化处理:根据结果进行左规或右规操作。

  d) 舍入:有就近舍入 / 正向舍入 / 负向舍入 / 截去四种方式。

  e) 溢出判断:当结果发生阶码上溢时,发生溢出。

  ② 乘除运算:尾数用定点数乘/除运算实现,阶码用定点数加/减运算实现。

(3) 快速加法器(并行加法器、先行进位加法器)

  a) 加法器是加/减/乘/除运算的基础,加法器的速度至关重要

  b) 进位方式是影响加法器速度的重要因素

  c) 并行进位方式能加快加法器速度

  d) 通过“进位生成”和“进位传递”函数来使各进位独立、并行产生

(4) 算术逻辑单元ALU:在先行进位加法器的基础上增加其他逻辑,实现基本的算术和逻辑运算的部件。有两个操作数输入、低位进位输入、一个操作控制输入、一个结果输出、一位高位进位输出和相等标志输出等