Pergunta

O código a seguir usado para implementar a instrução

sllv $s0, $s1, $s2

que utiliza os 5 bits menos significativos do valor no registrador $ s2 para especificar a quantidade registar $ s1 deve ser deslocada para a esquerda:

          .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

Eu sei o que a maioria dessas instruções estão fazendo.

Eu não no entanto entender como a segunda palavra de carga está carregando algo de shifter que em si é uma instrução e não uma palavra.

Além disso, o valor da máscara em hexadecimal quando convertido para binário não tem zeros em 5 locais menos significativos como a questão diz então eu não sei como ele vai mascarar os menos 5 lugares Ass.

Foi útil?

Solução

Isso é uma espécie de rotunda maneira de fazê-lo. É realmente modificar a instrução na memória para executar a mudança! Se você seguir o código, você vai ver que a instrução sll $s0,$s1,0 é carregado, tem seu campo sa modificado a partir 0 para $s2 e, em seguida, volta para a memória salvos e executados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top