我目前正在实现一个包含MIPS汇编代码中单个浮点数的方矩阵乘法器。
我的问题是,一旦我完成了相应行和列的乘法运算以计算我的点积我想清除浮点寄存器,这样我就可以计算产品矩阵中下一个条目的点积。现在我继续添加当前的dot产品和所有以前的dot产品。
我试图将浮点寄存器设置为零:
l.s $f3,$0 #loading zero into the register
addi $t0,$t0,$zero #setting a temp register as zero
l.s $f3,($t0)
我不断收到错误,指出运行时异常和地址超出范围。
答案 0 :(得分:3)
你正在做的是从地址0加载浮点数,因此是错误。您想要加载值0。您可以mtc1 $zero, $f3
执行此操作。这是有效的,因为所有零位在浮点时也意味着零。对于其他值,您之后必须执行cvt.s.w
才能将整数转换为浮点数。或者,您可以通过sub.s $f3, $f3, $f3
从自身中减去寄存器。不知道这是否适用于所有可能的值(我正在考虑NaN
,Inf
等),或者它是否比从整数零寄存器转移更快。