Si quiero cargar un valor de una dirección de memoria que la base está en $ a0 y fuera del set $ t2, por qué no puedo hacer lo siguiente:MIPS palabra de carga sintaxis
lw $s2, $a1($t2)
así que lo que es el equivalente de la expresión anterior?
Si quiero cargar un valor de una dirección de memoria que la base está en $ a0 y fuera del set $ t2, por qué no puedo hacer lo siguiente:MIPS palabra de carga sintaxis
lw $s2, $a1($t2)
así que lo que es el equivalente de la expresión anterior?
No puede hacer eso porque no hay codificación de instrucciones MIPS que admita tal cosa. Que tiene que hacer la adición a ti mismo:
add $a2, $a1, $t2
lw $s2, 0($a2)
La codificación de instrucciones lw
se ve así:
1000 11ss ssst tttt iiii iiii iiii iiii
Dónde sssss
es el número de registro de origen, ttttt
es el número de registro de destino, y iiiiiiiiiiiiiiii
es la inmediata . No hay espacio en esa codificación (y no hay codificaciones de instrucciones alternativas) que usan dos registros para generar la dirección de memoria. La instrucción de máquina específica que conseguir codificado en el ejemplo anterior es:
1000 1100 1101 0010 0000 0000 0000 0000
Desde la inmediata es 0
, $s2
es registrarse 18
y $a2
es registrarse 6
.
i love mips ... tan simple – Polaris878
@ Polaris878, Yay for RISC! –