Befehlsarchitekturen Klassen

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Befehlsarchitekturen Klassen
Gibt es eine vollständige Tabelle, in der die 4 Klassen aus der Vorlesung hinsichtlich ihrer Befehle verglichen werden (insbesondere derer, die alleine nicht eindeutig sind)? In den Hausaufgaben gab es dazu einmal eine Aufgabe, für die die Tabelle aus der Vorlesung ja leider nicht vollständig gewesen ist. Alternativ: Gibt es eine Möglichkeit sich zu erschließen, welche Befehle man welcher Klasse zuordnen kann?


Man kann nicht einzelne Befehle bestimmten Architekturklassen zuweisen. Denn z.B. ein “push A” kann in fast allen vorkommen.
Wenn dann kann man Befehlssequenzen zuordnen (wie in der Hausaufgabe).

Und diese kann man am leichtesten anhand ihrer ALU-Befehle (also z.B. “add”) identifizieren:

  • Ein Operand: Akku
  • Kein Operand: Stack
  • Mehrere Operanden, wobei ein Operand aus dem Speicher kommt: Register-Memory
  • Mehrere Operanden, wobei alle Register sind: Register-Memory oder Register-Register
    (Das vorkommen von load und store Befehlen spricht dann eher für Register-Register).

(wie in der Tafelübung angeschrieben :wink: ).

Konnte ich dir damit weiterhelfen?

1 „Gefällt mir“

Ja, natürlich. Etwas hat es geholfen.


Warum war in der Hausaufgabe “add A” eigentlich nur Akkumulator?
Stack und RegReg kann man wegen des Speicheroperanden sicher ausschließen, aber “imul A” wäre bspw. auch gültiges x86: http://x86.renejeschke.de/html/file_module_x86_id_138.html


Weil [m]imul A[/m] nur ein extra Befehl für zB EDX:EAX = EAX * r/m ist, bei dem die Registerwahl zwecks Kompaktheit bereits im Opcode steckt und Reg-Reg bzw Reg-Mem min. explizite 2 Operanden besitzen (auch wenn er im Opcode mit codiert ist, wie hier).

Wenn du es in der Hausaufgabe so begründet hast, solltest du aber die Punkte dafür bekommen haben (Nein? PN.)