[英]why i need sll to add four zeros in $t1, i dont understand the need to multiply $s3 with 2 twice using sll
c代碼
while (save[i]==k)
i+=1;
將 i 放入 $s3,將 k 放入 $s5,將 k 的地址放入 $s6
mips代碼
loop: sll $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0($t1)
bne $t0, $s5, Exit
addi $s3, $s3, 1
j loop
Exit:
您的save
數組/指針必須是某種 4 字節類型( int
s?)。 因此,要從 memory 加載save[i]
,索引i
需要轉換為數組中的字節偏移量,然后添加到該數組的基地址。 這是通過將i
乘以四來完成的:
sll $t1, $s3, 2
然后添加save
:
add $t1, $t1, $s6
不過,這看起來不像是優化的構建。 通常編譯器可以重寫此代碼以直接以四為增量推進一個臨時指針,從而避免該循環中的兩條指令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.