0

我是 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
4

1 回答 1

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