Arquitectura MIPS

Arquitectura MIPS Presentación
Tipo Conjunto de instrucciones , plataforma informática , RISC ISA

Los MIPS (Inglés: m icroprocessor sin i nterlocked p ipeline s tajas ) es una arquitectura de procesador tipo de ordenador de conjunto de instrucciones reducido (RISC), desarrollado por la compañía MIPS Technologies (entonces conocida como MIPS Computer Systems ), con sede en Mountain View , en California .

Los procesadores fabricados según esta arquitectura se han utilizado principalmente en sistemas SGI . También se encuentran en varios sistemas integrados , como computadoras de mano, enrutadores Cisco y consolas de videojuegos ( Nintendo 64 y Sony PlayStation , PlayStation 2 y PSP ).

A finales de la década de 1990, se estimó que los procesadores derivados de la arquitectura MIPS ocupaban un tercio de los procesadores RISC producidos.

Hoy en día, esta arquitectura sigue siendo popular en el mercado de la informática integrada, donde se enfrenta a una intensa competencia de la arquitectura ARM .

Los MIPS también están presentes en enrutadores y NAS, pero también son cada vez más raros en este campo frente a la competencia de ARM de bajo consumo , PowerPC y x86.

A pesar de todo, MIPS está regresando lentamente al mercado de la informática de alto rendimiento gracias a la investigación realizada por China con los procesadores Loongson que se utilizaron para la creación de las supercomputadoras Dawning 5000L y 6000.

En 2015, Rusia anunció su intención de reemplazar los procesadores diseñados por empresas estadounidenses con procesadores locales en los sistemas informáticos nacionales. A continuación, se eligen los procesadores de arquitectura MIPS, Baikal T1 de la empresa rusa especializada en supercomputadoras T-Platforms . Su diseño cuenta con el apoyo del conglomerado de defensa Rostec y cofinanciado por la empresa estatal rusa Rosnano ( Роснано ).

Arquitectura

Las primeras versiones de la arquitectura MIPS eran de 32 bits (tanto a nivel de registro como de ruta de datos ), pero aparecieron versiones posteriores de 64 bits.

El R4000 lanzado en 1991 sería el primer procesador de 64 bits. Fue compatible con Microsoft desde Windows NT 3.1 hasta Windows NT 4.0

Hay varios conjuntos de instrucciones MIPS que son compatibles con versiones anteriores : MIPS I, MIPS II, MIPS III, MIPS IV y MIPS V, así como MIPS32 y MIPS64. MIPS32 y MIPS64, que se basan en MIPS II y MIPS V, y se introdujeron como conjuntos de instrucciones estandarizados. También están disponibles extensiones como: MIPS-3D, una unidad de coma flotante simplificada (FPU) del tipo SIMD para cálculos 3D básicos, MDMX, que lleva el uso de instrucciones SIMD más allá y permite el uso de registros de coma flotante de 64 bits, MIPS16, que comprime el flujo de instrucciones para disminuir el tamaño de los programas (creado en respuesta a la codificación Thumb introducida en la arquitectura ARM ), y más recientemente, MIPS MT, que permite el procesamiento de dos procesos simultáneamente por un solo núcleo de una manera similar al Hyper-Threading presente en los procesadores Intel recientes .

Los conjuntos de instrucción básica (especialmente MIPS I) son tan simples y efectivos que un buen número de cursos de arquitectura de computadoras, tanto en universidades como en escuelas técnicas, se enfocan en el estudio de la arquitectura MIPS.

Código de muestra

Aquí hay una implementación de las indicatrices de Euler en el ensamblador MIPS:

