第三章

运算方法和运算部件

3.1高级语言和机器指令中的运算

3.1.1C程序中涉及的运算

1.按位运算

  • | 表示按位OR运算、& 表示按位AND运算、~ 表示按位NOT运算、^ 表示按位XOR运算
  • 数值运算

2.逻辑运算

  • || 表示OR运算、&& 表示AND运算、!表示NOT运算
  • 非数值运算,操作数只有两个逻辑值:True(非0数),False(全0数)

3.移位运算

  • 对无符号数采用逻辑移位,对带符号整数采用算数移位
  • 逻辑移位不考虑符号位,总是把高(低)位移出,低(高)位补0
  • 表达式x<<k表示对数x左移k位,x>>k表示对数x右移k位

4.位扩展和位截断运算

  • 进行位扩展时,扩展后的数值应保持不变
  • 0扩展用于无符号数,只要在短的无符号数前面添加足够的0即可
  • 符号扩展用于补码表示的带符号整数,通过在短的带符号整数前添加足够多的符号位来扩展
  • 位截断发生在将长数转换为短数时

3.1.2MIPS指令中涉及的运算

  • 按位逻辑运算、逻辑移位、算数移位、带符号整数/无符号整数/单精度浮点数/双精度浮点数的加减乘除、带符号整数的符号扩展、无符号数的0扩展

3.2基本运算部件

用一个专门的算术逻辑部件(ALU)来完成基本逻辑运算和定点数加减运算,各类定点乘除运算和浮点数运算则可利用加法器或ALU和移位器来实现,因此基本的运算部件是加法器,ALU和移位器,ALU的核心部件是加法器。

3.2.1串行进位加法器

3.2.2并行进位加法器

3.2.3带标志加法器

3.2.4算术逻辑部件

3.3定点数运算

3.3.1补码加减运算

  • 零标志ZF=1表示结果F为0
  • 符号标志SF表示结果的符号,即F的最高位。对于无符号数运算,SF无意义
  • 进/借位标志CF表示无符号数加/减运算是的进位/错位
  • 溢出标志OF=1表示带符号整数运算时结果发生了溢出。对于无符号整数运算,OF无意义
  • 对于n位补码整数,它可以表示的数值范围为-2(n-1)~2(n-1)-1

3.3.2原码加减运算

运算规则:

  • 比较两个操作数的符号,对加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”
  • 求和时,数值位相加,若最高位产生进位则结果溢出。和的符号位取被加数(或被减数)的符号
  • 求差时,被加数(或被减数)数值位加上加数(或减数)数值位的补码,并按以下规则产生结果
    1)最高数值位产生进位,表明加法结果为正,所得数值位正确;
    2)最高数值位没有产生进位,表明加法结果为负,得到的是数值位的补码形式,因此需要对结果求补,还原为绝对值形式的数值位;
    3)在上述(1)的情况下,差的符号位取被加数(被减数)的符号;在上述(2)d的情况下,符号位为被加数(被减数)的符号取反.

3.3.3移码加减运算

  • 移码的和、差等于和、差的补码

3.3.4原码乘法运算

1.原码一位乘法

  • 确定乘积的符号位。由两个乘数的符号异或得到
  • 计算乘积数值位。乘积数值部分为两个乘数的数值部分之积

2.原码二位乘法

3.3.5补码乘法运算

1.补码一位运算

  • 将符号与数值位合在一起参与运算,直接得出用补码表示的乘积,且正数和负数同等对待

2.补码二位运算

  • 两位一乘,,把乘数分为两位一组,根据两位代码的组合决定加或减被乘数的倍数,形成的部分积每次右移两位

3.3.6快速乘法器

  • 列阵乘法器

3.3.7原码除法运算

1.恢复余数除法

(当余数为负时,需加上除数,将其恢复成原来的余数)

  • 1.符号位单独按两数符号异或求得;参与运算的是绝对值的补码
  • 2.判溢出, 要求|被除数| < |除数| (对小数而言)(如果是整数,则要求|被除数| > |除数| )
  • 3.被除数减去除数
  • 4.若所得.余数为正,相应位上商为1,余数左移一位,减去[y]补;若余数为负,相应位上商为0,余数加上除数(恢复余数),再左移一位,加上[-y]补
  • 5.重复第4步,直到求得所要求的商为止(移n次)
  • 6.若最后一步余数为负,则需要恢复余数

2.不恢复余数除法

(加减交替法)对于小数补码运算,商等于"-1"是被允许的

算法规则:

  • 符号位参加运算,除数与被除数均用双符号补码表示
  • 被除数与除数同号,被除数减去除数,被除数与除数异号,被除数加上除数
  • 余数与除数同号,商上1,余数左移一位减去除数; 余数与除数异号,商上0,余数左移一位加上除数。(注意:余数左移加上或减去除数后就得到了新余数)
  • 采用校正法包括符号在内,重复n+1次3

3.3.8补码除法运算

1.补码恢复余数除法

2.补码不恢复余数除法

3.4浮点数运算

3.4.1浮点数加减运算

1.对阶

  • 使x,y的阶码相等,以使尾数可以相加减
    (原则:小阶向大阶看齐,阶小的那个数的尾数右移,右移的位数等于两个阶(指数)的差的绝对值)

2.尾数加减

  • 对阶后两个浮点数的指数相等,此时,可以进行对阶后的尾数相加减

3.尾数规格化

4.尾数的舍入处理

5.溢出判断

3.4.2浮点数乘除运算

1.浮点数乘除法运算

  • 1.尾数相乘,指数相加(指数的相加运算采用移码相加运算算法)
  • 2.尾数规格化
  • 3.尾数的舍入处理
  • 4.溢出判断(浮点数除法运算)

3.5运算部件的组成

3.5.1定点运算部件

3.5.2浮点运算部件

posted @ 2020-10-07 22:09  温茶  阅读(129)  评论(0编辑  收藏  举报