MÉLANGER - MIX

MÉLANGER
Designer Donald Knuth
Morceaux 31 bits
Introduit 1968
Concevoir accumulateur
Taper hypothétique
Codage Fixé
Branchement Code de condition et test de registre
Endianité Gros
Ouvert Oui, et libre de droits
Registres
9 au total

MIX est un ordinateur hypothétique utilisé dans la monographie de Donald Knuth , The Art of Computer Programming ( TAOCP ). Le numéro de modèle de MIX est 1009, qui a été dérivé en combinant les numéros de modèle et les noms de plusieurs machines commerciales contemporaines jugées importantes par l'auteur. De plus, "MIX" lu comme un chiffre romain est 1009.

Le MIX des années 1960 a depuis été remplacé par une nouvelle architecture informatique (également hypothétique), MMIX , qui sera incorporée dans les prochaines éditions de TAOCP .

Des implémentations logicielles pour les architectures MIX et MMIX ont été développées par Knuth et mises à disposition gratuitement (appelées respectivement « MIXware » et « MMIXware »). Plusieurs dérivés des émulateurs MIX/MMIX de Knuth existent également. GNU MDK est l'un de ces progiciels ; il est gratuit et fonctionne sur une grande variété de plateformes.

Leur but de l' éducation est tout à fait semblable à John L. Hennessy « s et David A. Patterson » s DLX architecture, de l' ordinateur Organisation et conception - Le matériel d' interface du logiciel .

Architecture

MIX est un ordinateur hybride binairedécimal . Lorsqu'il est programmé en binaire, chaque octet a 6 bits (valeurs comprises entre 0 et 63). En décimal, chaque octet a 2 chiffres décimaux (les valeurs vont de 0 à 99). Les octets sont regroupés en mots de cinq octets plus un signe. La plupart des programmes écrits pour MIX fonctionneront en binaire ou en décimal, tant qu'ils n'essaient pas de stocker une valeur supérieure à 63 dans un seul octet.

Un mot est compris entre -1 073 741 823 et 1 073 741 823 (inclus) en mode binaire, et -9 999 999 999 à 9 999 999 999 (inclus) en mode décimal. La représentation en signe et en grandeur des nombres entiers dans l'architecture MIX fait la distinction entre "−0" et "+0". Cela contraste avec les ordinateurs modernes, dont la représentation en complément à deux des quantités entières comprend une seule représentation pour zéro, mais dont la plage pour un nombre donné de bits comprend un entier négatif de plus que le nombre d'entiers positifs représentables.

Registres MIX
3 0 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (position du bit)
Registres
± A1 A2 A3 A4 A5 rA , Accumulateur
± X1 X2 X3 X4 X5 rX , Rallonge
Registres d'indexation
  ± I1.4 I1.5 rI1 , Indice 1
  ± I2.4 I2.5 rI2 , Indice 2
  ± I3.4 I3.5 rI3 , Indice 3
  ± I4.4 I4.5 rI4 , Indice 4
  ± I5.4 I5.5 rI5 , Indice 5
  ± I6.4 I6.5 rI6 , indice 6
Compteur de programme
  J4 J5 rJ , Sauter
Indicateurs de code d'état
  O Indicateur de débordement
  <=> Indicateur de comparaison

Registres

Il y a 9 registres dans MIX :

  • rA : Accumulateur (mot entier, cinq octets et un signe).
  • rX : Extension (mot entier, cinq octets et un signe).
  • rI1 , rI2 , rI3 , rI4 , rI5 , rI6 : Registres d'index (deux octets et un signe).
  • rJ : Adresse de saut (deux octets, toujours positifs).

Un octet est supposé être d'au moins 6 bits. La plupart des instructions peuvent spécifier lesquels des "champs" (octets) d'un registre doivent être modifiés, en utilisant un suffixe de la forme (premier:dernier) . Le champ zéro est le signe à un bit.

MIX enregistre également si l'opération précédente a débordé et dispose d'un indicateur de comparaison d' un trit (inférieur à, égal ou supérieur à).

Mémoire et entrée/sortie

La machine MIX dispose de 4000 mots de stockage (chacun avec 5 octets et un signe), adressés de 0 à 3999. Une variété de périphériques d'entrée et de sortie sont également inclus :

  • Unités de bande (appareils 0…7).
  • Unités de disque ou de tambour (appareils 8…15).
  • Lecteur de carte (appareil 16).
  • Perforateur de cartes (dispositif 17).
  • Imprimante ligne (appareil 18).
  • Borne de machine à écrire (appareil 19).
  • Ruban de papier (dispositif 20).

Instructions

