顶部测试循环,初始化MIPS汇编中的n个寄存器

时间:2011-09-19 06:47:38

标签: loops assembly mips

我在网上找不到这个例子,我甚至不知道从哪里开始搜索。我对asm很新,而且我正在上大学攻读MIPS课程。我会说这是家庭作业的一部分,但这不是提示。我需要在更大的程序中实现我想要的工作方式。

无论如何,我要做的是创建一个顶级测试循环,根据单独寄存器的值设置“n”个寄存器。

例如,如果我将$ t0设置为3,我希望循环执行3次并提示输入$ t1,$ t2和$ t3。我知道如何完成输入提示,我只需要帮助设计一个可以实现此目的的循环。有关从何处开始或需要使用哪些操作的提示?

这基本上就是我到目前为止......

li $t2, 1
next1:
beq $t2, $s1, next2
    # loop code
addi $t2, $t2, 1    
j next1

next2:

1 个答案:

答案 0 :(得分:2)

没有简单的方法可以做到这一点,因为目标寄存器通常硬编码到指令编码中。

您可以使用等效的switch语句:

sll $a0, 2  # $a0 = 8 * $a0
# set one of $t0,$t1,...,t7 to the value of $a1 as selected by the value of $a0
b $a0(SW)
nop           # branch delay slot
DONE:
...
# switch cases start here. Each case uses 2 instructions
SW:
b DONE        # case 0
mov $t0, $a1  # branch delay slot
b DONE
mov $t1, $a1
...
b DONE
mov $t7, $a1
# end of switch cases

您可以使用自修改代码,但不建议这样做。