0

所以我试图用 MIPS 汇编代码编写一个程序来帮助我更好地理解浮点加法的工作原理。我编写了一个程序,它从用户那里获取两个输入,并在不使用除 mtc1 和 mfc1 (用于输入和输出)之外的任何浮点指令的情况下添加它们。我的代码有错误,因为当我添加 1 + 2 时,我得到 2.74804688。我仍在尝试调试代码,但似乎无法理解问题所在。如果有人可以提供帮助,我将不胜感激。

这是我的代码(不包括用户输入...第一个浮点值在 $s0 中,第二个在 $s1 中)

#Integer implementation of floating-point addition
 #Initialize variables
 add $s0,$t0,$zero #first integer value
 add $s1,$t1,$zero #second integer value
 add $s2,$zero,$zero #initialize sum variable to 0
 add $t3,$zero,$zero #initialize SUM OF SIGNIFICANDS value to 0

 #get EXPONENT from values
 sll $s5,$s0,1 #getting the exponent value 
srl $s5,$s5,24 #$s5 = first value EXPONENT

 sll $s6,$s1,1 #getting the exponent value
 srl $s6,$s6,24 #$s6 = second value EXPONENT

 #get SIGN from values
 srl $s3,$s0,31 #$s3 = first value SIGN
 srl $s4,$s1,31 #$s4 = second value SIGN

 #get FRACTION from values
 sll $s7,$s0,9 
srl $s7,$s0,9 #$s7 = first value FRACTION
 sll $t8,$s1,9
 srl $t8,$s1,9 #$t8 = second value FRACTION

 #compare the exponents of the two numbers
 compareExp: ###################### 

beq $s5,$s6, addSig 
blt $s5,$s6, shift1 #if first < second, go to shift1
 blt $s6,$s5, shift2 #if second < first, go to shift2
 j compareExp 

shift1: #shift the smaller number to the right
 srl $s7,$s7,1 #shift to the right 1
 addi $s5,$s5,1 
j compareExp

 shift2: #shift the smaller number to the right
 #srl $s0,$s0,1 #shift to the right 1
 #j compareExp
 srl $t8,$t8,1 #shift to the right 1
 addi $s6,$s6,1
 j compareExp

 addSig: 

add $t3,$s7,$t8 #Add the SIGNIFICANDS 

li $v0, 4
 la $a0, sum
 syscall

 li $v0, 1
 move $a0, $t3
 syscall

 j result

 result: 
li $v0, 4
 la $a0, newline
 syscall

 sll $t4,$s3,31 #SIGN
 #FRACTION
 sll $t5,$s6,23 #EXPONENT
 add $t6,$t4,$t5
 add $t6,$t6,$t3

 li $v0, 4
 la $a0, sum2
 syscall

 li $v0, 1
 move $a0, $t6
 syscall

li $v0, 4
 la $a0, newline
 syscall

 li $v0, 4
 la $a0, sum2
 syscall

 li $v0,2
 mtc1 $t6,$f12
 syscall
 jr $31
 # END OF PROGRAM
4

1 回答 1

0

您正在使用 MARS系统调用5 来读取输入,它将它们读取为整数。您应该将它们视为浮点数。

提取分数时不包括IEEE 754隐藏位。

您没有正确处理输入的符号。

还有很多,但现在就足够了。

于 2012-04-19T23:48:05.570 回答