我是MIPS程序集的新手,我正在尝试检查我的'sge'操作是返回true还是false,这是否是检查此方法的有效方法(使用1表示true,使用0表示false)?
sge $t1, $c, $a
beq $t1, 1, TRUE
beq $t1, 0, FALSE
TRUE: add $s0, $s1, 1
FALSE: sub $s0, $s1, 1
答案 0 :(得分:1)
beq <register>,<immediate value>, label
不是合法的MIPS指令。实际MIPS指令只有一个字段用于立即值,如常量或分支偏移量。 (一些MIPS汇编程序可以将其实现为pseudo instruction)。
更为惯用的写作方式是:
sge $t1, $t2, $t3 # $t2 contains c, $t3 contains a
# sge sets $t1 to 1 if $t2>=$t3 otherwise $t1 gets set to 0
bnez $t1, $zero, TRUE # goto TRUE if $t1 != 0
# at this point we know that $t1==0, so we don't need a conditional branch
b FALSE