逻辑运算学习笔记

定点加减运算
补码加减法
数用补码表示,符号位参见运算
原码乘法 :
乘法规则
操作数、结果用原码表示;
绝对值运算,符号单独处理;
被乘数(B)、累加和(A)取双符号位;
乘数末位(Cn)为判断位,其状态决定下部操作;
做N次循环(累加、右移) ;

定点补码一位乘法
1、A、B 取双符号位,符号参加运算;
2、 C取单符号位,符号参见移位,以决定最后是否修正;
3、 C末位设置附加位Cn+1 ,处置为0 ,CnCn+1 组成判断位,决定运算操作;
4 、 作 n步循环,若需作第n+1步,则不移位,仅修正。

  1. 补码加法
    [ x ]补+[ y ]补=[ x+y ]补 (mod 2)
    特点:不需要事先判断符号,符号位与码值位一起参加运算。
    符号位相加后若有进位,则舍去该进位数字。
    在模2意义下,任意两数的补码之和等于该两数之和的补码。
    这是补码加法的理论基础。
    例: x=0.1001, y=0.0101, 求 x+y。
    解: [x]补=0.1001, [y]补=0.0101
    [x]补   0.1001
    + [y]补   0.0101  
    [x+y ]补  0.1110 
    例: x=+0.1011, y=-0.0101, 求 x+y。
    解: [x]补=0.1011,  [y]补=1.1011
    [x]补   0.1011
    +[y]补  1.1011 
    [x+y]补 10.0110 

  2. 补码减法
    补码减法运算的公式:
    [ x-y ]补=[ x ]补-[ y ]补=[ x ]补+[-y ]补
    例: x=+0.1101, y=+0.0110, 求 x-y。

解:  [x]补=0.1101
    [ y]补=0.0110, [-y]补=1.1010

                          [x]补       0.1101
                  +[-y]补    1.1010 
                     [x-y]补        10.0111
                      x-y=+0.0111

例: x= -0.1101,y= -0.0110,求x-y=?

解: [x]补=1.0011
[y]补=1.1010 [-y]补=0.0110

         [x]补        1.0 0 1 1
   +   [-y]补        0.0 1 1 0
      [x-y]补        1.1 0 0 1

∴x–y = -0.0111

  1. 溢出及与检测方法
    在定点小数机器中,数的表示范围为|x|<1。在运算过程中如出现大于1的现象,称为 “溢出”。

这里写图片描述
例: x=+0.1011, y=+0.1001, 求x+y。
解: [x]补=0.1011 [y]补=0.1001
[x]补 0. 1 0 1 1
+ [y]补 0. 1 0 0 1
[x+y]补 1. 0 1 0 0

两个正数相加的结果成为负数,这显然是错误的。

例: x= -0.1101, y= -0.1011, 求x+y。
解: [x]补=1.0011 [y]补=1.0101
[x]补 1. 0 0 1 1
+ [y]补 1. 0 1 0 1
[x+y]补 0. 1 0 0 0

 两个负数相加的结果成为正数,这同样是错误的。
  发生错误的原因,是因为运算结果产生了溢出。

两个正数相加: 结果大于机器所能表示的最大正数,称为上溢;
两个负数相加:结果小于机器所能表示的最小负数,称为下溢。
2.溢出的检测方法
[x]补 0. 1 0 1 1
+ [y]补 0. 1 0 0 1
[x+y]补 1. 0 1 0 0
[x]补 1. 0 0 1 1
+ [y]补 1. 0 1 0 1
[x+y]补 0. 1 0 0 0

这里写图片描述
(2) 双符号位法
一个符号位只能表示正、负两种情况,当产生溢出时,符号位的含义就会发生混乱。如果将符号位扩充为两位(Sf1、Sf2),其所能表示的信息量将随之扩大,既能判别是否溢出,又能指出结果的符号。
双符号位的含义如下:
Sf1Sf2 = 00 结果为正数,无溢出
01 结果正溢
10 结果负溢
11 结果为负数,无溢出
即:结果的两个符号位的代码不一致时,表示溢出;
两个符号位的代码一致时,表示没有溢出。
不管溢出与否,最高符号位永远表示结果的正确符号。
溢出逻辑表达式为: V=Sf1⊕Sf2
中Sf1和Sf2分别为最高符号位和第二符号位,此逻辑表达式可用异或门实现。
例 x= +0.1100, y= +0.1000, 求x+y。

解: [x]补=00.1100 [y]补=00.1000
[x]补 0 0. 1 1 0 0
+ [y]补 0 0. 1 0 0 0
0 1. 0 1 0 0
符号位出现“01”,表示已溢出,正溢。即结果大于+1
例 x= -0.1100, y= -0.1000, 求x+y。
解: [x]补=11.0100 [y]补=11.1000
[x]补 1 1.0 1 0 0
+ [y]补 1 1.1 0 0 0
1 0. 1 1 0 0
符号位出现“10”,表示已溢出,负溢出。即结果小于-1
(3) 利用进位值的判别法
[x]补 0 0. 1 1 0 0
+[y]补 0 0. 1 0 0 0
0 1. 1 0 0 0

