So I understand somewhat what the command sll is doing, as I read this and its pretty much just shifting all the bits left by 1. I'm just wondering why would I do this?
I have an assignment from class with an example of it... Where $s6 and $s7 is the base address for an array and $s1/$s2 are just some variables.
sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
...
Why shift a bit? What is it doing in simple terms? My first thought it has something to do with indexing the variables in the array...but I'm not sure.
The example they showed was a shift by 1 bit. The
sll
instruction isn't limited to just shifting by 1 bit; you can specify a shift amount in the range 0..31 (a shift by 0 might seem useless, butSLL $zero, $zero, 0
is used to encode aNOP
on MIPS).A logical left shift by
N
bits can be used as a fast means of multiplying by2^N
(2 to the power of N). So the instructionsll $t0, $s0, 2
is multiplying$s0
by 4 (2^2) and writing back to$t0
. This is useful e.g. when scaling offsets to be used when accessing a word array.