所以我一直在编写使用循环,分支的mips程序,然后在计算完成后存储值。
我不是直接从我的编码问问题;但是,而是关于mips编程的一些一般性问题,因为我不熟悉它。
问题是,是否可以使用也是寄存器的偏移量将字,字节(sw,sb)存储到寄存器中?
我的意思是,当我使用循环时,有时我想将值存储在地址中,例如0-8(0offset到第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可能会更好,但如果是这样,你能举例吗?
答案 0 :(得分:1)
move
生成不同的指令,这是伪指令。