0

也许是一个快速的解决方案,但我试图更好地了解 Mips,我已经被这个问题困住了一段时间。

试图弄清楚当 n 满足要求时如何分支 (1<= n <= 30)

我知道我可以将 blez 用于小于 1 的东西,但是如何同时检查它是否大于 26?

我以为我可以使用 slt,但我不明白如何实现它。

查看此链接以查看 slt 是否有帮助。

只是总结一下我想要做的事情:

$t0 = n
$t1 = 1
$t2 = 30

 if ($t1 <= $t0 <= $t2) { go to 1stloop }
 else ( go to 2ndloop)
4

2 回答 2

1

假设数字在 中$v0,您可以测试它是否在 1-26 范围内,如下所示:

blez $v0,error    # if ($v0 < 1) goto error
sltiu $t0,$v0,27  # $t0 = ($v0 < 27) ? 1 : 0
blez $t0,error    # if ($v0 >= 27) goto error

# Proceed with normal operation
....

error:
# Handle out-of-range input (e.g. print a message to the user)

有关slt*指令的更多信息,请参阅MIPS 指令集参考

于 2013-09-17T08:56:22.280 回答
0

如果你想使用slt,这将工作正常。

    li    $t0, n
    li    $t1, 1
    li    $t2, 30

    slt   $s0, $t0, $t1     #$s0 = ($t0 < $t1) ? 1 : 0
    beq   $s0, 1, _2ndloop
    slt   $s0, $t2, $t0
    beq   $s0, 1, _2ndloop

_1stloop:
    # do something

_2ndloop:
    # do something

更好的解决方案是使用bltand bgt,这是一个片段:

    blt   $t0, $t1, _2ndloop     # branch to _2ndloop if($t0 < $t1)
    blt   $t2, $t0, _2ndloop
_1stloop:
    # do something

_2ndloop:
    # do something
于 2016-02-05T01:19:59.720 回答