MIPS

MIPS (Microprocessor without Interlocked Pipelined Stages) es una familia de arquitecturas computacionales (ISAs) de categoría RISC desarrollada por la empresa estadounidense MIPS Computer Systems, hoy en día MIPS Technologies.

Existen múltiples versiones de MIPS, incluyendo MIPS I, II, III, IV y V, así como múltiples implementaciones de 32 y 64 bits (MIPS32/64, respectivamente). Las primeras ediciones eran exclusivamente de 32 bits, llegando las de 64 posteriormente. MIPS32/64 difiere de las ediciones I-V al incorporar el System Control Coprocessor como elemento hardware que actúa en modo kernel, en adición a la arquitectura de modo usuario.

Por otra parte, la arquitectura MIPS cuenta con múltiples extensiones opcionales: MIPS-3D, que proporciona instrucciones SIMD de punto flotante destinadas a tareas 3D comunes, MDMX, similar a la anterior pero con operaciones de enteros, MIPS16e, que añade compresión al flujo de instrucciones para que los programas ocupen menos memoria, o MIPS MT, que añade capacidades de multithreading.

Las materias relativas al hardware en los currículums de universidades y escuelas técnicas suelen incluir el estudio de la arquitectura MIPS, a causa de su simpleza e influencia en otras arquitecturas RISC como Alpha. En marzo de 2021, MIPS Technologies anunció el fin del desarrollo de la arquitectura, a causa del interés de la compaía en transicionar a RISC-V.

Instrucciones

Al ser una arquitectura RISC, todas las instrucciones de MIPS cuentan con el mismo número de bits (32), y la mayoría de ellas son muy simples conceptualmente, a cambio de ejecutarse en menos ciclos de reloj, o el mismo número de estos pero siendo cada uno más breve. Por otra parte, gracias al elevado número de registros de propósito general y de punto flotante (generalmente 32 de ambos tipos), el hecho de no operar directamente en memoria no supone un problema tan notorio como representaría en arquitecturas CISC.

Los tipos principales de instrucción, junto a un ejemplo de cada uno, son los siguientes:

  • Tipo R, excluyendo saltos (fundamentalmente aritmético-lógicas) (ADD): Modifican únicamente el contenido de los registros a través del uso de la ALU. Esta clase de instrucciones cuenta con 3 registros: destino y dos operandos.
  • Con inmediatos (ADDI): Son similares a las instrucciones aritmético-lógicas de tipo R pero en lugar de contar con dos operandos, uno de ellos es reemplazado por un inmediato codificado directamente en la instrucción.
  • Saltos condicionales (BEQ): Siguen el formato de las instrucciones con inmediatos, comparando los dos registros y añadiendo un offset al registro contador de programa en caso de que la condición se verifique.
  • Carga (LW): Siguen el formato de las instrucciones con inmediatos. Al registro destino se le añade un desplazamiento mediante el inmediato de la instrucción para obtener la posición de memoria de la que leer los datos.
  • Almacenamiento (SW): Siguen el formato de las instrucciones con inmediatos. Al registro destino se le añade un desplazamiento mediante el inmediato de la instrucción para obtener la posición de memoria en que escribir los datos.
  • Saltos absolutos (JAL): Los bits de la instrucción solo contienen el código de operación y la dirección de la palabra a la que desplazar el registro contador de programa. El valor previo de este se almacena en el registro de enlace, $31.
  • Saltos absolutos con registros (JALR): Su formato es de tipo R al igual que en el caso de las instruciones aritmético-lógicas, pero a diferencia de estas, no utilizan la ALU. Permiten, en lugar de codificar directamente la dirección de salto en la instrucción, leerla de un registro concreto.
  • Referencia adicional

    Debido fundamentalmente a su interés pedagógico, así como a su empleo en hardware comercial como videoconsolas, la arquitectura MIPS se encuentra especialmente bien documentada, tanto en webs de terceros como por parte de la propia empresa encargada de su desarrollo. Es sencillo encontrar información detallada de cada una de las instrucciones, así como de otras particularidades de la arquitectura.

    Algunas herramientas de relevancia son el manual oficial de MIPS64 y SPIM, un simulador de MIPS32