计算机组成原理--求补码的绝对值

  在上篇博文求相反的数中,做而论道介绍了 “求相反的数” 的算法与电路。 “求相反的数” ,也就是计算机专业教材中所谓的 “求补运算”。 做而论道是用减法电路实现的,要比计算机专业所推崇的 “取反加一” 的方法,更为简单和易于理解。 毕竟,“取反加一”,是难以看出有什么理论依据的。

  在本篇博文中,做而论道打算利用 ALU,算出计算机中补码的绝对值

  正数的补码,其绝对值是比较容易看出来的。 因为正数补码的最高位是 0,0 后面的二进制数,就是该数的绝对值。  也可以说:正数补码本身,就是绝对值,不需要做任何变换。
  负数的补码,其最高位必定是 1。 1 后面的二进制数,则需要经过变换,才能得到该数的绝对值。 怎么变换呢? 计算机教材中所写的,就又是 “取反加一” 了。

  如果你看过做而论道的上篇博文,就会知道,所谓的 “求补运算” 或是 “取反加一”,其本质就是 “0-X”。

  理解了这些,就好办了。
  求绝对值,可以用一个 ALU(算术逻辑单元)来实现。

  ALU 芯片 74LS181 所做的加减运算如下。
   加法运算:F = A+B+/CN
   减法运算:F = A-B-CN

  如果把 A 和 CN (或 /CN)都设定为零,那么,这两种算法,就变成如下算式。
   加法运算:F = 0+B+0 = B
B 就保持不变
   减法运算:F = 0-B-0 = 0-B
这也就是对 B 求补,也就是取反加一

  究竟是让 ALU 做加法还是做减法,要由补码的最高位来决定。
   正数补码的最高位为 0,应该让 ALU 做加法运算;
   负数补码的最高位为 1,应该让 ALU 做减法运算。

  ALU 芯片 74LS181 做加减运算的区别,是在 S3S2S1S0 输入互为反相的控制信号。 那么,用一个反相器,就可以解决了。
  实现 “求绝对值” 的电路如下所示。

  在图中,B7 是补码的最高位,直接送到 S2 和 S1,B7 反相后,送到 S3、S0 和 CN。
   当 B7 = 0,则有 S3S2S1S0 = 1001,此时 74LS181 将做加法运算。
   当 B7 = 1,则有 S3S2S1S0 = 0110,此时 74LS181 将做减法运算。

  在上图中,B7~0 = 1111 1111,这是-1 的补码。 经过两片 74LS181 的减法运算,F7~0 = 0000 0001,这正是-1 的绝对值:1 !

  换一个数,令 B7~0 = 0111 1111,这就是 +127 的补码,这个电路,将会输出什么? 请看下图。

  看到了吧,输入的 B 是正数,本电路就不做任何变换,直接输出了:0111 1111,这正是输入数据的绝对值。

  感兴趣的网友可用这个电路,输入任意的补码,本电路,就肯定会帮你求出绝对值!
  保证没错的! 不信,你就试试看。

  在计算机系统中,正负数值,一律都是采用补码表示和存储的。
  但是,把数据显示在屏幕上,就不能直接显示补码了。通常都是 “
± 绝对值” 的形式。
  因此,求补码的绝对值,就是计算机必不可少的一项操作。
  利用 ALU,就可以很容易的完成这项任务。

 

--本文完--

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值