Assembly MIPS中大于、小于等于、大于等于

Assembly MIPS中大于、小于等于、大于等于,assembly,mips,Assembly,Mips,给定两个寄存器$s0,$s1,如何仅使用slt(设置为小于)和beq以及bne(分支如果相等,分支如果不相等)指令将以下伪代码转换为MIPS汇编语言 if ($s0 > $s1) { goto label1 } if ($s0 >= $s1) { goto label2 } if ($s0 <= $s1) { go to label3 } if($s0>$s1){goto label1} 如果($s0>=$s1){goto label2} 如果($s0slt

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

   if ($s0 > $s1) { goto label1 }
   if ($s0 >= $s1) { goto label2 }
   if ($s0 <= $s1) { go to label3 }
if($s0>$s1){goto label1}
如果($s0>=$s1){goto label2}
如果($s0
slt$t1,$s1,$s0#检查$s0>s1
beq$t1,1,标签1#如果$s0>s1,则转到标签1
beq$s1,$s2,label2#如果$s0=$s2,则转到label2
beq$t1,$0,标签3#如果$s0<$s1,则转到标签3

我假设伪代码按顺序执行,并且不能转到两个不同的标签。

我认为应该是:

slt $at, $s1, $s0
bne $at, $zero, label1

slt $t0, $s0, $s1
beq $t0, $zero, label2

slt $t1, $s1, $s0
beq $t1, $zero, label3

label1:
label2:
label3:

完全不适用于MIPS。首先,MIPS没有标志寄存器。请仔细阅读。当然它是适用的。当然,MIPS没有标志寄存器,但这与此无关。
slt
将在$t1中放置一个值,如果$s0>$s1
beq$t1,1,label1
应该是
bnez$t1,label1
bne$t1,
。没有带常量操作数的beq/bne指令(零寄存器除外)。汇编程序可能正在幕后为您做一些工作。
slt $at, $s1, $s0
bne $at, $zero, label1

slt $t0, $s0, $s1
beq $t0, $zero, label2

slt $t1, $s1, $s0
beq $t1, $zero, label3

label1:
label2:
label3: