检查程序集中sge是真还是假

时间:2012-09-21 18:57:05

标签: assembly mips

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

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