assembly - 使用位移来执行乘法
问题描述
我正在尝试使用 Mips Mars 创建汇编代码,该代码使用位移和循环将任意数字乘以 32 位。但如果那样的话,它只会迭代两次。
我已经在程序的前面得到了乘数和被乘数。
$t0 = 被乘数
$t1 = 乘数
#Multiply operation
li $t3 0 #Counter
li $t4 0 #result
li $t6 0x80000000
myLoop:
bgt $t3, 31, showMessage
addi $t3, $t3, 1 #Keep track of counter $t3
andi $t7, $t1, 1 #Find lsb of multiplier
andi $t8, $t6, 1 #Find LSB $t6
and $t5, $t8, $t7 #And LSB of multiplier and lsb $t6
sll $t6, $t6, 1 #shift $t6 right 1
srl $t1, $t1, 1 #Shift multiplier right 1
blez $t7, myLoop
add $t4, $t0,0 #Result
sll $t0, $t0, 1 #Shift multiplicand left one
j myLoop
我希望 4*3 的输出是 12,但它是 8。
解决方案
推荐阅读
- magit - 在 magit 中,如何识别远程的默认分支?
- wix - 当我使用 /quiet 参数从 CMD 运行 wix MSI 时,它不会启动
- c++ - 如何保存数组并在 C++ 上打印它们
- csv - 为 grafana 的 influx 上传器设置带注释的 csv
- django - Django 3.1.7 模型自定义约束
- git - 如何通过 git 从意外撤消 Android Studio 中的工作中恢复?
- python-3.x - 如何使用 FTP 服务器和 django rest api 上传文件....怎么做?
- expression - 报表生成器表达式 IIF 值包含其他值
- flutter - E/MethodChannel#com.viztushar.flutter.flutter_stickers_internet/sharedata(28013):处理方法调用失败
- r - R查找由mutate()中另一列的值定义的列的值