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