Information Technology Reference
In-Depth Information
einzelne 1-Adressbefehle immer durch einzelne 2-Adressbefehle, nicht jedoch durch einzelne 3-
Adressbefehle nachgebildet werden. Letzteres deshalb nicht, weil 1-Adressbefehle meist direkt auf
den Hauptspeicher zugreifen können, was mit 3-Adressbefehlen normalerweise nicht möglich ist.
1-Adressbefehle:
lda [r1]
adda 0x1234
sta [r1]
lda r1
adda r2
sta r7
adda [r1]
2-Adressbefehle:
3-Adressbefehle:
add
[r1], 0x1234
add
r7, r1, r2
add
r8, [r1]
ld
r9, [r1]
add
r8, r8, r9
Bild 1.17. Umsetzung von 1-Adressbefehle in 2- bzw. 3-Adressbefehle
0-Adressbefehle
Bei Ausführung eines 1-Adressbefehls in dem eine dyadische Operation codiert ist,
wird ein Operand explizit, z.B. im Hauptspeicher und der zweite Operanden sowie
das Ergebnis implizit im Akkumulator adressiert. Bei Ausführung eines 0-Adressbe-
fehls werden Operanden und Ergebnis implizit in speziell dafür vorgesehenen
Registern adressiert. Um dyadische Operationen auszuführen, ist es notwendig,
wenigstens zwei Register zur Speicherung der Operanden vorzusehen, die meist in
einem Stapel ( stack ) organisiert sind (vergleichbar mit einem Papierstapel, wobei
ein Blatt einem Eintrag entspricht).
Beim Entfernen eines Operanden von einem Stapel, werden die gespeicherten Ein-
träge jeweils automatisch um eine Position nach oben, beim Ablegen eines Ergeb-
nisses um eine Position nach unten verschoben. Die Ausführung eines 0-Adressbe-
fehls mit beliebiger Operandenzahl erfolgt, indem man die Operanden vom Stapel
entfernt, die Operation ausführt und schließlich das Ergebnis auf dem Stapel ablegt.
Gegebenenfalls lassen sich von einem 0-Adressbefehl auch mehrere Ergebnisse
erzeugen und in einer vom Befehl abhängigen Art und Weise auf dem Stapel spei-
chern. In Bild 1.18 ist exemplarisch dargestellt, wie sich die Ausführung einer 0-
Adressaddition auf den Inhalt des Stapels auswirkt. Das Ergebnis ersetzt die dabei
verarbeiteten Operanden auf dem Stapel.
Damit der Stapel einer 0-Adressarchitektur mit Einträgen gefüllt werden kann, muss
wenigstens ein Befehl verfügbar sein, in dem ein unmittelbarer Wert codiert ist.
Zugriffe auf den Hauptspeicher sind dann möglich, indem die effektive Adresse
zuerst als Konstante auf den Stapel geschrieben und darüber anschließend indirekt
auf den Hauptspeicher lesend oder schreibend zugegriffen wird. Die Adressierung
der auf dem Stapel befindlichen effektiven Adresse erfolgt hierbei implizit mit dem
jeweiligen Zugriffsbefehl. Reale 0-Adressarchitekturen verfügen darüber hinaus
meist über (1-Adress-)Lade- und Speicherebefehle, in denen beliebige Hauptspei-
cheradressen codiert sein können ( push und pop ). Sie dienen der Beschleunigung
der häufigen Hauptspeicherzugriffe, die nämlich notwendig sind, weil der Stapel mit
seinem sich laufend ändernden Füllstand schlecht geeignet ist, Variablen über län-
gere Zeitperioden darin zu halten.
 
Search WWH ::




Custom Search