19

$s02 つのレジスタ,が与えられた場合、次の疑似コードを(未満で設定)および(等しい場合は分岐、等しくない場合は分岐) 命令$s1のみを使用して MIPS アセンブリ言語に変換するにはどうすればよいでしょうか。sltbeqbne

   if ($s0 > $s1) { goto label1 }
   if ($s0 >= $s1) { goto label2 }
   if ($s0 <= $s1) { go to label3 }
4

2 に答える 2

37

疑似コードは順次実行されると想定しているため、前の条件が true であるということは、そこに移動して後のifステートメントに到達しないことを意味します。これにより、最後のブランチに到達した場合に確実に行われるようになるため、条件付きである必要さえありません。(また、これが分岐遅延スロットのない MIPS であると仮定します。)

slt  $t1,$s1,$s0      # checks if $s0 > $s1
bne  $t1,$zero,label1 # if $s0 >  $s1, goes to label1
beq  $s1,$s2,label2   # if $s0 == $s2, goes to label2 
# beq  $t1,$zero,label3 # if $s0 <  $s1, goes to label3
b    label3            # only possibility left

そうでない場合は、たとえば Ahmed の回答に示されているように、/を使用$s0 >= $s1して実装する必要があります。
!($s0 < $s1)slt $t1, $s0, $s1beqz $t1, target

于 2013-03-03T09:33:13.887 に答える