Если вы попытаетесь превратить 12 в степень двух умножений (что легко сделать с помощью сдвига):
12 = 4 * 3 = 4 * (2 + 1)
Итак, предполагая, что a0 имеет исходное значение, которое вы бы сделали в сборке, эквивалентной:
t0 = a0<<1 # the 2 part
t0 = t0 + a0 # that's the 2+1 done
a0 = t0<<2 # that's the 4 * (2 + 1) put back to the original register
Так же и ассемблер, все еще предполагая, что в a0 есть число (и работает в том же порядке, что и выше):
sll $t0, $a0, 1
add $t0, $t0, $a0
sll $a0, $t0, 2
Теперь a0 имеет результат