WikiDer > MIPS (CPU)

MIPS (CPU)
Ein MIPS R4400 Mikroprozessor von Toshiba.

MIPS (Abkürzung für Microprocessor without Interlocked Pipeline Stages) ist a Prozessor entworfen von John L. Hennessy. MIPS basiert auf dem RISCProzessorarchitektur.

Geschichte

Unterseite eines R4700 Orion
Oberseite eines R4700 Orion

1984 verließ Hennessy die Universität von Stanford MIPS Computer Systems zu gründen, wo er sein erstes MIPS bauteProzessor entworfen und veröffentlicht, der R2000. 1988 kam die verbesserte Version dieses Modells, der R3000. Beide sind 32-Bit-Prozessoren. Später wurde auch eine 64-Bit-Version veröffentlicht, der R4000. Da SGI (Silizium-Grafik), ein wichtiger Kunde, immer bessere Prozessoren wollte, musste teuer recherchiert werden. Die Forschungskosten töteten MIPS Computer Systems und das Unternehmen geriet in finanzielle Schwierigkeiten. SGI erwarb dann das Unternehmen, damit die Untersuchung nicht verloren ging. Das Unternehmen erhielt den Namen MIPS Technologies und existiert noch heute unter diesem Namen.

Das MIPS ist eines der ersten RISCArchitekturen und war eine von drei Plattformen, für die die erste Version von Windows NT (3.5) verfügbar geworden. Diese Version ist jedoch nicht populär geworden und die weitere Unterstützung wurde in Windows NT 4.0 eingestellt.

Benutzen

Die MIPS-Prozessoren werden häufig in eingebettete Systeme. Aber auch in manchen Spielekonsole findet man MIPS-Prozessoren.

MIPS ist ein RISC-Computer

Das Computer mit reduziertem Befehlssatz (RISC) ist eine Prozessorarchitektur, bei der jeder mögliche Befehl die gleiche Zeit zur Ausführung benötigt. Daraus ist die MIPS-Architektur entstanden.

MIPS-Speicher

Der Zweck des Speichers besteht darin, Gruppen von Bits zu speichern und sie auf Anforderung weiterzuleiten. Die meisten aktuellen Computer speichern Informationen in Vielfachen von 8 Bit (oder 1 Byte). Jedem Byte wird außerdem eine numerische Adresse zugewiesen. Der MIPS-Prozessor hat eine Adressgröße von 32 Bit, also mit einem Bereich von 0x00000000 bis 0xFFFFFFFF. Der Speicher kann sowohl Programmanweisungen als auch Daten speichern. Eine der Funktionen eines Betriebssystems besteht also darin, dass es Anweisungen oder Daten eines beliebigen Prozesses Speicherblöcke zuweisen kann. Little Endian wenn Big Endian Bei Little Endian wird das niedrigstwertige Bit zuerst in den Speicher gelegt, bei Big Endian wird die umgekehrte Reihenfolge verwendet.

MIPS-Befehlssatz

MIPS verwendet 32 ​​verschiedene Register, im Folgenden finden Sie eine Übersicht über die verschiedenen Register.

Register
NameNummerBenutzen
$null$0Bleibt immer 0
$at$1Reserviert für den Monteur
$v0–$v1$2–$3Gibt die Ergebnisse von Funktionen zurück
$a0–$a3$4–$7Funktionsargumente
$t0–$t7$8–$15Temporäre Termine
$s0–$s7$16–$23Gespeicherte temporäre Daten
$t8–$t9$24–$25Temporäre Termine
$k0–$k1$26–$27Reserviert für den Betriebssystemkernel
$GP$28Globaler Zeiger
$sp$29Stapelzeiger
$fp$30Rahmenzeiger
$ra$31Absender

MIPS-Anweisungen sind 32 Bit lang, selbst auf 64-Bit-Prozessoren. Dies bietet eine bessere Kompatibilität mit dem 32-Bit-Befehlssatz. Es besteht auch die Möglichkeit, dass der Prozessor über eine Erweiterung einen 16-Bit-Befehlssatz verwendet. Dies wird verwendet, wenn die Codelänge wichtiger ist als die Leistung.

Die MIPS-Befehlssatzarchitektur ist abwärtskompatibel, dh ein MIPS-IV-Prozessor kann immer noch MIPS-I-Code ausführen.

Der MIPS ist ein Load-Store-Rechner. Die einzigen erlaubten Speicheroperationen sind das Laden von Werten in eines der Register oder das Speichern von Daten aus einem Register in den Speicher.

Es gibt drei Kategorien von Anweisungen:

  • Laden und lagern
    • Laden Sie Daten aus dem Speicher in ein Register oder speichern Sie den Inhalt eines Registers im Speicher.
    • Ex: lw $t0, num1 #Lade Wort von num1 in Register $t0
  • Mathematische und logische Operationen
    • Dadurch ist es möglich, mathematische und logische Operationen durchzuführen.
    • Ex: addiere $t0, $t3, $t4 # $t0 = $t3 $t4
  • springen und verzweigen
    • Wird verwendet, um an verschiedene Stellen im Programm zu wechseln.
    • Beispiel: bei Verwendung einer IF-Anweisung.
MIPS Multicycle-Pipeline

