我正在尝试使用beq,add,nand创建一个乘法程序。这段代码有效但我不明白这段代码如何退出循环,因为测试值总是自己添加。谢谢你的建议。 (我正在使用goto和label,因为我稍后会将此代码转换为mips程序集。)
unsigned mult(unsigned x, unsigned y)
{
unsigned test = 1, ans = 0;
next:
if ((test & x) == 0) goto skip;
ans += y;
skip:
y += y;
test += test;
if (test != 0) goto next;
return ans;
}
答案 0 :(得分:2)
test
将翻转,然后该值将为0.
test
将采用值1, 2, 4, 8, 16, 32, 64 ,.... 2147483648 , 0
代码的逻辑很有趣,
检查x
的LSbit是否为1.如果是,则将y
添加到答案中。
如果x
的下一个LSbit会将2*y
添加到答案中。
对于x
的每个位为1,它将添加2^n*y
,给出最终答案。