首页 > 解决方案 > MIPS 浮点寄存器存储值但打印为零

问题描述

我一直在编写一个程序来获取各种整数输入并找到最小值、最大值、均值和方差。平均值是小数,我不明白为什么它为平均值打印 0.00000000,即使浮点寄存器存储了正确的平均值。

main:
    li $v0, 4
    la $a0, start   #print start message
    syscall

    li $s1, 0       #sum value
    li $s2, 0       #min value
    li $s3, 0       #max value
    li $s4, 0       #variance value
    li $t0, 0       #list iterator
    li $t1, 0       #index i


loop:
    li $v0, 5       #input number
    syscall

    slt $s2, $v0, $zero #negative value ends loop
    beq $s2, 1, end_loop

    move $s0, $v0

store_array:    #store input into array
    sw $s0, array($t0)  #store array value at $t0 into $t2
    addi $t0, $t0, 4    #add offset to iterator
    addi $t1, $t1, 1    #i++ index
    addu $s1, $s1, $s0  #add current array value to sum
    bgt $s0, $s3, max_val   #if $t2 > max, set max = $t2
return:
    beq $t1, 1, first
    blt $s0, $s2, min_val   #if $t2 < min, set min = $t2

    j loop

min_val:
    move $s2, $s0
    j loop

max_val:
    move $s3, $s0
    j return

first:
    move $s2, $s0
    j loop

end_loop:
    lwc1 $f6, zero
    mtc1 $s1, $f0
    mtc1 $t1, $f1
    cvt.s.w $f0, $f0
    cvt.s.w $f1, $f1
    div.s $f2, $f0, $f1 #divide sum and size for float mean

    li $t0, 0
    li $t2, 2
    li.s $f4, 0.0
print_result:
    li $v0, 4   #print mean prompt and value
    la $a0, mean
    syscall

    li $v0, 2
    mov.s $f10, $f2
    syscall

    li $v0, 4   #print variance prompt and value
    la $a0, variance
    syscall

    li $v0, 2
    div.s $f11, $f4, $f1
    syscall
        jr $ra

我希望输入 1、2、3 的平均值为 2.00000000。它改为打印 0.00000000。

标签: floating-pointmipsqtspim

解决方案


推荐阅读