簡體   English   中英

為什么我需要 sll 在 $t1 中添加四個零,我不明白需要使用 sll 將 $s3 與 2 相乘兩次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM