[英]MIPS assembly, register traversing?
您好,谢谢!
我的问题是,是否有可能像在一个指针中放置一个指针($ 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
和分支检查(至少)。 即使不考虑分支停顿,这也比简单慢至少三倍:
move $t0, $s0
move $t1, $s1
...
move $t8, $s8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.