.text .globl main main: la $a0, query # Load Address : charge l'adresse de la requête li $v0, 4 # Load Immediate : charge la valeur syscall # appel du système d’exploitation li $v0, 5 # lit l’entrée syscall move $t0, $v0 # stocke la valeur dans une variable temporaire # stocke les valeurs de base dans $t1, $t2 sub $t1, $t0, 1 # $t1 itère de m-1 à 1 li $t2, 0 # $t2 maintient un compteur des premiers entre eux inférieurs à m tot: blez $t1, done #termination condition move $a0, $t0 #Argument passing move $a1, $t1 #Argument passing jal gcd #to GCD function sub $t3, $v0, 1 beqz $t3, inc #checking if gcd is one addi $t1, $t1, -1 #decrementing the iterator b tot inc: addi $t2, $t2, 1 #incrementing the counter addi $t1, $t1, -1 #decrementing the iterator b tot gcd: #recursive definition addi $sp, $sp, -12 sw $a1, 8($sp) sw $a0, 4($sp) sw $ra, 0($sp) move $v0, $a0 beqz $a1, gcd_return #termination condition move $t4, $a0 #computing GCD move $a0, $a1 remu $a1, $t4, $a1 jal gcd lw $a1, 8($sp) lw $a0, 4($sp) gcd_return: lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra done: #print the result #first the message la $a0, result_msg li $v0, 4 syscall #then the value move $a0, $t2 li $v0, 1 syscall #exit li $v0, 10 syscall .data query: .asciiz "Input m = " result_msg: .asciiz "Totient(m) = "

Registros

Descripción de registros generales

Hay 32 registros generales.

El registro 0 ($ cero) siempre es cero.

El ensamblador reserva el registro 1 ($ at).

Los registros 2 y 3 ($ v0 y $ v1) se utilizan para almacenar los resultados de las funciones.

Los registros 4 a 7 ($ a0 a $ a3) se utilizan para almacenar los primeros 4 argumentos de la subrutina.

Los registros 8 a 15 ($ t0 a t7) son registros temporales.

Los registros 16 a 23 ($ s0 a s7) son registros guardados y utilizados posteriormente.

Los registros 24 y 25 ($ t8 y $ t9) son registros temporales.

Los registros 26 y 27 ($ k0 y $ k1) son registros reservados del sistema.

El registro 28 ($ gp) corresponde al puntero global.

El registro 29 ($ sp) corresponde al puntero de la pila.

El registro 30 ($ fp) corresponde al puntero del marco.

El registro 31 ($ ra) corresponde a la dirección de devolución.


Descripción de algunos registros particulares

Entre los registros especiales, podemos hablar de registros lo(donde encontramos los resultados de las divisiones y multiplicaciones) y hi(donde encontramos el resto durante las divisiones).

En el caso de que el resultado de una multiplicación fuera 64 bits, los 32 bits superiores se almacenarían hiy los 32 bits inferiores se almacenarían lo. Podemos recuperar los valores de hiy locon las instrucciones mfhiy respectivamente mflo.

Por ejemplo, para las divisiones, podemos dar el siguiente ejemplo:

addi $t3, $0, 37 addi $t4, $0, 2 div $t3, $t4 mflo $t0 #équivaut à 37 / 2 équivaut à 18 (le quotient) mfhi $t1 #équivaut à 37 % 2 équivaut à 1 (le reste)

Y para las multiplicaciones, podemos dar el siguiente ejemplo:

addi $t3, $0, 37 addi $t4, $0, 2 mult $t3, $t4 mflo $t1 #on y trouve le produit mais il faut que le produit soit sur 32 bits

Ver también

Artículos relacionados

enlaces externos

Simuladores
  • (in) MARS  : simulador MIPS escrito en lenguaje Java
  • (es) SPIM  : Simulador de procesador MIPS R2000 y MIPS R3000 (conjunto de instrucciones MIPS I)
  • (es) KOYOTE  : Simulador visual de procesador RISC simplificado (basado en MIPS R2000)

Referencias

  1. (en) "  Rusia quiere reemplazar los chips de computadora de EE. UU. Con procesadores locales  " ,19 de junio de 2015
  2. “  http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm  ” .
  3. “  http://homepage.divms.uiowa.edu/~ghosh/1-28-10.pdf  ” .
  4. Alexis Nasr, “  http://pageperso.lif.univ-mrs.fr/~alexis.nasr/Ens/Compilation/mips.pdf  ” .