[x]补 1 1.0 1 0 0
+[y]补 1 1.1 0 0 0
1 0.1 1 0 0
从上面例中看到:
当最高有效位有进位而符号位无进位时,产生上溢;
当最高有效位无进位而符号位有进位时,产生下溢。
(简单地说是正数相加为负数或负数相加为正数则产生溢出)
故溢出逻辑表达式为: V=Cf⊕Co
其中Cf为符号位产生的进位,Co为最高有效位产生的进位。此逻辑表达式也可用异或门实现。
这里写图片描述

  1. 3.3 定点乘法运算
    1. 乘法的手工算法
      设n位被乘数和乘数用定点小数表示
      被乘数 [x]原=xf . xn-1… x1x0
      乘数  [y]原=yf . yn-1… y1y0
      则乘积
      [z]原=(xf⊕yf)+(0. xn-1… x1x0)(0. yn-1… y1y0)
      式中,xf为被乘数符号,
      yf为乘数符号。
      (1)乘积符号的运算规则:同号相乘为正,异号相乘为负。
      (2) 手工运算过程:
      设x=0.1101,y=0.1011
      0. 1 1 0 1 (x)
      0. 1 0 1 1 (y)
      1 1 0 1
      1 1 0 1
      0 0 0 0
      • 1 1 0 1
    2. 1 0 0 0 1 1 1 1 (z)
      一般而言,设被乘数x,乘数y都是小于1的n位定点正数:
      x=0.x1x2……xn <1
      y=0.y1y2……yn <1
      其乘积为:
      x·y=x(0.y1y2……yn )
      =x(y12-1 +y22-2 +…+ yn2-n )
      = 2-1(y1x+2-1(y2x+2-1(…+2-1(yn-1x+2-1(ynx+0))…)))

形成递推公式
令zi表示第i次部分积,则根据从内到外的原则有:
z0 = 0,
z1 = 2-1(ynx+z0)
z2 = 2-1(yn-1x+z1)

zi = 2-1(yn-i+1x+zi-1)

zn = xy = 2-1(y1x+ zn-1)
特点:每次只需要相加两个数,然后右移一位。且相加的两个数(部分积和位积)都只有n位,因而不需要2n位的加法器。
3.原码一位乘法流程图
这里写图片描述

例:x=0.1101 , y=0.1011 , 求 x·y 。
这里写图片描述

4.原码一位乘硬件逻辑原理图
这里写图片描述
计数器:对移位的次数进行计数,以便判断乘法运算是否结束。
当计数器i=n时,计数器i的溢出信号使控制触发器Cx
置0,关闭时序脉冲T,乘法操作结束。
2 补码一位乘法
1.原码一位乘的缺点
原码一位乘法的主要问题是:符号位不能参与运算,
而补码乘法可以实现符号位直接参与运算。
二是对于采用补码存储的机器,从存储器中取出的是操作数的补码,需先将其转换成原码,这样很不方便,而且影响速度。
2.补码一位乘法的规律推导

(1)真值和补码之间的关系
设[x]补 = x0.x1x2…xn

这里写图片描述
(2) 补码的右移
在补码机器中,一个数不论其正负,连同符号位向右移一位,符号位保持不变,就等于乘1/2。
设 [x]补 = x0.x1x2…xn
这里写图片描述
(3) 补码乘法规则
这里写图片描述

1)、当被乘数x符号任意,乘数y符号为正时:
根据补码定义:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述
2)、 当被乘数x符号任意,乘数y符号为负时:

定点数二位乘法
乘数每两位的取值情况,一次求出对应于该两位的部分积。此时,只要增加少量逻辑电路,就可使乘法速度提高一倍。
1. 原码两位乘
乘数和被乘数都用原码表示。
两位乘数有四种可能组合,对应于以下操作:
00——相当于0·X。部分积Pi右移2位;
01——相当于1·X。部分积Pi+X,右移2位;
10——相当于2·X。部分积Pi+2X,右移2位;
11——相当于3·X。部分积Pi+3X, 右移2位。

这里写图片描述
例 假定X=0.100111,Y=0.100111
则:[-X]补=1.011001
X·Y=0.010111110001
如果最后一次操作欠下+4X,则最后一次右移2位后还需补充+X操作,+X后不再移位 。

补码两位乘
根据前述的布斯算法,将两步合并成一步,即可推导出补码两位乘的公式。假设上一步的部分积为[Pi]补,本步的部分积应为:
[Pi+1]补={[Pi]补+(Yn-i+1-Yn-i)·[X]补}2-1
下一步的部分积应为:
[Pi+2]补={[Pi+1]补+(Yn-i-Yn-i-1)·[X补]}2-1

将前一个公式中的[Pi+1]补代入[Pi+2]公式中:

补码两位乘
- 列表内容

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值