也许快速修复,但我试图更好地了解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)
答案 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
更好的解决方案是使用blt
和bgt
,这里有一个最常见的解决方案:
blt $t0, $t1, _2ndloop # branch to _2ndloop if($t0 < $t1)
blt $t2, $t0, _2ndloop
_1stloop:
# do something
_2ndloop:
# do something