MMIX [ˌɛmɪks] ist ein 64-Bit-Modellcomputer (engl: abstract machine) mit einem RISC-Befehlssatz. Donald Knuth benutzt ihn in seinem mehrbändigen Standardwerk The Art of Computer Programming, um die vorgestellten Algorithmen zu beschreiben. MMIX ersetzt den älteren MIX-Modellcomputer der ersten Auflagen durch eine moderne, erweiterte Version.
Knuth begründet diese Wahl mit dem Hinweis, dass das Programmieren in einer hypothetischen Assemblersprache verhindert, dass sein Werk rasch veraltet wirkt. Man hätte in den letzten Jahrzehnten immer wieder neue Programmiersprachen gesehen, die nur kurze Zeit Interesse fanden. Zudem erlaubt eine hardwarenahe Sprache, die Probleme bei der effizienten Implementation von Algorithmen konkreter darzustellen als eine höhere Programmiersprache.
Der MMIX wird über 256 Maschinenbefehle gesteuert. Die meisten, insbesondere die arithmetisch-logischen Befehle, besitzen ausschließlich Register-Operanden. Wie moderne RISC-Prozessoren verfügt der MMIX über eine relativ hohe Zahl von Allzweck-Registern, 256 beim MMIX. Zusätzlich verfügt er über 32 Spezialregister zum Anzeigen von Fehlern und bestimmten Zuständen. Daneben erlaubt MMIX, im Gegensatz zum erwähnten MIX, auch virtuelle Adressierung und damit die Untersuchung von Speicheralgorithmen.
Die Tatsache, dass es sich beim MMIX nicht um Hardware, sondern um Software handelt, ist wohl einer der Gründe, warum er vor allem in der Forschung und der Lehre eingesetzt wird. Insbesondere auf dem Gebiet der Algorithmenentwicklung und der Effizienzmessung von Algorithmen ist der MMIX von großem Nutzen. Die Simulatorsoftware gibt Auskunft über die Laufzeit bzw. die benötigten Taktzyklen und die Anzahl der ausgeführten Befehle einzelner Algorithmen und ermöglicht so einen direkten und ungestörten Vergleich verschiedener Algorithmen.
Inhaltsverzeichnis |
MMIX ist ein Binärcomputer mit einem 64-Bit großen virtuellen Adressraum und 32-Bit Befehlen, die die big-endian-Konvention benutzen.
Alle Befehle besitzen zugehörige Mnemonics. Zum Beispiel gehört Befehl 32 zu ADD. Die meisten Befehle haben die Form OP, X, Y, Z, wobei OP für die Anweisung und X für das Register, in dem das Ergebnis gespeichert werden soll, steht. Der Rest steht für die Operanden der Anweisung. Jedes Feld ist acht Bit breit. ADD $0, $1, 3, wird beispielsweise den Inhalt aus Register $1 mit 3 addieren und in Register $0 speichern.
MMIX Programme benutzen normalerweise die MMIXAL-Assembler Sprache (siehe dazu die Hello-World-Seite).
Es gibt 256 Allzweckregister im MMIX-Chip, die von $0 bis $255 durchnummeriert sind, und 32 Spezialregister. Wenn X eine Zahl von 0 bis einschließlich 255 bezeichnet, legen die Register rL und rG fest, ob $X ein lokales oder globales Register ist.
Der lokale Registerstack führt seine eigenen Unterroutinen mit eigenen rL lokalen Registern ($0 bis $(rL-1)) durch. Die Argumente der Unterprogramme verbleiben bei Aufruf in lokalen Registern des Unterprogramms. Beim Rücksprung aus dem Unterprogramm werden die zuvor gepushten Register zurückgepopt. Da nur 512 lokale, physische Register vorliegen, wird ein Teil des Stacks im Hauptspeicher abgelegt. Mit den Spezialregistern rO und rS kann man einsehen, welcher Teil des lokalen Registerstacks bereits im Speicher liegt.
Die 32 Spezialregister sind: