计算机组成原理 第六章 计算机的运算方法 Part 3 定点数的四则运算 原码移位运算、加减法 原码乘除法 补码加减法与乘法

1.移位

15.m = 1500. cm
小数点右移 2 位
机器用语 15 相对于小数点 左移 2 位

算术移位

规则

 例

 算术移位的硬件实现

算术移位和逻辑移位的区别

  • 算术移位:有符号数的移位
    • 逻辑左移:低位添 0,高位移丢
    • 逻辑右移:高位添 0,低位移丢
  • 逻辑移位:无符号数的移位

 循环移位

  • 循环移位:分为带进位(CF)和不带进位的循环移位
  • 循环移位特点:移出的数据又被移入到数据中
  • 循环移位的应用:特别适合将数据的低字节和高子节数据互换
  • 移位规则见图:

2.定点数加减法 

 

(1)原码加减
  • 加法:绝对值相加,符号位不变;
  • 减法:绝对值大的减绝对值小的数,结果的符号位与绝对值大的数相同。
  • 这里的加法运算,其实当两个数符号位不同时就按减法规则算。
  • 注意:运算时超出字长,则左边溢出位丢掉。

 

(2)补码加减
为什么机器中使用补码运算呢?
  • 因为补码统一了符号位和数值位,,加法和减法也可以统一处理,只需要加法器,不需要减法器,节省元件,简化了运算器的设计,提高效率。
  • 注意:符号位与数值为一起计算,符号位产生的进位丢掉,结果的符号位数值由运算得出。
  • 例:

溢出的判断

  • 溢出:指参加运算的两个数,相加或相减,运算结果超过了机器字长所能表示的范围
  • 正溢出:运算结果大于机器字长所能表示的最大正数
  • 负溢出:运算结果小于机器字长所能表示的最小负数

8位转16位:-12 (10) = 1000 1100

硬件配置

3.乘法运算

改进

  • 一位符号位判溢出

    参加操作的两个数(减法时即为被减数和“求补”以后的减数)符号相同,其结果的符号与原操作数的符号不同,即为溢出

  • 两位符号位判溢出

    结果的双符号位 相同 未溢出
    结果的双符号位 不同 溢出
    最高符号位代表其真正的符号

    符号扩展

  • 符号扩展:有时需要把两种不同位数的数相加,那么就需要统一他们的位数,比如8位和16位数相加,要想得到正确的结果,必须把8位数转换成16位数形式。
  • (1)正数符号扩展
  • 原码=补码=反码:比如8位转16位:+12(10) = 0000 1100 , 转换成16位则为:0000 0000 0000 1100
  • 符号位为0,附加为都用0补充
  • (2)负数符号扩展
  • 原码:扩展方法与正数符号扩展相同,只不过最高位符号位变为1, 1000 0000 0000 1100
  • 补码:附加位补充1,符号位为1,1111 1111 1111 1100
  • 反码:附加位补充1,符号位为1,1111 1111 1111 1100
  • 乘法运算可用加和移位实现n = 4, 加 4 次,移 4 次
  • 由乘数的末位决定被乘数是否与原部分积相加,然后 1 位形成新的部分积,同时 乘数 1 位(末位移丢),空出高位存放部分积的低位。
  • 被乘数只与部分积的高位相加
  • 硬件:3 个寄存器,其中2个具有移位功能;1 个全加器
原码一位乘法

在这里插入图片描述

运算细则:

  • 被乘数和乘数均取绝对值参加运算,符号位异或运算;
  • 部分积的长度和被乘数一样,取n+1位,初值为0;
  • 从乘数的最低位yn开始判断;若yn=1,则高位部分积加上被乘数|x| , 高位部分积然后右移一位;若yn=0,则高位部分积加上0,高位部分积右移一位;
  • 重复2步骤,判断n次

硬件

 补码一位乘法

Booth算法

 

  • 一种有符号的乘法,采取相加和相减操作计算补码数据的乘积。
  • 运算规则:
  1. 符号位参与运算,运算的数均以补码表示
  2. 被乘数一般取双符号位参与运算,部分积取双符号位,初值为0,乘数可取单符号位
  3. 乘数末位增设附加位yn+1,初值为0
  4. 根据(yn,yn+1)的取值来确定操作,见下图
  5. 有符号数,移位按补码右移算术移位规则进行,右移补充1,左移补充0
  6. 按上诉步骤进行n+1次步骤,第n+1次不移位。累加n+1次,移位n次

 

 

 

硬件

 

总结

 

4.除法运算

笔算除法

 笔算除法和机器除法的比较

 

原码除法

恢复余数法 
  • 符号位与数值位一起参加运算
  • 除法第一步根据被除数和除数的符号决定是做加法还是减法
  • 上商的原则根据余数和除数的符号位共同决定,同号上1,异号上0,简单规律就是,够减上1,不够减上0
  • 最后一步商恒置为‘1’
  • 运算规则:
  1. 符号位参与运算,除数、被除数、商和余数都用补码表示
  2. 被除数和除数同号,则被除数减去除数;若被除数和除数异号,则被除数加上除数
  3. 若余数和除数同号,则上商1,余数左移一位; 若余数和除数异号,则上商0,余数左移一位加上除数
  4. 重复执行上一步骤n次
  5. 若对商的精度无特殊要求,最后一位商恒置为1

 

不恢复余数法(加减交替法)
  • 采用方法:原码不恢复余数法,也称原码加减交替除法;符号位和数值单独处理;
  • 运算规则:
  1. 符号位不参加运算
  2. 先用被除数减去除数( |X| - |Y| = |X| + (-|Y|) = |X| + [|-|Y|]补 )
    (1). 余数为正数时,够减,商上1,余数左移一位,再与除数做减法比较
    (2). 余数为负数时,不够减,商上0,加除数恢复成原来的值,将余数左移一位,再与除数做减法比较
  3. 重复上述步骤,当第n+1步余数为负时,需加上|Y|得到第n+1步正确的余数

硬件实现

总结

 

 5.浮点运算

1.对阶(小介看大介)

2.尾数求和

3. 规格化

左规

右规

4. 舍入

在 对阶 和 右规 过程中,可能出现尾数末位丢失引起误差,需考虑舍入

  • 0 舍 1 入法
  • 恒置 “1” 法
5. 溢出判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值