Erster Versuch, MIPS R-Typ-Befehl

Also, gut bevor ich heute ein "Ubungsprogramm schreibe nehme ich den Befehl

add $3, $2, $1

Zun"achst der Befehl, R-Typ

1. OpCode: Bit 31 bis Bit 26
2. rs-Feld: Bit 25 bis Bit 21
3. rt-Feld: Bit 20 bis Bit 16
4. rd-Feld: Bit 15 bis Bit 11
5. sa-Feld: Bit 10 bis Bit 6
6. Func-Feld: Bit 5 bis Bit 0

OpCode: 0b000 000
rs-Feld: 0b00010
rt-Feld: 0b00001
rd-Feld: 0b00011
sa-Feld: 0b00000
func-Feld

100 000 add 40
100 010 sub 42
100 100 and 44
100 101 or 45
101 010 slt 52

Das heisst: Func-Feld:

OpCode: 0b000 000
rs-Feld: 0b00010
rt-Feld: 0b00001
rd-Feld: 0b00011
sa-Feld: 0b00000
func-Feld: 0b100000

OK, und dann wie folgt:

Befehlsz"ahler steht sagen wir auf 0x0000 0000

Dann: Befehlsz"ahler -> Befehlsspeicher -> ... (II)

Befehlsz"ahler -> Addierer 1, s"udost -> MUX 4, s"udwest, stellung (II/III) -> Befehlsz"ahler = 0x0000 0004

(Leseaddresse, Befehlsspeicher) = 0b00000000010000010001100000100000

(Befehlskodierer, Bits):
MemToReg = 0 -> MUX 3, West ^= Nicht vom Speicher ins Register ^= R-Typ
MemWrite = 0, WE am Datenspeicher ^= nicht Datum aus der ALU im Datenspeicher "ubernehmen
Branch = 0, MUX 4, S"udwet - siehe oben (II/III) also - Addresse (R-Typ) nicht als Sprung oder Verzweigung, sondern von Addierer I, Ost
ALUSrc = 0 ^= LeseDaten2 von dem Registersatz und nicht etwa von Vorzeichenerweiterungseinheit f"ur Verzweigungen und Spr"unge
RegDst = 0 ^= Bit 20:16 - RegDst - MUX 1 - Zentral - geht an schreiberegister - von Registersatz im Gegensatz zu schreibedaten, was das Datum enth"alt, Register Selector
RegWrite = 1 ^= In Register Satz wird geschrieben: Ja

Gut, vom Befehlsz"ahler --- Addresse --->>>> Befehlsspeicher --- unser Befehl ---->>>> Lese-Register 1 und 2 wird selektiert, Lese-Daten1 geht direkt in ALU, Lese-Daten 2 "uber MUX 2, beide in ALU, von da aus, das ALU-Ergebnis "uber MUX 3 in Schreibedaten, Registersatz

Halt, der Funktionsdekodierer

Entweder nutze das Func Feld, oder 00 - Addition

und vom Funktionsdekodierer geht

010 - add an die ALU - um zu addieren
Image mips32