增加MIPS汇编中的寄存器?

时间:2014-03-06 15:58:49

标签: assembly mips cpu-registers

我正在编写一个MIPS程序来对8个ascii atrings进行排序,其地址在寄存器$ t0-7中。比较两个字符串时,我需要将地址传递给一个函数(通过保存到$ s0和$ s1)。如果我想在循环中执行此操作,如何递增寄存器值?我可以这样做吗?或者我是否需要将地址全部放在内存中?

例如,如果我的循环是这样的,那么在伪代码中:

for loop with index i:
 move address from register j into $s0
 move address from register j+1 into $s1
 call function for return value
 use return value to perform swapping operation
 increment i
 jump back to loop if i<bound

在j是任意的情况下,我只是展示了如何从两个连续的寄存器中检索。

对于寄存器,有没有办法使用偏移表示法,就像你可以使用内存位置一样?

3 个答案:

答案 0 :(得分:1)

“有没有办法像寄存器一样使用偏移表示法来存储位置?”

不,不!访问寄存器在汇编指令中是硬编码的。您无法访问计算寄存器。

答案 1 :(得分:1)

要递增寄存器,请为其添加1。像这样:

addiu $t0, $t0, 1

MIPS上有许多寄存器。如果您不想在某些寄存器中删除基址,请使用另一个寄存器作为基址+偏移量,并根据需要增加它。或者使用第三个寄存器作为循环计数器,并根据需要重新计算基数+偏移量。

答案 2 :(得分:0)

如果您真的想要,可以使用自修改代码。但我怀疑你是否愿意,可能会对缓存造成严重破坏并产生开销,使机器指令变得尖锐。