第三章
运算方法和运算部件
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.溢出判断(浮点数除法运算)