2011-09-19 59 views
1

我在网上找不到这个例子,我甚至不知道从哪里开始搜索。我对于ASM相当陌生,并且正在大学攻读MIPS课程。我会说这是家庭作业的一部分,但这不是提示。只需要在更大的程序中实施,以使其工作方式符合我的需要。在MIPS汇编中初始化n个寄存器的最高测试循环

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

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

这基本上就是我迄今为止...

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

next2: 

回答

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 

你可以使用自修改代码来代替,但不推荐。

+0

太棒了!我很欣赏这个例子。 – Chris