MMIX | ||
Concepteur | Donald Knuth | |
---|---|---|
Bits | 64-bit | |
Lancement | 1999 | |
Architecture | RISC | |
Encodage | Fixe | |
Endianness | Gros-boutiste | |
Libre | Oui | |
Registres | ||
Usage général | 256 | |
32 registres spéciaux | ||
modifier |
MMIX, prononcé /ɛm.mɪks/ et usuellement typographié dans une police à chasse fixe (MMIX
), est à la fois un jeu d'instructions 64-bit RISC et une architecture informatique conçus par Donald Knuth, avec une aide importante de John LeRoy Hennessy, un des concepteurs de l'architecture MIPS, et de Richard L. Sites, un des concepteurs de l’architecture Alpha. Knuth lui-même présente ce projet en ces mots :
«
MMIX
est un ordinateur destiné à illustrer les aspects de la programmation au niveau machine. Dans mes livres The Art of Computer Programming, il remplaceMIX
, une machine répliquant le style des années 1960, laquelle jouait un tel rôle... J'ai tenté de concevoirMMIX
de façon que son langage machine soit simple, élégant et facile à apprendre. En parallèle, j'ai fait attention d'inclure toutes les complexités nécessaires pour obtenir une haute performance dans la pratique, de sorte queMMIX
pourrait en principe être construit et peut-être faire concurrence à certains des langages généraux les plus rapides disponibles commercialement[trad 1],[1] »
En termes d’architecture informatique MMIX
est un ordinateur RISC 64 bits, avec 256 registres 64 bits généraux et 32 registres 64 bits à usage spécifique. MMIX
est une machine gros-boutiste avec des instructions 32 bits et un espace d’adressage virtuel 64 bits. Son jeu d'instructions comprend 256 codes opérations, dont un est réservé pour un potentiel usage futur. Les nombres à virgule flottante sont implémentés conformément au standard IEEE 754.
Les instructions de MMIX
sont toutes définies et utilisables à partir de leur code opération, qui est un nombre d’un octet, généralement noté sous forme hexadécimale. Cependant pour améliorer la lisibilité du code assembleur, une étiquette mnémotechnique unique est associé à chacun des codes. Ainsi l’étiquette ADD
est équivalente à l’instruction numéro 2016, qui est le code opérateur de l’addition.
La plupart des instructions sont de la forme opérateur X Y Z, où opérateur spécifie l’instruction, X est un registre servant d’accumulateur, c’est-à-dire utilisé pour stoker le résultat de l’instruction, et Y et Z désignent les registres servant d’opérandes à l’instruction. Par exemple ADD $0,$1,3
signifie affecter à $0
la Somme (arithmétique) du nombre stocké dans le registre $1
et du nombre 3
.
La plupart des instructions peuvent prendre soit des valeurs immédiates, soit utiliser le contenu d’un registre ; ainsi un seul mnémonique peut correspondre à un ou deux codes opérations.
Typiquement, les programmes MMIX
sont construits en utilisant le langage Assembleur MMIXAL
. L’exemple ci-dessous est un programme écrit en MMIXAL
qui affiche Hello world :
Main GETA $255,string ; Get the address of the string
; in register 255.
TRAP 0,Fputs,StdOut ; Put the string pointed to
; by register 255 to file StdOut.
TRAP 0,Halt,0 ; End process.
string BYTE "Hello, world!",#a,0 ; String to be printed.
; #a is newline,
; 0 terminates the string.
Dans une puce d'architecture MMIX
il y a 256 registres généraux,
auxquels on accède par leurs références notées de $0
à $255
et 32 registres spéciaux. Deux des registres spéciaux, rL
et rG
, déterminent quels sont les registres locaux et lesquels sont globaux. Tous les registres, de $0
à $(rL-1)
sont des registres locaux. Les registres de [rL] à [rG]-1 sont des registres marginaux qui retournent toujours 0 s'ils sont utilisés comme source dans une opération. Utiliser un registre marginal en tant que destination d’une opération déclenchera une incrémentation automatique de rL
pour inclure ce registre. Tous les registres de [rG] à $255
sont appelés registres globaux et ne sont pas sauvegardés sur la pile de registre.
La pile de registre local fournit à chaque procédure ses propres registres locaux rL
, notés de $0
à $(rL - 1)
. Si une procédure est appelée, les registres locaux sont ajoutés sur la pile. Les arguments de la procédure sont placés dans les registres locaux restants. Quand une procédure se termine, elle retire les registres précédemment ajoutés. Comme il n’y a que 256 registres physiques, il peut être nécessaire de stocker une partie de la pile en mémoire. Cette action est implémentée avec les registres spéciaux rO
et rS
qui enregistrent quelle partie de la pile de registre local est en mémoire et quelle partie est toujours dans les registres physiques locaux. Le registre de pile assure également la liaison rapide de procédures (en).
Les 32 registres spéciaux de l'architecture physique sont définis comme suit :
rB
, le registre d'amorçage (déclencheur), avec un b comme dans l’anglais bootstrap :rB
est affecté de la valeur stockée dans le registre $255
et le registre $255
est affecté de la valeur stockée dans le registre rJ
, sauvegardant ainsi rJ
dans un registre général.rD
, le registre de dividende :rE
, le registre epsilon, ou registre de la marge d’erreur :rH
, nommé registre himult :rJ
, le registre de retour de saut, avec un j comme dans l’anglais jump :PUSH
et POP
pour sauvegarder l’adresse de la prochaine instruction au retour d’un PUSH
.rM
est le registre de masque de multiplexageMUX
et MUXI
[2].rR
est le registre de reste :DIV
, DIVI
, DIVU
, DIVUI
ou FDIV
.rBB
, le registre d’amorçage du noyau, avec BB comme bootstrap bis :TRAP
, trap désignant un dispositif de capture en anglais, rBB
est affecté du registre $255
et le registre $255
est affecté de la valeur stockée dans rJ
, sauvegardant ainsi rJ
dans un registre général.rC
, le compteur de cycle :rN
, le registre de numéro de série :MMIX
courant.rO
, le registre d’offset de la pilerS
, avec un s comme stack, pile en anglais :rI
, le compteur d’interval :rT
, avec un t comme trap, dispositif de capture en anglais :rTT
, avec un t également en référence à l’anglais trap, mais il s’agit cette fois du registre de déclencheur dynamique (dynamic trap adress register)rK
, le registre de masque d’interruption, interrupt mask register en anglais :rQ
, le registre de requête d'interruption :rU
, le compteur d'utilisation :rV
, le registre de traduction virtuelle :rG
, le registre de seuil global :rG
font référence à des registres globaux.rL
, le registre de seuil local :rL
font référence à des registres locaux.rA
le registre de statut arithmétique :rF
le registre de positionnement d'erreur :rP
, le registre de prédiction :CSWAP
de permutation conditionnelle.rW
, le registre de lieu d'interruption :rX
, le registre d’exécution (déclencheur) :rY
l’opérande Y (déclencheur) :rZ
l’opérande Z (déclencheur) :rWW
, le registre de lieu d'interruption (capture) :rXX
, le registre d’exécution (capture) :rYY
, l’opérande Y (capture) :rZZ
, l’opérande Z (capture) :Il n’existe actuellement aucune implémentation matérielle de l’architecture à jeu d’instruction MMIX
. Cependant, le projet fpgammix l'implémente en Verilog, ce qui ouvre la possibilité de l’utiliser dans un circuit logique programmable[3].
L’architecture de jeu d’instruction MMIX
est utilisable à travers tout une panoplie d’outils logiciels pour la recherche en développement logiciel et en architecture d’ordinateur.
Knuth a développé un ensemble de logiciels nommé MMIXware
comprenant un simulateur comportemental simple de la machine, et MMIXAL
, un logiciel d’assemblage, une suite de tests, des programmes d’exemples, une documentation complète, et un simulateur de pipeline de l’architecture MMIX
[4].
Andrew Pochinsky, membre de l’équipe du centre de recherche théorique en physique du Massachusetts Institute of Technology a développé MMIXX
, un paquet implémentant un serveur graphique basé sur X11. Elle peut être combiné avec la machine virtuelle de MMIXware
pour fournir un affichage de 640×480 pixels en vraie couleur pour Linux et Unix.
Le projet GNU Compiler Collection (GCC) comprend une partie envers[trad 2] de MMIX
pour ses compilateurs C/C++, initialement développé par Hans-Peter Nilsson, et qui fait partie de la distribution standard du projet depuis la fin 2001. Il continue d’être activement développé et maintenu par des volontaires.
L’ensemble des outils existant devraient théoriquement permettre de compiler, construire et amorcer un noyau de système d’exploitation comme Linux sur un processeur MMIX
si une implémentation matériel venait à exister.
MMIX
pour GCC rédigé par Hans-Peter Nilsson.MMIX
dans GCC.MMIX
dans as l’assembleur GNU .MMIX
is a computer intended to illustrate machine-level aspects of programming. In my books The Art of Computer Programming, it replaces MIX
, the 1960s-style machine that formerly played such a role... I strove to design MMIX
so that its machine language would be simple, elegant, and easy to learn. At the same time I was careful to include all of the complexities needed to achieve high performance in practice, so that MMIX
could in principle be built and even perhaps be competitive with some of the fastest general-purpose computers in the marketplace. »
MMIX
A RISC Computer for the New Millennium. Addison-Wesley. (ISBN 0-201-85392-2) (errata)MMIX
pour l’écriture de The Art of Computer Programming (TAOCP).MMIX
.MMIX
qui dispose d’une console et d’entrées/sorties pour les périphériques de masse et l’périphériques ethernet. Actuellement elle n’est exécutable que sous Windows mais peut être utilisé pour exécuter un noyau Linux dans un environnement MMIX
.MMIX
, celui-ci a migré de Stanford à Munich en 2011.MMIX
.