<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=MMIX</id>
	<title>MMIX - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=MMIX"/>
	<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=MMIX&amp;action=history"/>
	<updated>2026-04-06T11:09:03Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Demo Wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://demowiki.knowlus.com/index.php?title=MMIX&amp;diff=2406&amp;oldid=prev</id>
		<title>imported&gt;HReuter: +Datei:The Art of Computer Programming,_Volume_1_MMIX-3005.jpg</title>
		<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=MMIX&amp;diff=2406&amp;oldid=prev"/>
		<updated>2025-08-19T23:47:57Z</updated>

		<summary type="html">&lt;p&gt;+&lt;a href=&quot;/index.php?title=Datei:The_Art_of_Computer_Programming,_Volume_1_MMIX-3005.jpg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Datei:The Art of Computer Programming, Volume 1 MMIX-3005.jpg (Seite nicht vorhanden)&quot;&gt;Datei:The Art of Computer Programming,_Volume_1_MMIX-3005.jpg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:The Art of Computer Programming,_Volume_1_MMIX-3005.jpg|mini|The Art of Computer Programming, Vol. 1, Fascicle 1: MMIX – A RISC Computer for the New Millennium]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;MMIX&amp;#039;&amp;#039;&amp;#039; [{{IPA|ˈɛmɪks}}] ist ein 64-Bit-[[Automat (Informatik)|Modellcomputer]] (engl. &amp;#039;&amp;#039;abstract machine&amp;#039;&amp;#039;) mit einem [[Reduced Instruction Set Computing|RISC]]-Befehlssatz. [[Donald E. Knuth]] benutzt ihn in seinem mehrbändigen Standardwerk &amp;#039;&amp;#039;[[The Art of Computer Programming]],&amp;#039;&amp;#039; um die vorgestellten [[Algorithmus|Algorithmen]] zu beschreiben. MMIX ersetzt den älteren [[MIX (fiktiver Computer)|MIX]]-Modellcomputer der ersten Auflagen durch eine moderne, erweiterte Version.&lt;br /&gt;
