所以我必须仅使用Add和Shift Right构建一个基本的4位乘法器。我基本上知道Shift添加算法是如何工作的,但我不知道如何使用右移而不是左移。从技术角度来看,假设我们有一个累加器,两个4位右移寄存器和一个ALU,它基本上看起来像这样,考虑到在开始时被乘数位于累加器和ShiftReg2中的乘数,所以我们可以使用累加器(位7-4)和ShiftReg1(位3-0)作为我们的8位产品的输出。 Acc = abcd ShiftReg1 =到目前为止没什么重要的,ShiftReg2 = wxyz
知道如何开始让4步算法开始考虑你必须总是向右移动并且只能将你的被乘数加到你的累加器中吗?
答案 0 :(得分:0)
假设你有一条指令(称为JPE),如果累加器是偶数则跳转(只测试最右边的位是否为空),你可以得到这个沉重/丑陋的解决方案。
说明:
JPE <address>
:如果累加器是偶数,则跳转到该地址。ADD <r1>, <r2>
:将<r1>
的值添加到<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.
Awfull算法:
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>