MIPS乘法使用加法

时间:2015-11-12 13:17:08

标签: mips

抱歉,我尝试将两个整数相乘,但它不起作用。我无法找到问题所在。也许是因为注册名称,但我不知道如何纠正它。我纠正了很多次,但没有成功。有谁可以给​​我一点意见?

.data
prompt1: .asciiz "Please enter the first signed (decimal) integer: "
prompt2: .asciiz "Please enter the second signed (decimal) integer: "
result_msg: .asciiz "The result of these two 16-bit integers\' multiplication is: "
.text
.globl main
main:
      li $v0, 4        #print prompt
      la $a0, prompt1
      syscall

      li $v0, 5        #read multiplicand 
      syscall
      move $s0, $v0

      li $v0, 4        #print prompt
      la $a0, prompt2
      syscall

      li $v0, 5      #read multiplier
      syscall
      move $s1, $v0

Mult: ori $t0,$zero,1  #mask
      move $s3, $0    #initialize the result register
      move $t1, $0


loop: beq $s1, $zero, end  #if the multiplier is 0 then finished
      and $t1, $t0, $s1      #mask
      beq $t1, 1, mult_add   
      beq $t1, 0, shift

mult_add:  addu $s3, $s3, $s0     #add to get product

shift: 
      sll $s0, $s0, 1    #shift multiplicand left
      srl $s1, $s1, 1    #shift multiplier right

      j loop

end:
     jr $ra                

result:                            #input the print_string
      li $v0, 4
      la $a0, result_msg
      syscall


exit:
      li $v0, 1            #input result
      move $a0, $s3
      syscall

      li $v0, 10        #exit
      syscall

1 个答案:

答案 0 :(得分:0)

检查您的代码我看到您在完成乘法后跳转到标签end

该标签上的说明发出jr $ra "从函数" 返回,但我想您只想打印结果并退出。

因此我建议您删除该指令以打印结果并退出并删除标签result,因为它不会在代码中的任何位置使用。