Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用加法的MIPS乘法_Mips - Fatal编程技术网

使用加法的MIPS乘法

使用加法的MIPS乘法,mips,Mips,对不起,我试着把两个整数相乘,但不起作用。我找不到问题出在哪里。可能是因为register的名字,但我不知道如何更正它。我纠正了很多次,但都不成功。有人能给我点建议吗 .data prompt1: .asciiz "Please enter the first signed (decimal) integer: " prompt2: .asciiz "Please enter the second signed (decimal) integer: " result_msg: .asciiz "

对不起,我试着把两个整数相乘,但不起作用。我找不到问题出在哪里。可能是因为register的名字,但我不知道如何更正它。我纠正了很多次,但都不成功。有人能给我点建议吗

.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

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

该标签上的指令发出一个“从函数返回”的
jr$ra
,但我猜您只想打印结果并退出


因此,我建议您删除该指令,以便打印结果并退出,还可以删除label
result
,因为它在代码中的任何地方都没有使用

检查您的代码我看到当您完成乘法时,您跳转到标签
end

该标签上的指令发出一个“从函数返回”的
jr$ra
,但我猜您只想打印结果并退出


因此,我建议您删除该指令,以便打印结果并退出,还可以删除label
result
,因为它在代码中的任何地方都没有使用

多谢各位!它可以工作!另外,你能告诉我怎样乘有符号整数吗?我是一个初学者,我不知道如何处理它。抱歉有更多的问题。:@sakurababy:无符号整数和(A2互补)有符号整数的算法完全相同。因此,如果您的程序适用于无符号整数,那么它也适用于有符号整数。非常感谢!它可以工作!另外,你能告诉我怎样乘有符号整数吗?我是一个初学者,我不知道如何处理它。抱歉有更多的问题。:@sakurababy:无符号整数和(A2互补)有符号整数的算法完全相同。因此,如果您的程序适用于无符号整数,那么它也应该适用于有符号整数