MIPS输入中双精度数的和

MIPS输入中双精度数的和,mips,Mips,如何获得通过键盘插入并保存在堆栈中的多个双精度数据的总和? 这是我的代码,但请给出以下输出: 0.0 double是8字节,而不是4字节。因此,您需要调整地址增量,并使用ldc1/sdc1而不是lwc1/swc1双精度是8字节,而不是4字节。因此,您需要调整地址增量,并使用ldc1/sdc1而不是lwc1/swc1嗨,Michael,谢谢您的回答。我已经调整了堆栈的字节数,但是,当我使用ldc1或sdc1时,Mars会给我以下错误:0x00400080处的运行时异常:ldc1或sdc1行的双字边

如何获得通过键盘插入并保存在堆栈中的多个双精度数据的总和? 这是我的代码,但请给出以下输出: 0.0


double是8字节,而不是4字节。因此,您需要调整地址增量,并使用
ldc1
/
sdc1
而不是
lwc1
/
swc1
双精度是8字节,而不是4字节。因此,您需要调整地址增量,并使用
ldc1
/
sdc1
而不是
lwc1
/
swc1

嗨,Michael,谢谢您的回答。我已经调整了堆栈的字节数,但是,当我使用ldc1或sdc1时,Mars会给我以下错误:0x00400080处的运行时异常:ldc1或sdc1行的双字边界0x7fffefec上的地址未对齐。如果我使用lwc1或swc1,我会得到:1.273197475E-314如果我添加3.20+3.20,你能帮我吗?然后你需要确保地址是双字对齐的。不清楚这个地址最初来自哪里。如果它是在
.data
部分声明的数组,则应在其前面加上
.align 3
我已从键盘上请求了一个数字,将其乘以8,然后在堆栈中减去结果,所有这些都在.text部分。地址按约定在函数中传递--->例如move$a0,$sp。您希望它是16的倍数。因此,使用
sub
确保4个最低有效位为零。并确保在使用阵列时将
$sp
恢复到其原始值。Mmmm。。。我不明白我的朋友。。。如果我在堆栈24字节处减去3个数字,并尝试用ldc1保存,为什么Mars会给我一个未对齐双字的错误?我怎样才能解决这个问题?嗨,迈克尔,谢谢你的回答。我已经调整了堆栈的字节数,但是,当我使用ldc1或sdc1时,Mars会给我以下错误:0x00400080处的运行时异常:ldc1或sdc1行的双字边界0x7fffefec上的地址未对齐。如果我使用lwc1或swc1,我会得到:1.273197475E-314如果我添加3.20+3.20,你能帮我吗?然后你需要确保地址是双字对齐的。不清楚这个地址最初来自哪里。如果它是在
.data
部分声明的数组,则应在其前面加上
.align 3
我已从键盘上请求了一个数字,将其乘以8,然后在堆栈中减去结果,所有这些都在.text部分。地址按约定在函数中传递--->例如move$a0,$sp。您希望它是16的倍数。因此,使用
sub
确保4个最低有效位为零。并确保在使用阵列时将
$sp
恢复到其原始值。Mmmm。。。我不明白我的朋友。。。如果我在堆栈24字节处减去3个数字,并尝试用ldc1保存,为什么Mars会给我一个未对齐双字的错误?我怎样才能解决这个问题?
load_number:
move $t0, $a0 
move $t1, $a1
#counter
li $t2,0

while:
    beq $t2, $t1, end_load
    #read a double
    li $v0, 7
    syscall
    #save in the stack
    swc1 $f0, ($t0)
    addi $t0, $t0, -4
    addi $t2, $t2, 1
    #Repeat
    j while

 ............

while_sum:
    beq $t2, $t1, end_sum
    lwc1  $f2, ($t0)
    add.d $f4, $f4, $f2
    addi $t0, $t0, 4
    addi $t2, $t2, 1
    j while_sum

end_sum:

    li $v0, 3
    mov.d $f12, $f4
    syscall