鉴于两个寄存器$s0
, $s1
,我怎么能只使用转换下面的伪代码为MIPS汇编语言slt
(设置小于)和beq
和bne
(分支如果相等,如果不相等转移)指令。
if ($s0 > $s1) { goto label1 }
if ($s0 >= $s1) { goto label2 }
if ($s0 <= $s1) { go to label3 }
鉴于两个寄存器$s0
, $s1
,我怎么能只使用转换下面的伪代码为MIPS汇编语言slt
(设置小于)和beq
和bne
(分支如果相等,如果不相等转移)指令。
if ($s0 > $s1) { goto label1 }
if ($s0 >= $s1) { goto label2 }
if ($s0 <= $s1) { go to label3 }
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
我假设的伪代码依次执行,而且你不能去两个不同的标签。
我认为应该是:
stl $at, $s1, $s0
bne $at, $zero, label1
stl $t0, $s0, $s1
beq $t0, $zero, label2
stl $t1, $s1, $s0
beq $t1, $zero, label3
label1:
label2:
label3: