我正在编写一个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是任意的情况下,我只是展示了如何从两个连续的寄存器中检索。
对于寄存器,有没有办法使用偏移表示法,就像你可以使用内存位置一样?
答案 0 :(得分:1)
“有没有办法像寄存器一样使用偏移表示法来存储位置?”
不,不!访问寄存器在汇编指令中是硬编码的。您无法访问计算寄存器。答案 1 :(得分:1)
要递增寄存器,请为其添加1。像这样:
addiu $t0, $t0, 1
MIPS上有许多寄存器。如果您不想在某些寄存器中删除基址,请使用另一个寄存器作为基址+偏移量,并根据需要增加它。或者使用第三个寄存器作为循环计数器,并根据需要重新计算基数+偏移量。
答案 2 :(得分:0)
如果您真的想要,可以使用自修改代码。但我怀疑你是否愿意,可能会对缓存造成严重破坏并产生开销,使机器指令变得尖锐。