Assegnazione di montaggio MIPS - problema con una parola di carico
Domanda
Il seguente codice utilizzato per implementare l'istruzione
sllv $s0, $s1, $s2
che utilizza meno significativi 5 bit del valore nel registro $ s2 per specificare la quantità registro $ s1 dovrebbe essere spostato a sinistra:
.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
So cosa la maggior parte di tali istruzioni stanno facendo.
Non però a capire come la seconda parola carico sta caricando qualcosa da shifter che è essa stessa un'istruzione e non una parola.
Anche il valore della maschera in esadecimale una volta convertito in binario non ha zeri in meno 5 luoghi significativi come la questione dice così io non sono sicuro di come sarà mascherare meno 5 posti sig.
Soluzione
Questo è il genere di un modo rotonda di farlo. In realtà è la modifica del istruzioni in memoria per eseguire lo spostamento! Se si segue il codice, vedrete che l'istruzione sll $s0,$s1,0
viene caricato, ha il suo campo sa
modificato da 0
a $s2
e quindi salvato di nuovo in memoria ed eseguito.