Der MIPS ist relativ schnell erklärt Lassen wir die Sprungbefehle und Verzweigungsbefehle erst Mal aus. Ausser in einer Hinsicht es gibt 1.) Das Laden - load 2.) Das Speichern - store Was hat es damit auf sich? 1.) Das Laden - load 2.) Das Speichern - store 3.) move Wir haben generell einen Datenspeicher und einen Registersatz - Blick in den Schaltplan Man spricht für gewöhnlich für einen RAM - ich kenne die späteren MIPS Versionen noch nicht so gut, aber bei der einfachsten und trivialsten Version, gibt es 1.) Einen statischen Befehlsspeicher 2.) Einen dynamischen Arbeitsspeicher Wir können also nicht einfach behaupten, wir laden die Daten aus Arbeitsspeicher in die Register oder speichern die Register im Arbeitsspeicher Statt Arbeitsspeicher sagen wir - Datenspeicher Es gibt die Befehle 1.) Laden 2.) Speichern 1.) Laden tun wir vom Arbeitsspeicher in die Register 2.) Speichern tun wir von den Registern im Arbeitsspeicher 3.) Move benutzen wir normalerweise von Register zu Register Es gibt - lb - lh - lw - ld - la - li - sb - sh - sw - sd Dazu kommen, die Verzweigungsbefehle Hier wird ein Immidiate wert von 16 Bit, zum Befehlszähler adddiert. Der MIPS ist zunächst ein 32 Bit Prozessor Gut - um zu verstehen, was der MIPS tut, kennen wir nun die Transportbefehle Das Ziel sind arithmetische Logische Befehle, so wie Schiebe Befehle 1.) Arithmetisch 2.) Logisch 3.) Schiebe und Rotation 1.) Arithmetisch: add, addi, addiu, sub, subi, mult, multu, div, divu 2.) Logisch: and, andi, or, ori, xor, xori, not 3.) Schiebe und Rotation: sll, slr, ... Gut, was passiert? Ein Befehl besteht aus einer bestimmten Anzahl von Feldern - es gibt die 1.) R-Typ-Befehle 2.) I-Typ-Befehle 3.) J-Typ Befehle Uns beschäftigen die R-Typ Befehle. Die arithmetischen sind diese Gut, diese haben ein Dreiaddressformat Es gibt 1.) Dreiaddressformat 2.) Zweiaddressformat 3.) Einaddressformat 4.) Nulladdressformat Wir haben zwei Quelloperanden 1.) src1 2.) src2 Und einen Zieloperanden 3.) dest Wir können uns vorstellen c := a+b Oft kommen wir mit zwei Operanden aus. Beim MIPS gibt es drei . Das ergebnis könnte sonst im ersten Zieloperanden landen Gut, demnach hat der R-Typ Befehl drei Felder rt rs rd rs und rt, sind Quelloperanden und rd Zieloperand Dazu haben wir den Opcode und das Func Feld Darum geht es - ein Blick in das Schaltbild genügt Es gibt einen 1.) Befehlsdekodierer 2.) Funktionsdekodierer Der Unterschied ist, sie haben Eingänge, die liegen auf dem - man könnte sagen Befehlsbus, aber es ist auch ein Datenbus, es ist ein interner Bus Dieser ist 32 Bit breit Aber vorsicht, ohne die Struktur der Befehle können wir nicht denken. Das Befehlsformat ist direkt mit dem Bus verbunden 31 - 26: Entspricht dem OpCode es geht in den Befehlsdekodierer 25 - 21: Entspricht dem RS oder RT Quellooperanden muss nachschauen 20 - 16: Entspricht ebenso ... 6 .. 0: Entspricht dem Func Feld Was hat es damit auf sich - Zunächst am Befehlsdekodierer sind 1.) MemToReg 2.) MemWrite 3.) Branch 4.) ALU-Src 5.) ALU-Op 6.) RegDst 7.) RegWrite An dem Funtionsdekodierer sind - Func - Func geht direkt von Bus, ebenso wie der Opcode in den Befehlsdekodierer geht Die Func reguliert die ALU - die ALU hat folgende Bits 010 - add 110 - sub 000 - and 001 - or 111 - slt Das sind die Bits zur Steuerung der ALU Doch diese kommen durch den Funktionsdekodierer zustande Wenn im Befehl steht 00 - add 01 - sub 10 - nutze das Func Feld 11 - n/a Func Feld 100 000 / 4 0 - add 100 010 / 4 2 - sub 100 100 / 4 4 - and 100 101 / 4 5 - or 101 010 / 5 2 - slt Das wäre alles.