您好,并提前致谢,
我的问题是,是否可以通过寄存器,例如在一个($ t0)中指针并将指针移动到另一个($ t1)。
我真正想做的是在一个循环中读取8个整数并将它们存储在($ s0- $ s7)
答案 0 :(得分:0)
您可以尝试更改sw
操作码中的位以指向增加寄存器,但这是一个糟糕的主意。我认为你最好的办法是自己编写你的展开循环:
lw $s0, $t0
addi $t0, $t0, 4
lw $s1, $t0
...
重新安排事情以尽量减少摊位,但这与您将获得的一样好。
答案 1 :(得分:0)
您希望寄存器编号可变吗?我不知道内部和外部的MIPS,但我怀疑这是可能的。我知道的唯一具有类似功能的ISA是SPARC(注册窗口,不能用于你想要的)和IA64(“旋转寄存器”,可以用于你想要的,但只能用于浮点)。
答案 2 :(得分:0)
我不知道现有的MIPS架构支持通过寄存器的内容引用寄存器,这将允许您建议的类型,例如:
move $t0, $zero
mover $t0, $s0 # $s0 = register($t0) = register(0)
addi $t0, 1
mover $t0, $s1 # $s1 = register($t0) = register(1)
addi $t0, 1
...
虽然在任何情况下,我认为这不是一个好主意,原因有几个。首先,你无论如何都要处理非常少量的寄存器,所以在任何情况下循环都有一个小上限,这使得直接方法的灵活性不会太差。
更重要的是,像这样的循环效率非常低。它会为每次迭代初始化,递增,执行move
和分支检查(至少)。即使不考虑分支摊位,这至少比简单慢3倍:
move $t0, $s0
move $t1, $s1
...
move $t8, $s8