&lt;br /&gt;
Knuth begründet diese Wahl mit dem Hinweis, dass das [[Programmierung|Programmieren]] in einer hypothetischen [[Assemblersprache]] verhindere, dass sein Werk rasch veraltet wirke. Man habe in den letzten Jahrzehnten immer wieder neue [[Programmiersprache]]n gesehen, die nur kurze Zeit Interesse fanden. Zudem erlaube eine hardwarenahe Sprache, die Probleme bei der effizienten Implementation von Algorithmen konkreter darzustellen als eine [[höhere Programmiersprache]].&lt;br /&gt;
&lt;br /&gt;
Der MMIX wird über 256 [[Maschinenbefehl]]e gesteuert. Die meisten, insbesondere die arithmetisch-logischen Befehle, verwenden ausschließlich [[Register (Computer)|Register]]-[[Ausdruck (Programmierung)|Operanden]]. Wie moderne RISC-Prozessoren hat der MMIX mit 256 eine relativ große Zahl von Allzweck-Registern. Zusätzlich gibt es 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.&lt;br /&gt;
&lt;br /&gt;
Die Tatsache, dass der MMIX nicht als [[Hardware]], sondern als [[Software]]-[[Simulation]] implementiert ist, 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 (Informatik)|Laufzeit]] bzw. die benötigten [[Taktzyklus|Taktzyklen]] und die Anzahl der ausgeführten Befehle einzelner Algorithmen und ermöglicht so einen direkten und ungestörten Vergleich unterschiedlicher Algorithmen.&lt;br /&gt;
&lt;br /&gt;
== Architektur ==&lt;br /&gt;
MMIX ist ein [[Binärcode|Binärcomputer]] mit einem 64 Bit großen [[Virtuelle Speicherverwaltung|virtuellen Adressraum]] und 32-Bit-[[Befehlssatz|Befehlen]], die die [[big-endian]]-Konvention benutzen.&lt;br /&gt;
&lt;br /&gt;
=== Befehle ===&lt;br /&gt;
Zu allen Befehlen gehören [[Mnemotechnik|Mnemonics]], etwa &amp;#039;&amp;#039;ADD&amp;#039;&amp;#039; zu 32. Die meisten Befehle haben die Form &amp;#039;&amp;#039;OP X,Y,Z&amp;#039;&amp;#039;, wobei OP für die Anweisung steht und X für das Register, in dem das Ergebnis gespeichert wird. Der Rest bezeichnet die Operanden der Anweisung. Jedes Feld ist acht Bit breit. &amp;#039;&amp;#039;ADD $0,$1,3&amp;#039;&amp;#039;, addiert beispielsweise den Inhalt aus Register $1 zu 3 und speichert das Ergebnis in Register $0.&lt;br /&gt;
&lt;br /&gt;
MMIX-Programme benutzen normalerweise die [[MMIXAL]]-Assembler-Sprache (siehe dazu die [[Liste von Hallo-Welt-Programmen/Assembler#MMIX, MMIXAL|Hello-World-Seite]]).&lt;br /&gt;
&lt;br /&gt;
=== Register ===&lt;br /&gt;
Es gibt 256 Allzweckregister &amp;#039;&amp;#039;im&amp;#039;&amp;#039; 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.&lt;br /&gt;
&lt;br /&gt;
==== Lokaler Register-Stack ====&lt;br /&gt;
Der lokale Register-Stack 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 auf den Stack gelegten Register („PUSH“) zurückgelesen („POP“). 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.&lt;br /&gt;
&lt;br /&gt;
==== Spezialregister ====&lt;br /&gt;
Die 32 Spezialregister sind:&lt;br /&gt;
&amp;lt;!-- ATTENTION&lt;br /&gt;
the below numbered definition list has been simulated/hacked&lt;br /&gt;
because using #; and #: like done for rB numbers only the first entry&lt;br /&gt;
further entries must use the #&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039; and #: syntax to obtain a number --&amp;gt;&lt;br /&gt;
#; rB, das Bootstrap-Register (trip)&lt;br /&gt;
#: Beim Zuweisen von, rB ← $255 und $255 ← rJ. Somit wird rJ in einem normalen Register gespeichert.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rD, Dividendenregister&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: „Unsigned Integer Division“ verwendet dieses Register.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rE, Epsilonregister&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Für Gleitkommavergleiche mit Beachtung des Epsilons&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rH, Himultregister&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern des linken Teils eines 128-Bit Ergebnisses nach einer „unsigned integer“-Multiplikation.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rJ, return Jump register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Beim Ausführen von PUSH wird die Adresse der nächsten Anweisung hier gespeichert und beim Rücksprung von POP gelesen.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rM, Multiplex mask register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Wird vom Multiplex-Befehl verwendet&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rR, Restregister&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Für den Rest einer „integer division“&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rBB, Bootstrap register (trap)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Beim Zuweisen von, rBB ← $255 und $255 ← rJ. Somit wird rJ in einem normalen Register gespeichert.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rC, Cycle counter&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Wird bei jedem Zyklus erhöht&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rN, Seriennummer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Eine Konstante, die den MMIX-Prozessor bezeichnet&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rO, Registerstack Offset&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zur Umsetzung des Register-Stacks&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rS, Registerstack Pointer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zur Umsetzung des Register-Stacks&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rI, Interval counter&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Wird bei jedem Zyklus verringert. Löst bei 0 ein Interrupt aus.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rT, Trap address Register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern der Adresse des Trip-Vektors&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rTT, dynamic Trap address register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern der Adresse des Trip-Vektors&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rK, Interrupt mask register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Aktivieren oder Deaktivieren von Interrupts&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rQ, Interrupt request register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern der Interrupts bei ihrem Auftreten&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rU, Usage counter&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zählt die ausgeführten Befehle&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rV, Virtual translation register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Übersetzen einer virtuellen Adresse in eine physische&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rG, Global threshold register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Alle Register größer-gleich rG gehören zu den globalen Registern.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rL, Local threshold register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Alle Register kleiner als rL gehören zu den lokalen Registern.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rA, Arithmetic status register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Aufzeichnen arithmetischer Exceptions wie Überläufen („overflow“) oder Division durch Null&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rF, Failure location register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Hier wird die Adresse des Befehls gespeichert, der einen Fehler ausgelöst hat.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rP, Prediction register&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Wird von „conditional swap“ (CSWAP) verwendet&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rW, Where-interrupted register (trip)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern des nachfolgenden Befehls, der von einem Interrupt unterbrochen wurde&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rX, Execution register (trip)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern des Befehls, der von einem Interrupt unterbrochen wurde&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rY, Y Operand (trip)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern des Y-Operanden bei einem Interrupt&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rZ, Z Operand (trip)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern des Z-Operanden bei einem Interrupt&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rWW, Where-interrupted register (trap)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern des nachfolgenden Befehls, der von einem Interrupt unterbrochen wurde&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rXX, Execution register (trap)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern des Befehls, der von einem Interrupt unterbrochen wurde&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rYY, Y Operand (trap)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern des Y-Operanden bei einem Interrupt&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;rZZ, Z Operand (trap)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#: Zum Speichern des Z-Operanden bei einem Interrupt&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
*  Heidi Anlauff, Axel Böttcher &amp;amp; Martin Ruckert: &amp;#039;&amp;#039;Das MMIX-Buch. Ein praxisnaher Zugang zur Informatik.&amp;#039;&amp;#039; Springer, Berlin [u.&amp;amp;nbsp;a.] 2002, ISBN 3-540-42408-3&lt;br /&gt;
* Donald E. Knuth: &amp;#039;&amp;#039;MMIXware: A RISC Computer for the Third Millennium.&amp;#039;&amp;#039; Springer, Berlin [u.&amp;amp;nbsp;a.] 1999, ISBN 3-540-66938-8&lt;br /&gt;
* ders.: &amp;#039;&amp;#039;The Art of Computer Programming. Vol. 1, Fascicle 1: MMIX – A RISC Computer for the New Millennium.&amp;#039;&amp;#039; 3. Ausgabe. Addison-Wesley, 2005, ISBN 0-201-85392-2&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Commonscat}}&lt;br /&gt;
* [https://www-cs-faculty.stanford.edu/%7Eknuth/mmix.html Donald Knuths MMIX Seite] (englisch)&lt;br /&gt;
* [http://mmix.cs.hm.edu/index.html MMIX Homepage] (englisch)&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Mmix}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Virtualisierung]]&lt;br /&gt;
[[Kategorie:Rechnerarchitektur]]&lt;br /&gt;
[[Kategorie:Assembler]]&lt;/div&gt;</summary>
		<author><name>imported&gt;HReuter</name></author>
	</entry>
</feed>