仅使用两个浮点整数重写代码序列

时间:2016-04-01 13:33:45

标签: mips cpu-architecture

我正在尝试仅使用两个浮点整数重写代码序列。 我意识到我必须使用临时内存位置来保存中间值。我什么都不知道。

  

以下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)

1 个答案:

答案 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