Chaque instruction machine en mémoire occupe un mot, et se compose de 4 parties : l'adresse (2 octets et le signe du mot) en mémoire à lire ou à écrire ; une spécification d'index (1 octet, décrivant quel registre d'index rI utiliser) à ajouter à l'adresse ; une modification (1 octet) qui spécifie quelles parties du registre ou de l'emplacement mémoire seront lues ou modifiées ; et le code d'opération (1 octet). Tous les codes d'opération ont un mnémonique associé.

3 0 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0
± Adresse Indice Modification Opération

Les programmes MIX utilisent fréquemment du code auto-modifiant, en particulier pour revenir d'un sous-programme, car MIX ne dispose pas d'une pile de retour automatique de sous-programme. Le code d'auto-modification est facilité par l'octet de modification, permettant au programme de stocker des données dans, par exemple, la partie adresse de l'instruction cible, laissant le reste de l'instruction non modifié.

Les programmes MIX sont généralement construits à l'aide du langage assembleur MIXAL ; pour un exemple, consultez la page de la liste des programmes du monde .

LDA ADDR,i(0:5) rA := memory[ADDR + rIi];
LDX ADDR,i(0:5) rX := memory[ADDR + rIi];
LD? ADDR,i(0:5) rI? := memory[ADDR + rIi];
LDAN ADDR,i(0:5) rA := - memory[ADDR + rIi];
LDXN ADDR,i(0:5) rX := - memory[ADDR + rIi];
LD?N ADDR,i(0:5) rI? := - memory[ADDR + rIi];
STA ADDR,i(0:5) memory[ADDR + rIi] := rA;
STX ADDR,i(0:5) memory[ADDR + rIi] := rX;
ST? ADDR,i(0:5) memory[ADDR + rIi] := rI?;
STJ ADDR,i(0:5) memory[ADDR + rIi] := rJ;
STZ ADDR,i(0:5) memory[ADDR + rIi] := 0;
ADD ADDR,i(0:5) rA := rA + memory[ADDR + rIi];
SUB ADDR,i(0:5) rA := rA - memory[ADDR + rIi];
MUL ADDR,i(0:5) (rA,rX) := rA * memory[ADDR + rIi];
DIV ADDR,i(0:5)
rA := int( (rA,rX) / memory[ADDR + rIi] );
rX := (rA,rX) % memory[ADDR + rIi];
ENTA ADDR,i rA := ADDR + rIi;
ENTX ADDR,i rX := ADDR + rIi;
ENT? ADDR,i rI? := ADDR + rIi;
ENNA ADDR,i rA := - ADDR - rIi;
ENNX ADDR,i rX := - ADDR - rIi;
ENN? ADDR,i rI? := - ADDR - rIi;
INCA ADDR,i rA := rA + ADDR + rIi;
INCX ADDR,i rX := rX + ADDR + rIi;
INC? ADDR,i rI? := rI? + ADDR + rIi;
DECA ADDR,i rA := rA - ADDR - rIi;
DECX ADDR,i rX := rX - ADDR - rIi;
DEC? ADDR,i rI? := rI? - ADDR - rIi;
CMPA ADDR,i(0:5) comparer rAavecmemory[ADDR + rIi];
CMPX ADDR,i(0:5) comparer rXavecmemory[ADDR + rIi];
CMP? ADDR,i(0:5) comparer rI?avecmemory[ADDR + rIi];
JMP ADDR,i
rJ := address of next instruction;
goto ADDR + rIi;
JSJ ADDR,i goto ADDR + rIi;
JOV ADDR,i
if (overflow) then
   overflow := false; 
   goto ADDR + rIi;
JNOV ADDR,i
if (no overflow) then
    goto ADDR + rIi;
else 
    overflow := false;
JL, JE, JG ADDR,i
JGE, JNE, JLE ADDR,i
if (less, equal, greater) then goto ADDR + rIi;
if (no less, unequal, no greater) then goto ADDR + rIi;
JAN/JAZ/JAP ADDR,i
JANN/JANZ/JANP ADDR,i
if (rA<0 or rA==0 or rA>0) then goto ADDR + rIi;
if (rA>=0 or rA!=0 or rA<=0) then goto ADDR + rIi;
JXN/JXZ/JXP ADDR,i
JXNN/JXNZ/JXNP ADDR,i
if (rX<0 or rX==0 or rX>0) then goto ADDR + rIi;
if (rX>=0 or rX!=0 or rX<=0) then goto ADDR + rIi;
J?N/J?Z/J?P ADDR,i
J?NN/J?NZ/J?NP ADDR,i
if (rI?<0 ou rI?==0 ou rI?>0) alors goto ADDR + rIi;
if (rI?>=0 ou rI?!=0 ou rI?<=0) alors goto ADDR + rIi;
MOVE ADDR,i(F)
for (n = 0; n < F; n++, rI1++)
    memory[rI1] := memory[ADDR+rIi+n];
SLA/SRA ADDR,i
SLAX/SRAX ADDR,i
SLC/SRC ADDR,i
décalage rAvers la gauche/droite par ADDR+rIioctets
décalage (rA,rX)vers la gauche/droite par ADDR+rIioctets
rotation (rA,rX)vers la gauche/droite par ADDR+rIioctets
NOP ne fais rien;
HLT arrêter l'exécution ;
IN ADDR,i(F) lire dans un bloc de l'unité d'entrée F
en memory[ADDR + rIi]avant ;
OUT ADDR,i(F) sortir un bloc vers l'unité F
à memory[ADDR + rIi]partir de maintenant ;
IOC ADDR,i(F) envoyer l'instruction de contrôle à l'unité d'e/sF ;
JRED ADDR,i(F) if (i/o unit F is ready) then goto ADDR + rIi;
JBUS ADDR,i(F) if (i/o unit F is busy) then goto ADDR + rIi;
NUM rA := numerical value of characters in (rA,rX);
CHAR (rA,rX) := character codes representing value of rA;

Implémentations

MIX a été implémenté dans le logiciel par :

  • MIXWare de Knuth et le MDK GNU dérivé ;
  • 9front 's mix(1); et
  • Matériel::Simulator::MIX sur CPAN .

Une implémentation FPGA de MIX a été créée pour la carte iCE40HX8K-EVB en 2021.

Voir également

Les références

Liens externes