MIPS组装,注册遍历?

您好,并提前感谢, 我的问题是,是否有可能通过寄存器,如在一个($ t0)中指针并将指针移动到另一个($ t1)。 我真正想做的是在一个循环中读取8个整数并将它们存储在($ s0- $ s7)     
已邀请:
您可以尝试更改
sw
操作码中的位以指向增加寄存器,但这是一个糟糕的主意。我认为你最好的选择就是自己编写你的展开循环:
lw $s0, $t0
addi $t0, $t0, 4
lw $s1, $t0
...
重新排列东西以减少摊位,但这与你将获得的一样好。     
您想要一个寄存器编号可变吗?我不知道内部和外部的MIPS,但我怀疑这是可能的。我所知道的唯一具有类似功能的ISA是SPARC(注册窗口,不能用于你想要的)和IA64(“旋转寄存器”,可以用于你想要的,但只能用于浮点)。     
我不知道现有的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
    

要回复问题请先登录注册