2010-02-22 24 views
12

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?

Respuesta

14

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.

+2

i love mips ... tan simple – Polaris878

+1

@ Polaris878, Yay for RISC! –