Information Technology Reference
In-Depth Information
befehl, der auf einen Operanden bzw. das Ergebnis indirektindiziert zugreift (mit der effektiven
Adresse r1 + r2) durch drei 3-Adressbefehle nachgebildet werden kann.
Der zu verarbeitende Operand wird von der 3-Adressbefehlsfolge zunächst aus dem Hauptspeicher
in das temporäre Register r31 geladen (ld), anschließend die Operation ausgeführt und schließlich
das Ergebnis in den Hauptspeicher zugrückgeschrieben (st). In Bild 1.16 (unten) ist dargestellt, wie
sich ein 3-Adressbefehl (rechts), in denen drei unterschiedliche Adressen codiert sind, durch zwei
2-Adressbefehle (links) nachbilden lassen. Dabei wird mit den 2-Adressbefehlen zunächst der erste
Operand in das Zielregister übertragen (r7) und anschließend die eigentliche Operation ausgeführt,
wobei der Inhalt des Zielregisters mit dem Ergebnis der Operation überschrieben wird.
2-Adressbefehle:
3-Adressbefehle:
add
[r1 + r2], 0x1234
ld
r31, [r1 + r2]
add
r31, r31, 0x1234
st
[r1 + r2], r31
mov
r7, r1
add
r7, r1, r2
add
r7, r2
Bild 1.16. Umsetzung von 3- und 2-Adressbefehlen
Wie beschrieben, sind 2-Adressbefehle kompakter codierbar als 3-Adressbefehle. Dabei blieb bis-
her jedoch unberücksichtigt, dass die Befehle von 2- und 3-Adressarchitekturen unterschiedliche
Mächtigkeiten besitzen. Korrekter ist es deshalb, wenn man Befehlsfolgen mit jeweils denselben
Funktionalitäten vergleicht. Die indirektindizierte Addition (im Bild oben) lässt sich z.B. für die 2-
Adressarchitektur Pentium 4 von Intel in vier Bytes codieren. Hingegen erfordert die 3-Adressar-
chitektur PowerPC 970 von IBM drei je vier Byte breite Befehle. Des Weiteren werden für die 3-
Adressaddition mit unabhängigen Registeradressen für Operanden und Ergebnis (im Bild unten)
zwei 2-Adressbefehle benötigt, die sich für den Pentium 4 in je zwei Bytes codieren lassen, so dass
hier genauso viel Speicher erforderlich ist, wie für den einzelnen 3-Adressbefehl des PowerPC 970.
Die hier angedeuteten Verhältnisse sind durch statistische Untersuchungen belegt. Demnach kann
man Programme von 2-Adressarchitekturen kompakter codieren als funktionsgleiche Programme
für typische nach dem Lade-Speichere-Prinzip arbeitende 3-Adressarchitekturen.
Andererseits sind 3-Adressarchitekturen jedoch auf einen hohen Befehlsdurchsatz optimiert. So
wird die Befehlsfolge rechts oben in Bild 1.16 meist schneller von einer 3-Adressarchitektur bear-
beitet als der links oben dargestellte einzelne Befehl von einer 2-Adressarchitektur, und zwar des-
halb, weil Speicherzugriffe nur sequentiell bearbeitet werden können und die drei Schritte, „Ope-
rand aus dem Hauptspeicher laden“, „Operation ausführen“ und „Ergebnis in den Hauptspeicher
schreiben“ sich nicht dadurch vermeiden lassen, dass man sie in einem Befehl codiert. Mit dem 2-
Adressbefehl wird der Befehl schneller gelesen, die Folge von 3-Adressbefehlen kann wegen des
hohen Befehlsdurchsatzes jedoch schneller bearbeitet werden.
Noch deutlicher ist dies mit dem in Bild 1.16 unten dargestellten Additionsbefehl, in dem drei
unabhängige Adressen für Operanden und Ergebnis codiert sind. Statt eines schnell zu verarbeiten-
den 3-Adressbefehls (rechts) sind zwei weniger schnell zu bearbeitende 2-Adressbefehle (links)
auszuführen. Zur Verkürzung der Bearbeitungszeit der 2-Adressbefehlsfolge ist es jedoch möglich,
aufeinander folgende Befehle zu gruppieren, wie dies z.B. in der Nemesis-Architektur der TU Ber-
lin, die jedoch 3-Adressbefehle verarbeitet, geschieht. Dabei werden aufeinander folgende Befehle
als Einheit interpretiert und in einem Schritt ausgeführt (siehe hierzu Abschnitt 2.2.4).
1-Adressbefehle
Die Anzahl der explizit in einem Befehl codierten Adressen kann auf Eins reduziert
werden, wenn man einen der maximal zwei Operanden in einem ausgezeichneten
Register, dem sog. Akkumulator ( accumulator ) speichert. Ein zu verarbeitender
Search WWH ::




Custom Search