首页 > 解决方案 > 使用位移来执行乘法

问题描述

我正在尝试使用 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。

标签: assemblymipsbit-shiftmultiplicationmars-simulator

解决方案


推荐阅读