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

rewriting the code sequence using two floating point integers only

我正在尝试仅使用两个浮点整数重写代码序列。 我意识到我将不得不使用临时内存位置来保存中间值。别的我就不知道了。

The following MIPS code calculates the floating-point expression E = A * B + C * D,where the addresses of A, B, C, D, and E are stored in R1, R2, R3, R4, and R5,respectively:

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)

您必须将中间结果(例如 A *​​ B)存储到内存或空闲的通用寄存器中,然后计算第二个乘法(例如 C * D),然后检索中间结果以执行加法.

例如(假设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