Information Technology Reference
In-Depth Information
Codeerzeugung etwas raffinierter realisiert, lässt sich der zweite Befehl, mit dem der Inhalt von x
auf den Stapel geladen wird, durch einen dup-Befehl (duplicate) zum Duplizieren eines Stapelein-
trags ersetzen (in der letzten Tabellenspalte ist jeweils der sich mit den Befehlen ändernde Inhalt
des Stapels dargestellt). Das letzte in der Befehlsfolge codierte „push x“ kann so jedoch nicht ver-
mieden werden, da sich zum Zeitpunkt der Ausführung dieses Befehls der Inhalt von x nicht auf
dem Stapel befindet.
Tabelle 1.7. Umwandlung eines Ausdrucks (1.) in einen Syntaxbaum und (2.) in Maschinencode. In
der letzten Spalte ist dargestellt, wie der Stapel sich bei schrittweiser Ausführung der Befehlsfolge
ändert
Ausdruck
Syntaxbaum
Maschinencode
Stapelinhalt
y = ax 2 + bx + c
pusha
y
&y
=
a
&y
push
a
x
a
&y
push
x
&y
+
push
x
x
x
a
&y
x 2
a
&y
+
mul
*
ax 2
&y
mul
ax 2
a
c
b
&y
push
b
*
*
ax 2
x
b
&y
push
x
ax 2
x
x
b
x
bx
&y
mul
ax 2
c
bx
&y
push
c
ax 2
bx+c
&y
add
ax 2 +bx+c
&y
add
pop
Unter der Voraussetzung, dass sich die Variablen alle im maximal 4 GByte großen Hauptspeicher
befinden und dass die Operationen jeweils in acht Bit codiert sind, belegt das in Tabelle 1.7 darge-
stellte Maschinenprogramm insgesamt 37 Byte (wobei statt des zweiten „push x“ der Befehl dup
verwendet wurde). In Bild 1.19 ist für eine 2-Adressarchitektur ein Maschinenprogramm darge-
stellt, dass unter vergleichbaren Bedingungen generiert wurde. Die Befehlsfolge belegt insgesamt
31 Byte, wobei angenommen wurde, dass die einzelnen Befehle ähnlich denen des ColdFire
MFC5206 von Motorola codiert sind. Dabei sollte jedoch berücksichtigt werden, dass sich dieses
Ergebnis durch Optimierung der beiden Programme relativieren kann.
mov
r1, x
// r1 = x
mov
r2, r1
// r2 = x
// r2 = r2 * r1 = x 2
mul
r2, r1
// r2 = r2 * a = ax 2
mul
r2, a
mul
r1, b
// r1 = r1 * b = bx
// r2 = r2 + r1 = ax 2 + bx
add
r2, r1
// r2 = r2 + c = ax 2 + bx + c
add
r2, c
// y = ax 2 + bx + c
mov
y, r2
Bild 1.19. Berechnung eines Polynoms mit dem ColdFire MFC5206 von Motorola
1.3.3 Befehlssätze
Der Befehlssatz als wesentlicher Bestandteil eines Programmiermodells fasst
zusammen, welche Operationen mit den einzelnen Befehlen ausgeführt werden
(Abschnitt 1.3.1), wie viele Adressen in jedem Befehl codiert (Abschnitt 1.3.2) und
welche Adressierungsarten jeweils erlaubt sind (Abschnitt 1.2.3). Wegen des großen
Umfangs und der zahlreichen Implementierungsbesonderheiten wird im Folgenden
darauf verzichtet, die vollständigen Befehlssätze der in dieser Arbeit genannten Pro-
Search WWH ::




Custom Search