使用加法的MIPS乘法
对不起,我试着把两个整数相乘,但不起作用。我找不到问题出在哪里。可能是因为register的名字,但我不知道如何更正它。我纠正了很多次,但都不成功。有人能给我点建议吗使用加法的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 "
.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互补)有符号整数的算法完全相同。因此,如果您的程序适用于无符号整数,那么它也应该适用于有符号整数