< =和> = Mips表示

时间:2013-09-17 08:40:32

标签: assembly mips

也许快速修复,但我试图更好地了解Mips,我一直坚持这个问题。

试图找出当n满足要求时如何分支(1< = n< = 30)

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

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

Looked at this link to see if slt would help.

总结我想做的事情:

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

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

2 个答案:

答案 0 :(得分: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*说明的详细信息,请参阅a MIPS instruction set reference

答案 1 :(得分: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

更好的解决方案是使用bltbgt,这里有一个最常见的解决方案:

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

_2ndloop:
    # do something