在计算机系统中,不但有算术逻辑单元(ALU),还要有 “数据移位” 的电路。
  特别是在 “乘法运算” “除法运算” 过程中,数据移位,是必不可少的步骤。
  例如在做乘法运算时,是把一个乘数,逐次的左移,再与部分积相加。
  另外在做除法运算时,则需要把除数,逐次的右移,再与被除数或余数相减。

  二进制数的乘法、除法运算,都可列出竖式进行计算。 示例,分别如下所示。

  其实,二进制数的计算方法与步骤,与小学学过的十进制,是一样的,也就是 “左移相加”、“右移相减” 而已。 区别,仅仅是要记住: “逢二进一” 和 “借一当二”。

  由图可见,数据移位,是算术运算的一个重要步骤。 那么,在计算机中进行乘、除运算时,也必须要有一个 “数据移位” 的电路。
  但是,在《计算机组成原理》课本中,介绍了加法器,却没有介绍 ALU 中所具有减法器。 在后面,又喋喋不休的介绍:乘法器、除法器,中间又缺少了必不可少的【数据移位器】。
  一本教材,东一榔头西一棒子的内容,学过之后,能有用吗?

  本篇博文,打算把【数据移位器】简单介绍一下,如有不足之处,敬请大家谅解。

  在计算机中存储数据,用的是 D 触发器。 当然,用其它的(如 RS 触发器、JK 触发器)也是可以的,但是,只有 D 触发器,才是最简单的。

  一个 D 触发器,可以存储一位二进制数。
  D 触发器的数据输入端称为:D,输出端则为:Q。 数据的输入,要受到 Clock (时钟信号)的控制,只有当 Clock 端输入上升沿时,D 端的数据,才能进入到 Q 端。 没有时钟脉冲到来,Q 端,就不会出现变化,这就是 “存储数据”。

  此外,D 触发器还有两个 “置位、复位” 端。

  由四个 D 触发器构成的四位移位电路(示意图)如下所示。

  图中上半部是数据右移,用红色箭头标注了移动的方向。 数据移到右边,可以消失不见,也可以再从左边移入,形成环形移动。 环形移位,也是计算机的一个常规功能。

  图中下半部则是左环形移位,用蓝色箭头标注了数据的移动方向。 图中还画出了时钟脉冲和清零信号的接入方法。

  计算机中的移位电路,应该是通用的,不论是左移或是右移(包括左环移右环移),都应该是一个移位电路都具备的功能。 此外,还应该有数据写入保持不变两个功能。

  由此可知,移位电路的每一个位,都应该有四种写入的通道:
   由左边位的 Q,写入本位的 D (这就是右移)、
   由右边位的 Q,写入本位的 D (这就是左移)、

   由本位的 Q,写入本位的 D (这就是保持)、
   用外部数据,写入 D (这就是置数)。

   按照上面的分析,每个 D 端都应该有四种写入数据的通道,这就需要一个 “四选一” 的电路。用门电路实现四选一的电路如下图所示。

  图中左上角的四个拨动开关,是用来输入四个数据(ABCD)的。图中左下角的两个拨动开关(S1S0),是用来设定通道号码的。 两位二进制数(S1S0),可以形成四个号码,这就可在四个输入数据中,选出来一个,输出到 Y。
  图中的通道号码,已经置为 01,那么,只有变量 B 才能通过电路送到 Y。其它三个变量,就只能冷眼旁观、望洋兴叹了。

  用上图电路来进行四选一,就有点琐碎了。 实际上,集成电路厂家,早已把这些电路,封装在一块集成电路芯片中了,这就是 74LS153。 而且,在一片 74LS153 芯片中,封装了两个四选一电路。

  下图就是用两片 74LS153(共有四个四选一电路)、四个 D 触发器构成的四位双向移位电路

  图中左上角是六个拨动开关,用来输入四位数据和两位功能号码。 设定好了之后,再按下 CLK 键,电路就会按照指定的功能进行操作。
  图中所显示的状态,是刚刚进行了两步操作。
  第一步:先设置 S1S0 = 11(置数)、ABCD = 0100,按下 CLK,电路的输出就是 0100。
  第二步:再设置 S1S0 = 10(右移),按下 CLK,数据就向右移动一位,输出就是 0010。
  在本电路的左边,还设计了一个功能选择开关,可以用来选择:环形移位单向右移。如果是单向右移,在左边,还可以输入新数据。(单向左移时,本电路可能会和左输入有冲突。 由于篇幅所限,就没有再扩充全面的电路。所以,大家就不要用这个电路做单向左移的实验了。)

  用这些分离器件设计电路,还是很麻烦很复杂的。 所幸的是,芯片厂家已经制造出了完整的数据移位集成电路芯片。 74LS194 就是一个四位的双向移位芯片,它的置数、右移、左移、保持功能,与前面介绍的,完全相同。 它还可以级联使用,构成多位的数据移位电路。 下图就是用两片 74LS194 组建的八位双向环形移位电路。 如果需要,还可以构成更多位的移位电路。

  本电路中的拨动开关和按键的功能,与前面所介绍的,都是相同的,此处不再赘述。

  数据移位电路是 CPU 中,必不可少的部分。 这个电路,应该在学习乘除法电路之前,就应该掌握的。 还没有学这个电路,就去讲授乘除法,那就是闲扯了。

--本文完--

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