MIPS-Befehlsformate

MIPS hat drei Befehlsformate.

Art-31- Format (Bits) -0-
ROpcode (6 Bit)rs (5-Bit)rt (5 Bitrd (5-Bit)Scham (5 Bit)Funktion (6 Bit)
ichOpcode (6 Bit)rs (5-Bit)rt (5-Bit)sofort (16 Bit)
JOpcode (6 Bit)Adresse (26 Bit)

Pseudo-Ops

Einige „Pseudo-Ops“ oder Pseudo-Operationen werden im Folgenden beschrieben. Sie werden das Verhalten der Monteur mitbestimmen. Gewöhnliche Opcodes sind prozessorgebunden, während Pseudo-Ops spezifisch für einen bestimmten Assembler sind, da sie vom Assembler selbst ausgeführt werden.

Pseudo-OpBeschreibung
.2Byte Ausdruck1[ , Ausdruck2 ] ... [ , AusdruckN]Reduziert die Ausdrücke in der kommagetrennten Liste (auch kommagetrennte Liste genannt) auf 16-Bit-Werte und setzt die Werte zu vererbbaren Werten zusammen. Die Ausdrücke müssen absolut sein oder, wenn die Labels im selben Abschnitt definiert sind, müssen sie in einer Differenz von Labels definiert werden (label1-label2). Diese Direktive kann optional die Form „Ausdruck 1 [:Ausdruck2] annehmen. Das bedeutet, dass Ausdruck 2 den Wert von Ausdruck 1 zweimal kopiert. Diese Richtlinie hat keine automatische Abrechnung (nur 64-Bit und N32)
.DatenWeist den Assembler an, alle nachfolgenden Daten in den Datenabschnitt einzufügen.
.end [proc_name]Zeigt das Ende von a . an Verfahren Auf. Verwenden Sie diese Referenz, wenn Sie Informationen für die Debugger.

Adressierungsmethoden

Es gibt drei Hauptmethoden, um auf Daten zu verweisen. Unten sehen Sie, wie MIPS dies in seinen Befehlsformaten umsetzt.

Sofort

Die Quelloperatoren können Konstanten sein. Es wird also sofort ein konstanter Wert eingetragen Anweisungen in Maschinensprache codiert. Dies ermöglicht es, die Adresse unmittelbar nach der Decodierung des Befehls zu erreichen, ohne die Adresse aus dem Speicher abrufen zu müssen.

MIPS-Befehle übersetzen direkte Konstanten in die 16 niedrigstwertigen Bits des direkten Befehlslayouts. Wenn die Konstante größer als 16 Bit ist, werden zwei Maschinenbefehle generiert. Die höchstwertigen Stellen werden dann mit der Anweisung „load upper Immediate“ in das $at-Register geladen.

Adressierung der Registrierung

Durch die Verwendung von registriert als Quelle und Ziel von Daten werden die Daten schneller verarbeitet als bei Verwendung von Speicher. Die meisten Prozessoren erfordern mindestens einen mathematischen Befehlsoperator, um die Registeradressierung zu verwenden. Befehle mit allen Operatoren in Registern sind am schnellsten auszuführen.

MIPS bietet 32 ​​Register und bittet darum, diese Register zur Verarbeitung von Daten zu verwenden. Da nur 5 Bit (2^5 = 32) benötigt werden, um ein Register zu referenzieren, ist es einfach, 3 Register in einem 32-Bit-Befehl zu referenzieren.

Speicheradressierung

Mit 32-Bit-Adressen kann ein Computer auf bis zu 4 GB Speicher zugreifen. Auf diese Weise können Sie viele Daten speichern, benötigen jedoch auch mehr Zeit, um darauf zuzugreifen. In einer MIPS-Anweisung können Sie maximal zu einer gehen Speicheradresse verweisen. Wie bei den meisten Supercomputer MIPS beschränkt dies auf das Laden und Speichern von Anweisungen.

Das Unterprogramm "Linkage" und Stacks

MIPS-Aufruf- und Rückgabefunktion

Wenn wir eine Funktion (a Verfahren oder ein Subroutine), dann möchten wir nach der Funktion dorthin zurückkehren, wo wir im Programmcode aufgehört haben. Dazu müssen wir etwas finden, um uns an diesen Ort zu erinnern. Es muss ein Standard vereinbart werden, wo der Rückkehrort gespeichert wird. MIPS verwendet zum Speichern dieser Adresse das Register 31. Die Funktionen, die verwendet werden, um eine Funktion aufzurufen und zum ursprünglichen Befehl zurückzukehren, sind:

  • jal - jump and link: Gleiches Format wie jump, jedoch mit dem Unterschied, dass jal die Rücksprungadresse in Register 31 speichert, genannt $ra oder Rücksprungadressenregister.
  • jr - Sprungregister: Anstatt eine feste Zieladresse wie einen Funktionsnamen anzugeben, springt dieser Befehl an die in Register 31 gespeicherte Stelle.

Als kleines Beispiel sehen Sie unten eine Funktion zum Drucken einer Ganzzahl und eine andere, die ein Zeilenendezeichen ausgibt.

print_int: li $v0, 1 syscall jr $raendline: la $a0, endl #define in .data als "" li $v0, 4 syscall jr $ra