Search code examples
assemblymipssll

Why shift a bit using sll and such in MIPs Assembly?


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.


Solution

  • its pretty much just shifting all the bits left by 1

    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, but SLL $zero, $zero, 0 is used to encode a NOP on MIPS).

    A logical left shift by N bits can be used as a fast means of multiplying by 2^N (2 to the power of N). So the instruction sll $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.