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可能会更好,但如果是的话,你可以举个例子吗?
答
- 不,你只需要自己添加两个寄存器。在一个循环中,也许你可以迭代使用指针,而不是索引。
- 是的,虽然编译器可能为
move
生成不同的指令,这是一个伪指令。
哇,我完全忘了指针,我怎么会哈哈。感谢您的回答,我注意到我也可以在数据段中分配'.space',并将其用作我以后的存储空间。 – dnTosh