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 |