我正在编写MIPS程序集以用于以下语句:
nil
使用以下寄存器
f = a - 20 + b + c - d
我的回答是:
$1 a
$2 b
$3 c
$4 d
$5 f
$6 g
$7 i
$8 j
$9 A
10$ D
现在常数-20让我失望了,我不确定我是否正确处理了它。
或者我能做到:
add $5,$2, $3 // f=b+c
addi 5$,5$,-20 // f=f+(-20)
add $5,$1,5$ // f=a+f
sub $5,$5,$4 // f=f-d
sw $5,o($5) // stores the answer
答案 0 :(得分:1)
不要使用$1
,它通常为汇编程序保留为$at
用于伪指令。
您的代码可能如下所示
addui $5, $1, 0xFFEC # or a-20 in twos complement, but it should be the same
addu $5, $5, $2 #
addu $5, $5, $3 #
subu $5, $5, $4 #
这一行
sw $5,o($5) // stores the answer
没有多大意义,因为您将$5
保存到$5 + o
,这看起来像是依赖于结果的位置。
然而,你的第二个代码是不正确的,因为它意味着
f = a - (b + c + 20) - d
f = a - b - c - 20 - d