Architektura MIPS

Architektura MIPS Prezentace
Typ Instrukční sada , počítačová platforma , RISC ISA

Na MIPS (anglicky: m icroprocessor aniž by i nterlocked p ipeline s Tages ) je architektura procesoru typu RISC (RISC), vyvinutý firmou MIPS Technologies (pak známý jako MIPS Computer Systems ) se sídlem v Mountain View v Kalifornii .

Procesory vyrobené podle této architektury byly použity hlavně v systémech SGI . Vyskytují se také v několika palubních systémech , jako jsou ruční počítače, směrovače Cisco a herní konzole ( Nintendo 64 a Sony PlayStation , PlayStation 2 a PSP ).

Na konci 90. let se odhadovalo, že procesory odvozené od architektury MIPS zabíraly třetinu vyrobených procesorů RISC .

Dnes tato architektura zůstává populární na trhu vestavěných počítačů, kde čelí silné konkurenci architektury ARM .

MIPS jsou také přítomny ve směrovačích a NAS, ale v této oblasti jsou také stále vzácnější tváří v tvář konkurenci ARM s nízkým výkonem , PowerPC a x86.

Navzdory všemu se MIPS pomalu vrací na trh vysoce výkonných počítačů díky výzkumu prováděnému v Číně s procesory Loongson, které byly použity k vytvoření superpočítače Dawning 5000L a 6000.

V roce 2015 Rusko oznámilo svůj záměr nahradit procesory navržené americkými společnostmi místními procesory v národních počítačových systémech. Poté jsou vybrány procesory architektury MIPS, ruská společnost Baikal T1 specializující se na superpočítače T-Platforms . Jejich návrh je podporován obranným konglomerátem Rostec a spolufinancován ruskou státní společností Rosnano ( Роснано ).

Architektura

Rané verze architektury MIPS byly 32bitové (jak na úrovni registru, tak na úrovni datové cesty ), ale později se objevily 64bitové verze.

R4000 propuštěn v roce 1991 bude první 64-bitový procesor. To bylo podporováno společností Microsoft od Windows NT 3.1 až po Windows NT 4.0

Existuje několik sad instrukcí MIPS, které jsou zpětně kompatibilní : MIPS I, MIPS II, MIPS III, MIPS IV a MIPS V a také MIPS32 a MIPS64. MIPS32 a MIPS64, které jsou založeny na MIPS II a MIPS V a byly zavedeny jako standardizované instrukční sady. K dispozici jsou také rozšíření, například: MIPS-3D, zjednodušená jednotka s plovoucí desetinnou čárkou (FPU) typu SIMD pro základní 3D výpočty, MDMX, která dále využívá instrukce SIMD a umožňuje použití 64bitových registrů s plovoucí desetinnou čárkou , MIPS16, který komprimuje tok instrukcí za účelem zmenšení velikosti programů (vytvořených v reakci na kódování Thumb zavedené v architektuře ARM ), a v poslední době MIPS MT, který umožňuje zpracování dvou procesů současně jedním jádrem způsobem podobný Hyper-Threadingu přítomnému v posledních procesorech Intel .

Základní výukové sady (zejména MIPS I) jsou tak jednoduché a efektivní, že se velký počet kurzů počítačové architektury na univerzitách i na technických školách zaměřuje na studium architektury MIPS.

Ukázkový kód

Zde je implementace Eulerových indikátorů v MIPS assembleru:

.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) = "

Registry

Popis obecných registrů

Existuje 32 obecných registrů.

Registr 0 (nula $) je vždy nula.

Register 1 ($ at) je rezervován assemblerem.

Registry 2 a 3 ($ v0 a $ v1) se používají k ukládání výsledků funkcí.

Registry 4 až 7 ($ a0 až $ a3) se používají k uložení prvních 4 argumentů podprogramu.

Registry 8 až 15 ($ t0 až t7) jsou dočasné registry.

Registry 16 až 23 ($ s0 až s7) jsou registry uložené a použité později.

Registry 24 a 25 ($ t8 a $ t9) jsou dočasné registry.

Registry 26 a 27 ($ k0 a $ k1) jsou systémově rezervované registry.

Registr 28 ($ gp) odpovídá globálnímu ukazateli.

Registr 29 ($ sp) odpovídá ukazateli zásobníku.

Registr 30 ($ fp) odpovídá ukazateli rámce.

Registr 31 ($ ra) odpovídá zpáteční adrese.


Popis některých konkrétních registrů

Mezi speciálními registry můžeme hovořit o registrech lo(kde najdeme výsledky dělení a násobení) a hi(kde najdeme zbytek během dělení).

V případě, že výsledek multiplikace je 64 bitů, bude uloženo horních 32 bitů hia spodní 32 bitů bude uloženo lo. Můžeme získat hodnoty hia los pokyny mfhia resp mflo.

Například pro divize můžeme uvést následující příklad:

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)

A pro násobení můžeme uvést následující příklad:

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

Podívejte se také

Související články

externí odkazy

Simulátory
  • (in) MARS  : Simulátor MIPS napsaný v jazyce Java
  • (en) SPIM  : simulátor procesoru MIPS R2000 a MIPS R3000 (instrukční sada MIPS I)
  • (en) KOYOTE  : Zjednodušený vizuální simulátor procesoru RISC (na základě MIPS R2000)

Reference

  1. (in) „  Rusko chce nahradit americké počítačové čipy místními procesory  “ ,19. června 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  “ .