私は MIPS アセンブリに不慣れで、「sge」操作が true または false を返したかどうかを確認しようとしています。これはこれを確認する有効な方法ですか (true の場合は 1、false の場合は 0 を使用)
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 命令には、定数や分岐オフセットなどの即値用のフィールドが 1 つしかありません。(一部の 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