我正在尝试仅使用两个浮点整数重写代码序列。 我意识到我必须使用临时内存位置来保存中间值。我什么都不知道。
以下MIPS代码计算浮点表达式E = A * B + C * D,其中A,B,C,D和E的地址存储在R1,R2,R3,R4和R5中分别为:
L.S F0, 0(R1)
L.S F1, 0(R2)
MUL.S F0, F0, F1
L.S F2, 0(R3)
L.S F3, 0(R4)
MUL.S F2, F2, F3
ADD.S F0, F0, F2
S.S F0, 0(R5)
答案 0 :(得分:2)
您必须将中间结果(例如A * B)存储到存储器或自由通用寄存器中,然后计算第二次乘法(例如C * D),然后检索中间结果以执行加法。 / p>
例如(假设R1
- R5
实际上是$t1
- $t5
)
text
l.s $f0, 0($t1)
l.s $f1, 0($t2)
mul.s $f0, $f0, $f1
s.s $f0, 0($t5) # Here we store the intermediate value
l.s $f0, 0($t3)
l.s $f1, 0($t4)
mul.s $f0, $f0, $f1
l.s $f1, 0($t5) # Retrieve intermediate value
add.s $f0, $f0, $f1
s.s $f0, 0($t5)
如果要将中间值存储到通用寄存器(比如$ t6),那么你会改变
s.s $f0, 0($t5) # Here we store the intermediate value
到
mfc1 $t6, $f0 # Copy intermediate value to $t6
和
l.s $f1, 0($t5) # Retrieve intermediate value
到
mtc1 $t6, $f1