[英]Why shift a bit using sll and such in MIPs Assembly?
所以我理解命令sll正在做什么,因為我讀到這個並且它幾乎只是將剩下的所有位移位1.我只是想知道為什么我會這樣做?
我有一個來自類的作業,有一個例子......其中$ s6和$ s7是數組的基地址,而$ s1 / $ s2只是一些變量。
sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
...
為什么要轉移一下? 它用簡單的術語做什么? 我首先想到它與索引數組中的變量有關...但我不確定。
它幾乎只是將剩下的所有位移1
他們展示的例子是1位移位。 sll
指令不僅限於移位1位; 您可以指定0..31范圍內的移位量(0移位似乎無用,但SLL $zero, $zero, 0
用於在MIPS上編碼NOP
)。
N
比特的邏輯左移可以用作乘以2^N
(2到N的冪)的快速均值。 因此指令sll $t0, $s0, 2
將$s0
乘以4(2 ^ 2)並寫回$t0
。 這在例如縮放在訪問字陣列時使用的偏移時是有用的。
將數字向左移位與將該數字乘以2相同。更一般地,向左移位數字N位與將該數字乘以2 ^ N相同。
當數組的每個元素的大小為2的冪時,它被廣泛用於計算數組的偏移量。
我在程序中看到在$ s0和$ s2寄存器上應用了簡單的sll! 在指令sll $ t0,$ s0,2中,寄存器$ s0的值將乘以4.您可以在Shift左側邏輯示例中清除更多
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.