Hardware Reference
In-Depth Information
Befehle fur ganzzahlige Operationen, deren Funktion sich aus dem Namen
erschließt:
ADD
,
SUB
,
MUL
und
DIV
.Ferner
SL
(shift left) und
SR
(shift
right). Bei diesen Befehlen kann der dritte Operand ein Direktoperand
sein (
ADD $X,$Y,$Z
oder
ADD $X,$Y,Z
). All diese Befehle arbeiten mit
vorzeichenbehafteten Werten. Von allen gibt es auch eine vorzeichenlose
Variante. Dem Befehlsnamen wird dafur der Buchstabe
U
(fur
”
unsigned“)
vorangestellt:
ADDU
,
SRU
etc. Diese Befehle signalisieren keine Uberlaufe.
Der Befehl
NEG $X,Y,$Z
berechnet
$X
←
Y
−
$Z
.Esistdereinzige,beidem
der Direktoperand als zweiter Operand geschrieben wird. In der Kurz-
schreibweise
NEG $X,$Z
berechnet er das Zweikomplement von
$Z
.
Befehle fur bitweise logische Operationen
AND
,
OR
,
XOR
,
NOR
,
NAND
,
ANDN
,
ORN
und
NXOR
.
Befehle fur Vergleiche:
CMP $X,$Y,$Z
vergleicht die Werte in
$Y
und
$Z
und schreibt in
$X
den Wert 0,
−
1oder1abhangig davon, ob
$Y
gleich,
kleiner oder großer ist als
$Z
.
Befehle fur den Speicherzugriff:
LDO $X,$Y,$Z
ladt ein Octabyte aus dem
Speicher von der effektiven Adresse
$Y
+
$Z
in das Register
$X
. Umgekehrt
schreibt
STO $X,$Y,$Z
den Wert aus Register
$X
in den Speicher. Die
Befehlspaare
LDB
/
STB
,
LDW
/
STW
und
LDT
/
STT
dienen dem Zugriff auf 1-
, 2- und 4-Byte große Werte im Speicher. Speicherzugriff erfolgt immer
ausgerichtet an durch 1, 2, 4 oder 8 teilbare Adressen.
Befehle fur Operationen mit 64-Bit-Gelitkommazahlen
FADD
,
FSUB
,
FMUL
,
FDIV
,
FREM FSQRT
und
FCMP
.Mit
FLOT $X,$Z
wird der ganzzahlige Wert
aus
$Z
in einen Gleitkommawert gewandelt. Der umgekehrte Weg funk-
tioniert mit
FIX $X,$Z
.
Mit dem Befehl
GET $X,r
n
wird der Inhalt des angegebenen Spezialregisters
in Register
$X
geschrieben und mit
PUT r
n
,
$X
ein Wert in das Spezialregister
ubertragen.
MMIX
kennt einen unbedingten Sprung
JMP ziel
, der zum angegebenen Ziel
springt. Die Zieladresse wird im Befehlswort relativ zum aktuellen Programm-
zahler angegeben. Ferner gibt es bedingte Sprunge fur unterschiedliche Be-
dingungen - jeweils auch in der Version
”
Probable Branch“ (siehe Kapitel 6):
BZ $X,ziel
springt nur dann zur Zieladresse, wenn der Wert in Register
$X
0 ist (Branch if Zero). Daneben gibt es die Befehle
BP
(positiv),
BN
(negativ),
BEV
(gerade),
BOD
(ungerade),
BNN
(nicht-negativ),
BNP
(nicht-positiv) und
BNZ
(nicht-Null).
Der Assembler
mmixal
kennt so genannte lokale Labels (Sprungmarken),
die im Gegensatz zu anderen Labels wieder verwendet werden konnen. Die
Sprungmarke wird durch
1H
(1 Here) angegeben. Verzweigt wird allerdings