Ordre des opérations à suivre pour l'utilisation de la machine :
❶ CHARGEMENT DU PROGRAMME
Chargement du programme calculant f.
❷ BANDE D'ENTRÉE
Saisie et contrôle de l'instance x.
❸ PROGRAMME
Contrôle de l'exécution du programme.
❹ BANDE DE SORTIE
Sortie et contrôle de y := f(x).
Le fichier à charger doit contenir une instruction du programme par ligne. Chaque instruction peut éventuellement être accompagnée d'un commentaire qui commence par le caractère ;. La bande d'entrée peut être initialisée par la même occasion, si la première ligne du fichier commence par le caractère > suivi d'une liste d'entiers séparés par un espace. Par exemple > -1 12 3 0 1 rangera les entiers \(-1\), \(12\), \(3\), \(0\) et \(1\) dans les \(5\) premières cellules de la bande d'entrée.
Par souci de concision, les instructions en tête de groupe sur fond gris servent de modèles pour celles sur fond noir qui suivent et dont seule la 1ère déclinaison est donnée. Par exemple la décrémentation DEC n a pour autre déclinaison DEC @n.
Entrées/Sorties [READ | WRITE]
READ | ACC ← x[i++] | copie une valeur de la bande d'entrée dans acc. |
WRITE | y[i++] ← ACC | copie le contenu de acc sur la bande de sortie. |
Gestion mémoire [LOAD | STORE]
Chargement [LOAD]
LOAD #n | ACC ← n | charge la valeur n dans acc. |
LOAD n | ACC ← R[n] | copie le contenu du registre d'adresse \(n\) dans acc. |
LOAD @n | ACC ← R[R[n]] | copie le contenu du registre d'adresse \(R[n]\) dans acc. |
Rangement [STORE]
STORE n | R[n] ← ACC | copie le contenu de acc dans le registre d'adresse \(n\). |
STORE @n | R[R[n]] ← ACC | copie le contenu de acc dans le registre d'adresse \(R[n]\). |
Opérations arithmétiques [INC | DEC | ADD | SUB | MUL | DIV | MOD]
Décrémentation / Incrémentation [INC | DEC]
INC n | R[n] ← R[n] + 1 | incrémente le contenu du registre d'adresse \(n\). |
INC @n | R[R[n]] ← R[R[n]] + 1 | incrémente le contenu du registre d'adresse \(R[n]\). |
DEC n | R[n] ← R[n] - 1 | décrémente le contenu du registre d'adresse \(n\). |
Opérations arithmétiques [ADD | SUB | MUL | DIV | MOD]
ADD #n | ACC ← ACC + n | ajoute la valeur \(n\) à acc. |
ADD n | ACC ← ACC + R[n] | ajoute le contenu du registre d'adresse \(n\) à acc. |
ADD @n | ACC ← ACC + R[R[n]] | ajoute le contenu du registre d'adresse \(R[n]\) à acc. |
SUB #n | ACC ← ACC - n | soustrait la valeur \(n\) à acc. |
MUL #n | ACC ← ACC × n | multiplie la valeur \(n\) à acc. |
DIV #n | ACC ← ACC / n | quotiente acc par la valeur \(n\). |
MOD #n | ACC ← ACC % n | réduit acc modulo la valeur \(n.\) |
Ruptures de séquence [JUMP | JUMZ | JUML | JUMG | NOP]
Inconditionnelles
JUMP n | CO ← n | saut à l'instruction \(n\). |
JUMP @n | CO ← R[n] | saut à l'instruction \(R[n]\). |
STOP | arrêt du programme. | |
NOP | Instruction nulle. Ne fait rien. |
Conditionnelles
JUMZ n | IF (ACC = 0) CO ← n | saut à l'instruction \(n\) si acc=0. |
JUMZ @n | IF (ACC = 0) CO ← R[n] | saut à l'instruction \(R[n]\) si acc=0. |
JUML n | IF (ACC < 0) CO ← n | saut à l'instruction \(n\) si acc<0. |
JUMG n | IF (ACC > 0) CO ← n | saut à l'instruction \(n\) si acc>0. |