MIPS大于,小于等于,大于等于

jay*_*ynp 10 assembly mips

给定两个寄存器$s0,$s1如何仅使用slt(在小于时设置)beqbne(如果相等则为分支,如果不相等的分支)指令将以下伪代码转换为MIPS汇编语言.

   if ($s0 > $s1) { goto label1 }
   if ($s0 >= $s1) { goto label2 }
   if ($s0 <= $s1) { go to label3 }
Run Code Online (Sandbox Code Playgroud)

小智 25

slt $t1,$s1,$s0      # checks if $s0 > $s1
beq $t1,1,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
Run Code Online (Sandbox Code Playgroud)

我假设伪代码顺序执行,你不能去两个不同的标签.

  • 当然它适用.当然MIPS没有标志寄存器,但这与此无关.如果$ s0> $ s1,`slt`将在$ t1中放置值1 (14认同)
  • `beq $t1,1, label1` 应该是 `bnez $t1, label1` 或 `bne $t1, $zero, label1`。没有带有常量操作数的 beq/bne 指令(零寄存器除外)。汇编程序可能在幕后为您做一些工作。 (2认同)