| 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 :
«
MMIXest 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 concevoirMMIXde 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 queMMIXpourrait en principe être construit et peut-être faire concurrence à certains des langages généraux les plus rapides disponibles commercialement, »
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.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.
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 .
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 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.