Hardware Reference
In-Depth Information
A.2
A.2
MMIX
-Essentials
MMIX
spielt in diesem Buch eine große Rolle. Allerdings ist es fur das Verstand-
nis dieses Buches nicht erforderlich, eigene
MMIX
-Programme schreiben zu
konnen. Dieser Abschnitt fasst die wichtigsten Eigenschaften zusammen, die
notwendig sind, um die Beispiele dieses Buches verstehen zu konnen. Dieser
Abschnitt enthalt Querverweise auf Kapitel des Buches, wo Eigenheiten von
MMIX
unter Aspekten der Rechnerarchitektur erklart werden. Zum besseren
Verstandnis sollen diese Querverweise herangezogen werden.
MMIX
besitzt 256 allgemein verwendbare Register, die mit
$0
bis
$255
be-
zeichnet werden (oder abstrakt mit
$X
,
$Y
und
$Z
). Jedes dieser Register
kann einen 64-Bit-Wert aufnehmen. Dabei wird nicht unterschieden, ob dieser
Wert eine ganze Zahl, eine Gleitkommazahl oder eine Adresse reprasentiert.
Neben den 256 allgemein verwendbaren Registern gibt es 32 Spezialregister
mit wiederum 32-Bit-Breite, denen eine besondere Rolle bei einigen Befehlen
zukommt. Die Spezialregister sind mit
rA
bis
rZ
bezeichnet
1
. Beispielsweise
ist
rA
das Arithmetik-Status-Register. Uberlauf, oder Division durch 0 wird
in bestimmten Bits dieses Registers signalisiert.
Bei
MMIX
wird ein festes Befehlsformat eingesetzt. Jeder Befehl besteht aus
32 Bit (vier Byte). Die ersten 8 Bit werden verwendet, um den Befehl zu
codieren (Opcode). Somit kennt
MMIX
256 verschiedene Befehle. Die nachsten
drei Bytes konnen wie folgt aufgebaut sein (siehe dazu Abbildung 1.7):
Drei 8-Bit-Werte: zwei Operanden und Nummer des Zielregisters der Ope-
ration (
ADD $0,$1,$2
oder
ADD $0,$1,1
).
24-Bit-Direktoperand, als Offset bei unbedingten Sprungen (
JMP
).
Eine Registernummer (acht Bit), gefolgt von einem 16-Bit-Direktoperan-
den (um z.B. einen Wert in ein Register zu schreiben:
SET $0,wert
,oder
fur bedingte Sprunge
BZ $X,ziel
- siehe unten).
Als RISC-Prozessor weist
MMIX
eine Register-Register-Architektur auf (siehe
Abschnitt 1.3.4). Arithmetische und logische Befehle konnen nur Operanden
aus Registern beziehen und schreiben ihre Ergebnisse stets in Register zuruck.
Fur das Lesen aus dem Speicher oder das Schreiben in den Speicher gibt es
eigene Befehle, die ihrerseits ausschließlich fur den Speicherzugriff zustandig
sind.
Die meisten Befehle sind gemaß folgendem Muster aufgebaut:
ADD $X,$Y,$Z
addiert die Werte aus den Registern
$Y
und
$Z
und schreibt das Ergebnis
nach
$X
. Insbesondere gehorchen diesem Muster folgende Befehlsgruppen:
1
Um auf 32 zu kommen gibt es noch einige mit doppeltem Buchstaben
rXX
,
rYY
etc.