0

私は 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
4

1 に答える 1

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 
于 2012-09-21T20:31:34.803 に答える