Preguntas: Moisés E. Ramírez G. | UTM |

Hasta el momento hemos considerado a las instrucciones MIPS compuestas de un nombre (nemotécnico) y una serie de operandos; sin embargo dentro de la computadora las instrucciones se almacenan en memoria como pequeños capacitores cargados o descargados y se transfieren entre dispositivos como señales eléctricas con niveles de voltajes altos (5 volts) y bajos (0 volts). Por lo que son suficientes dos símbolos para la representación de las instrucción. Un sistema numérico con dos símbolos es el sistema binario, por eso se utiliza para la representación de las instrucciones.



Figura 3.3.1 Una instrucción típica MIPS y los pasos de su ejecución

Sólo hemos considerado 2 tipos de instrucciones, aritméticas y de transferencia de datos, si las comparamos podremos notar que en ambos casos existen tres operandos, en el caso de las instrucciones aritméticas los tres operandos son registros (y como son 32 registros, con 5 bits es suficiente su representación) y para las transferencias de datos dos operandos son registros y el tercero es una constante, es evidente que no es posible disponer solo de 5 bits para el valor de la constante, puesto que su valor sería muy limitado. Lo que implica que si se quiere conservar el mismo formato para ambas instrucciones, estas tendrían diferentes tamaños. Esto da pie al tercer principio de diseño:

Principio de diseño 3: Un buen diseño demanda compromisos.

Los diseñadores de MIPS enfrentaron el problema de decidir si mantenían a todas las instrucciones del mismo tamaño, generando con ello diferentes formatos de instrucciones o si mantenían el formato ocasionando instrucciones de diferentes tamaños. Se comprometieron con el primer punto y buscando regularidad con el tamaño de los datos, todas las instrucciones en MIPS son de 32 bits.

De manera que se tienen diferentes formatos, las instrucciones aritméticas son del Tipo-R por que se aplican sobre registros. El formato para las instrucciones Tipo-R es:

El significado para cada uno de los campos es:

Las instrucciones lw y sw son del tipo-I, por que incluyen una constante (dato inmediato). El formato para las instrucciones del tipo-I es:

En este caso tenemos:

Ejemplo: Trasladando a código máquina.
¿Cuál es el código máquina de la instrucción: add $t0, $s1, $s2 ?

Respuesta:
Tomando como referencia la tabla 3.1.2 observamos que el registro $t0 es el 8 , $s1 es el 17 y $s2 es el 18. De manera que la representación en decimal de esta instrucción es:


Y su representación binaria corresponde a:

Ejemplo: Trasladando cargas y almacenamientos.

La asignación en C : A[12] = h + A[8];

Produjo el siguiente código en ensamblador:
lw $t0, 32( $s0) # El registro $t0 contiene A[8]
add $t0, $s1, $t0 # El registro $t0 contiene h + A[8]
sw $t0, 48( $s0) # A[12]= h + A[8]

¿Cuál es su correspondiente código máquina?

Respuesta:

La versión decimal del código máquina es:

Para obtener los números a los que corresponden los registros, puede usarse la tabla 3.1.2, la versión binaria del código corresponde a:

Actualmente las computadoras se construyen bajo dos principios clave:

  1. Las instrucciones se representan como números.
  2. Los programas pueden ser almacenados en memoria para ser leídos o escritos al igual que los números.

Estos principios permiten el concepto del programa almacenado, en la figura 3.3.2 se muestra la potencialidad de este concepto, específicamente la memoria puede contener el código fuente para un programa editor, el correspondiente código máquina compilado, el texto que el programa compilado está usando, y también al compilador que generó el código máquina.

Figura 3.3.2 El concepto del programa almacenado,
ilustrado por medio de un ejemplo.