mips存储指令偏移量和移动指令

问题描述:

所以我一直在写mips程序,它使用循环,分支,然后在计算完成后存储值。mips存储指令偏移量和移动指令

我不直接从我的编码问问题;但是,关于mips编程的一些一般问题,我并没有经历过。

问题是可以使用也是寄存器的偏移量将字,字节(sw,sb)存储到寄存器吗?

我的意思是,当我使用循环有时我想存储地址值从0-8(0偏移到第8偏移量)。

在这种情况下,我不能这样做

sb $t0, 0($a0) 
# assume $t0 is my value, and $a0 is the register that contains the address I want to access to 

,因为在同一个地址,这将始终储值不管多少次,我经历的循环,每一次将覆盖值。

所以是有可能有这样的事情

# assume $t0 is my value, $t1 is my offset index, 
# $a0 is the register that contains the address I want to access to 
.... outside the loop .... 
add $t1, $zero, $zero # initialize $t1=0 
.... inside the loop .... 
sb  $t0, $t1($a0)  # store $t0(byte) to 0($a0) 
addi $t1, $t1, 1   # increment the value of $t1 by 1 

在这种情况下,我可以存储从0($ A0)字节说8($ A0)。

另一个问题是关于使用移动指令。

这些说明是否相互等同?

# assume $t0 is empty register, $s0 is the target 
add $t0, $s0, $zero # $t0 = $s0+0 
move $t0, $s0   # $t0 = $s0 

他们什么时候可以等价,什么时候不能?

如果问题很混乱,请事先致谢并对缺少解释感到抱歉。

p.s.对于第一个问题,sll或srl可能会更好,但如果是的话,你可以举个例子吗?

  1. 不,你只需要自己添加两个寄存器。在一个循环中,也许你可以迭代使用指针,而不是索引。
  2. 是的,虽然编译器可能为move生成不同的指令,这是一个伪指令。
+0

哇,我完全忘了指针,我怎么会哈哈。感谢您的回答,我注意到我也可以在数据段中分配'.space',并将其用作我以后的存储空间。 – dnTosh