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