floating-point - 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。
解决方案
推荐阅读
- c# - Read CSV From Azure Data lake storage Gen 1 in c# .net API
- c++ - How to learn if i am compiling for 32bit or 64bit and how to change that?
- swiftui - 有没有办法改变 SwiftUI 中标签项之间的间距?
- arm - 在 STM32 板上实现 SSI 从接口
- mysql - 根据其他行值调整 MIN(date)
- regex - 从Linux中的单词列表中删除人工生成的单词?
- c++ - C++ 如何知道使用 std::async 启动的线程正在运行?
- node.js - NodeJS事件等效于线程局部变量?
- reactjs - 如何为 Facebook 按钮设置样式
- excel - olFolder.Folders.Add 函数是否有更新的代码?