0
所以我一直在寫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可能會更好,但如果是的話,你可以舉個例子嗎?
哇,我完全忘了指針,我怎麼會哈哈。感謝您的回答,我注意到我也可以在數據段中分配'.space',並將其用作我以後的存儲空間。 – dnTosh