Pregunta

El siguiente código utilizado para implementar la instrucción

sllv $s0, $s1, $s2

que utiliza los bits menos significativos 5 del valor en el registro $ s2 para especificar la cantidad registro $ s1 se debe desplazar a la izquierda:

          .data
   mask:  .word  0xfffff83f
          .text
  start:  lw     $t0, mask
          lw     $s0, shifter
          and    $s0,$s0,$t0
          andi   $s2,$s2,0x1f
          sll    $s2,$s2,6
          or     $s0,$s0,$s2
          sw     $s0, shifter
shifter:  sll    $s0,$s1,0

Yo sé lo que la mayoría de esas instrucciones están haciendo.

No obstante, no entiendo como la segunda palabra de carga está cargando algo de palanca de cambios que en sí es una instrucción y no una palabra.

También el valor de la máscara en hexadecimal cuando se convierte a binario no tiene ceros en los menos 5 lugares significativos como la pregunta dice así que no estoy seguro de cómo se va a enmascarar los lugares menos 5 sig.

¿Fue útil?

Solución

Eso es algo de una manera rotonda de hacerlo. De hecho, es la modificación de la instrucción en la memoria para llevar a cabo el cambio! Si sigue el código, verá que la instrucción sll $s0,$s1,0 se carga, tiene su campo sa modificado a partir 0 a $s2 y se guarda en la memoria y volver ejecutado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top