我是 MIPS 程序集的新手,我正在尝试检查我的 'sge' 操作是否返回真或假,这是否是检查此问题的有效方法(使用 1 表示真,零表示假)?
sge $t1, $c, $a
beq $t1, 1, TRUE
beq $t1, 0, FALSE
TRUE: add $s0, $s1, 1
FALSE: sub $s0, $s1, 1
beq <register>,<immediate value>, label
不是合法的 MIPS 指令。真正的 MIPS 指令只有一个字段用于立即数,例如常量或分支偏移量。(一些 MIPS 汇编器可能将其实现为伪指令)。
一种更惯用的写法是:
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