0

所以我必须只使用 Add 和 Shift Right 来构建一个基本的 4 位乘法器。我基本上知道 Shift Add 算法是如何工作的,但我不知道如何让它与右移而不是左移一起工作。从技术的角度来看,假设我们有一个累加器、两个 4 位右移寄存器和一个 ALU,它基本上看起来像这样,考虑到一开始被乘数在累加器中,而乘数在 ShiftReg2 中,所以我们可以使用累加器(位 7-4)和 ShiftReg1(位 3-0)作为我们 8 位产品的输出。Acc=abcd ShiftReg1=到目前为止没有什么重要的和 ShiftReg2=wxyz

考虑到您必须始终向右移动并且只能将被乘数添加到累加器中,知道如何开始执行 4 步算法吗?

4

1 回答 1

0

假设您有一条指令(称为 JPE),如果累加器是偶数则向前跳转(只是测试最右边的位是否为空),您可以拥有这个沉重/丑陋的解决方案。

指示 :

  • JPE <address>:如果累加器为偶数,则跳转到该地址。
  • ADD <r1>, <r2>: 将<r1>to的值<r2>相加并将结果存储到<r2>.
  • SHR: 将累加器右移 1 位。

初始化:

Acc : first number.
Sr1 : 0, but it will hold the result at the end of the algorithm's execution.
Sr2 : second number to multiply with the first.

糟糕的算法:

0001   JPE 0003
0002   ADD Sr2, Sr1
0003   SHR
0004   JPE 0007
0005   ADD Sr2, Sr1
0006   ADD Sr2, Sr1
0007   SHR
0008   JPE 0013
0009   ADD Sr2, Sr1
0010   ADD Sr2, Sr1
0011   ADD Sr2, Sr1
0012   ADD Sr2, Sr1
0013   SHR
0014   JPE 0023
0015   ADD Sr2, Sr1
0016   ADD Sr2, Sr1
0017   ADD Sr2, Sr1
0018   ADD Sr2, Sr1
0019   ADD Sr2, Sr1
0020   ADD Sr2, Sr1
0021   ADD Sr2, Sr1
0022   ADD Sr2, Sr1
0023   SHR
0024   <STOP>
于 2015-05-07T13:41:40.990 回答