【问题标题】:One position right barrel shift using ALU Operators?使用 ALU 运算符的一位右桶移位?
【发布时间】:2009-10-12 04:45:15
【问题描述】:

我想知道是否有一种仅使用 ALU 运算符(NOT、OR、AND、XOR、ADD、SUB)对 8 位二进制值执行右移的有效方法

Example:

input:  00110101
output: 10011010

我已经能够通过将 8 位二进制值与自身相加来实现左移,因为左移相当于乘以 2。但是,我想不出一种方法来实现右移。

到目前为止,我想出的唯一方法是只执行 7 次左桶移位。这是唯一的方法吗?

【问题讨论】:

  • 可能你想要旋转。轮换与轮换不同。
  • 嗯,这叫向右旋转,而不是shift
  • 左移实现是真正的移位,因为它移入 0 并丢弃(溢出)最高位。
  • 可能只是词​​汇问题,或者我的解释有点混乱。这是我试图解释的维基。 en.wikipedia.org/wiki/Barrel_shifter

标签: operators bit-shift bitwise-operators


【解决方案1】:

很简单,{AND, OR, XOR, NOT} 无法做到这一点。对于所有这些运算符,outbit[N] 取决于 inbit1[N] 和 inbit2[N] 。 AND 添加对 inbit1[N]..inbit1[0] 和 inbit2[N]..inbit2[0] 的依赖。但是,在您的情况下,您需要依赖 inbit[N+1]。因此,如果有任何解决方案,它必须包含一个 SUB。

但是,A - B 只是 A + (-B),即 A + ((B XOR 11111111) +1)。因此,如果有使用 SUB 的解决方案,则可以改写为使用 ADD 和 XOR 的解决方案。正如我们所展示的,这些运算符是不够的。因此,{ADD, OR, XOR, NOT, ADD, SUB} 的集合也是不够的。

【讨论】:

  • 这就是我的想法。我想可能有某种面具可以使用然后操纵。只是当我使用 MIPS 汇编时,这本书声称它可以在 1 个时钟周期内进行除法(如果它是 2 的幂)。我想这可能是因为硬件移位器。感谢您的意见。
  • 硬件桶形移位器很常见,而且不太复杂(显然)。
猜你喜欢
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多