Architettura MIPS

Architettura MIPS Presentazione
genere Set di istruzioni , piattaforma informatica , RISC ISA

I MIPS (inglese: m icroprocessor senza i nterlocked p ipeline s Tages ) è un'architettura di processore di tipo reduced instruction set computer (RISC) sviluppato dalla società MIPS Technologies (allora conosciuto come MIPS Computer Systems ), con sede a Mountain View in California .

I processori prodotti secondo questa architettura sono stati utilizzati principalmente nei sistemi SGI . Si trovano anche in diversi sistemi di bordo , come computer palmari, router Cisco e console per videogiochi ( Nintendo 64 e Sony PlayStation , PlayStation 2 e PSP ).

Alla fine degli anni '90, si stimava che i processori derivati ​​dall'architettura MIPS occupassero un terzo dei processori RISC prodotti.

Oggi questa architettura rimane popolare nel mercato dei computer embedded, dove deve affrontare la forte concorrenza dell'architettura ARM .

I MIPS sono presenti anche nei router e nei NAS, ma stanno diventando sempre più rari in questo campo di fronte alla concorrenza di ARM, PowerPC e x86 a basso consumo.

Nonostante tutto, MIPS sta lentamente tornando alla ribalta nel mercato dei computer ad alte prestazioni grazie alle ricerche effettuate dalla Cina con i processori Loongson che sono stati utilizzati per la creazione dei supercomputer Dawning 5000L e 6000.

Nel 2015, la Russia ha annunciato la sua intenzione di sostituire i processori progettati da società statunitensi con processori locali nei sistemi informatici nazionali. Vengono quindi scelti i processori con architettura MIPS, Baikal T1 dell'azienda russa specializzata in supercomputer T-Platforms . Il loro progetto è sostenuto dal conglomerato di difesa Rostec e cofinanziato dalla società statale russa Rosnano ( Роснано ).

Architettura

Le prime versioni dell'architettura MIPS erano a 32 bit (sia a livello di registro che di percorso dati ), ma sono apparse versioni successive a 64 bit.

L' R4000 rilasciato nel 1991 sarebbe il primo processore a 64 bit. Era supportato da Microsoft da Windows NT 3.1 fino a Windows NT 4.0

Esistono diversi set di istruzioni MIPS compatibili con le versioni precedenti : MIPS I, MIPS II, MIPS III, MIPS IV e MIPS V nonché MIPS32 e MIPS64. MIPS32 e MIPS64, basati su MIPS II e MIPS V, sono stati introdotti come set di istruzioni standardizzati. Sono disponibili anche estensioni come: MIPS-3D, un'unità a virgola mobile semplificata (FPU) di tipo SIMD per calcoli 3D di base, MDMX, che spinge ulteriormente l'uso delle istruzioni SIMD e consente l'uso di registri a virgola mobile a 64 bit, MIPS16, che comprime il flusso di istruzioni per diminuire la dimensione dei programmi (creati in risposta alla codifica Thumb introdotta nell'architettura ARM ) e, più recentemente, MIPS MT, che consente l'elaborazione di due processi simultaneamente da un singolo core in modo simile al diFilettatura presente negli ultimi Intel processori .

I set di istruzioni di base (soprattutto MIPS I) sono così semplici ed efficaci che un buon numero di corsi di architettura del computer, sia nelle università che nelle scuole tecniche, si concentrano sullo studio dell'architettura MIPS.

Codice d'esempio

Ecco un'implementazione delle indicatrici di Eulero nell'assembler 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) = "

Registri

Descrizione dei registri generali

Ci sono 32 registri generali.

Il registro 0 ($ zero) è sempre zero.

Il registro 1 ($ at) è riservato dall'assemblatore.

I registri 2 e 3 ($ v0 e $ v1) vengono utilizzati per memorizzare i risultati delle funzioni.

I registri da 4 a 7 (da $ a0 a $ a3) vengono utilizzati per memorizzare i primi 4 argomenti della subroutine.

I registri da 8 a 15 (da $ t0 a t7) sono registri temporanei.

I registri da 16 a 23 (da $ s0 a s7) sono registri salvati e utilizzati successivamente.

I registri 24 e 25 ($ t8 e $ t9) sono registri temporanei.

I registri 26 e 27 ($ k0 e $ k1) sono registri riservati al sistema.

Il registro 28 ($ gp) corrisponde al puntatore globale.

Il registro 29 ($ sp) corrisponde allo stack pointer.

Il registro 30 ($ fp) corrisponde al puntatore del fotogramma.

Il registro 31 ($ ra) corrisponde all'indirizzo del mittente.


Descrizione di alcuni registri particolari

Tra i registri speciali, possiamo parlare di registri lo(dove troviamo i risultati di divisioni e moltiplicazioni) e hi(dove troviamo il resto durante le divisioni).

Nel caso in cui il risultato di una moltiplicazione fosse 64 bit, i 32 bit superiori verranno memorizzati hie i 32 bit inferiori verranno memorizzati in lo. Possiamo recuperare i valori di hie locon le istruzioni mfhie rispettivamente mflo.

Ad esempio per le divisioni, possiamo fornire il seguente esempio:

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)

E per le moltiplicazioni, possiamo fornire il seguente esempio:

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

Vedi anche

Articoli Correlati

link esterno

Simulatori
  • (in) MARS  : simulatore MIPS scritto in linguaggio Java
  • (it) SPIM  : simulatore di processore MIPS R2000 e MIPS R3000 (set di istruzioni MIPS I)
  • (it) KOYOTE  : simulatore visivo del processore RISC semplificato (basato su MIPS R2000)

Riferimenti

  1. (in) "La  Russia vuole sostituire i chip dei computer statunitensi con processori locali  " ,19 giugno 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  ” .