Introducción a la Arquitectura del MIPS

Tras un largo periodo de inactividad, volvemos para quedarnos. Me pondré estos días a subir una serie de tutoriales más teóricos. Así que vamos con el primero de la serie veamos sobre la arquitectura del MIPS

Conceptos previos:

Antes de entrar en materia debemos saber que el funcionamiento de la CPU está determinado por las instrucciones que ejecuta y que el conjunto de instrucciones distintas que puede ejecutar se denomina repertorio de instrucciones

Existen 2 filosofías a la hora de diseñar un repertorio de instrucciones RISC y CISC:

CISC (Complex Instruction Set Computer)

  • Juego de instrucciones muy rico
  • Modos de direccionamiento potentes y complejos
  • Menos instrucciones de ejecución compleja

RISC (Reduced Instruction Set Computer)

  • Número relativamente pequeño de instrucciones disponibles
  • Sencillas y con pocos modos de direccionamiento
  • Más instrucciones de ejecución muy eficiente

Hablemos sobre MIPS

Con el nombre de MIPS (siglas de Microprocessor without Interlocked Pipeline Stages o dicho en castellano microprocesador sin bloqueos en las etapas de segmentación) se conoce a toda una familia de microprocesadores de arquitectura RISC desarrollados por MIPS Technologies.

Nos podemos encontrar arquitecturas MIPS en muchos sistemas embebidos, en dispositivos para Windows CE, routers Cisco y consolas como la Nintendo 64 o las PlayStation, PlayStation 2 y PSP.

Características de la arquitectura del MIPS

  • Longitud de todas las instrucciones es fija y son de 32 bits.
  • El tamaño de las palabras son siempre de 4 bytes (4*8 = 32bits)
  • Los operandos de las operaciones aritméticas son siempre registros. MIPS es, por tanto, una arquitectura de carga/almacenamiento (registro-registro).
  • El acceso a memoria se hace a través de operaciones de carga/almacenamiento (transferencia de datos).
  • La mayor parte de las instrucciones que acceden a memoria lo hacen de forma alineada, por lo que la dirección a la que se accede debe ser múltiplo de 4.

Registros del camino de datos del MIPS

Los registros se tratan de pequeños montones de memoria que se encuentran en la CPU que son de acceso muy rápido. En el MIPS un registro contiene 32 bits. Hay muchos registros en el procesador, pero solo algunos de ellos son visibles en lenguaje ensamblador. Los otros son utilizados por el procesador para llevar a cabo sus operaciones.

Registros generales:

Los Registros generales son aquellos que se usan comúnmente al programar en lenguaje ensamblador, MIPS posee 32 registros genéricos de 32 bits ($0‐$31). Además de estar numerados tienen también un nombre. Se pueden utilizar de cualquiera de las dos maneras.

Existen otros 32 registros que van desde el $f0 hasta el $f31 que son para los números representados en punto flotante.

Instrucciones en MIPS

Las instrucciones en MIPS las podemos encontrar en 3 formatos

Instrucciones Tipo J: utilizado por las instrucciones de bifurcación

Instrucciones Tipo I: utilizado por las instrucciones de transferencia, las de salto condicional y las instrucciones con operandos inmediatos.

Instrucciones tipo R: utilizado por las instrucciones aritméticas y lógicas.

Directivas en MISP

.data: la directiva .data señala el inicio  del segmento de datos

Tipos de datos

.text:  la directiva .text indica el inicio del  segmento de programa

Llamadas al sistema

La operación exacta que realiza syscall depende del código de servicio que se haya introducido en el registro $v0. Algunos de los servicios necesitan introducir argumentos en el registro $a0 (y ocasionalmente en $a1).Otros servicios devuelven un resultado en el registro$v0

Modos de direccionamiento

  • Modo de direccionamiento registro, donde el operando es un registro.
  • Modo de direccionamiento base más desplazamiento, donde el operando está en una localización de memoria cuya dirección es la suma de un registro y una constante presente en la propia instrucción
  • Modo de direccionamiento inmediato, donde el operando es una constante que aparece en la misma instrucción.
  • Modo de direccionamiento relativo al PC, donde la dirección es la suma del contador de programa (PC) y la constante de la instrucción multiplicada por 4. es conveniente incrementar el PC pronto para apuntar a la siguiente dirección. De aquí que la dirección MIPS es realmente relativa a la dirección de la siguiente instrucción (PC+4) en lugar de a la instrucción actual (PC). ← (PC+4)+4*despl
  • Modo de direccionamiento pseudodirecto, donde la dirección de salto son los 26 bits de la instrucción desplazados 2 posiciones a la izquierda y concatenados con los 4 bits de mayor peso del contador de programa. Esto limita los saltos a 256MB, si necesitáramos saltar más allá tendríamos que sustituir la instrucción jump por jump register precedida por otra instrucción para cargar la dirección de 32 bits completa en el registro ← (PC + 4) [31−28] IR [25−0] 00.

Según el formato de las Instrucciones tenemos que admiten los siguientes modos de direccionamiento:

  • Formato tipo R ← Direccionamiento con Registro
  • Formato tipo I ←  Direccionamiento con Registro + Direccionamiento Inmediato
  • Formato tipo J ← Direccionamiento pseudodirecto

Llamadas a subrutinas

 La ejecución de una subrutina el programa debe seguir los siguientes pasos:

  • 1. Situar los parámetros en un lugar donde la subrutina pueda acceder a ellos.
  • 2. Transferir el control a la subrutina.
  • 3. Adquirir los recursos de almacenamiento necesarios para el procedimiento.
  • 4. Realizar la tarea deseada.
  • 5. Situar el valor del resultado en un lugar donde el programa que lo ha llamado pueda acceder a él.
  • 6. Retornar el control al punto de origen

Gestión de Memoria en MIPS

Segmento de texto: Es un segmento de tamaño fijo que contiene las instrucciones del programa ejecutable.

Segmento de datos: Es un segmento de tamaño variable dividido en varias secciones para los distintos tipos de datos.

Montículo (heap): Contiene los datos reservados dinámicamente y crece de direcciones menores a mayores.

Segmento de pila (stack): Avanza de direcciones mayores a menores. Se utilizará en las llamadas a procedimientos

 La comunicación entre un segmento de código que llama a una subrutina (invocador) y la subrutina se realiza mediante la pila. La pila es un espacio de memoria con estructura tipo LIFO (Last In First Out), es decir el primero que entra es el primero que sale

 MIPS reservan un registro solo para la pila, stack pointer ($sp) o puntero de pila

Deja un comentario

Esta web funciona gracias a WordPress.com.

Subir ↑

Diseña un sitio como este con WordPress.com
Comenzar