Ordinapoche

Les instructions

L'ordinapoche connait 10 codes opération (ou instructions).

Code Assembleur Instruction Signification
0 INP INPut entrée d'une donnée depuis un périphérique d'entrée
1 OUT OUTput affichage d'une donnée sur un périphérique de sortie
2 CLA CLear and Add mise à zéro du registre ACC et addition du contenu de la cellule mémoire
3 STO STOre stockage du contenu de l'ACC en mémoire centrale
4 ADD ADD addition du contenu de la cellule mémoire à l'ACC
5 SUB SUBstract soustraction du contenu de la cellule mémoire à l'ACC
6 SHT SHifT décalage à gauche (du 1er chiffre) puis à droite (du 2nd chiffre) du contenu de l'ACC
7 JMP JuMP branchement inconditionnel à l'adresse fournie
8 TAC Test Accumulator Content si (ACC = 0) alors instruction suivante sinon CO=adresse fournie
9 HRS Halt and ReSet fin du programme et remise à zéro des registres

Nous allons décrire, dans les paragraphes suivants, le rôle de ces instructions ainsi que leur principe de fonctionnement.

INP
instruction permettant la lecture d'une donnée (nécessairement numérique, d'une valeur comprise entre 0 et 999) à partir du périphérique d'entrée, ici le clavier. Pour se faire, les actions suivantes vont se succéder : 1) positionnement du bus d'adresse à l'adresse correspondant au périphérique d'entrée, 2) positionnement du bus d'adresse de la mémoire centrale à l'adresse associée à l'instruction, 3) lecture de la donnée et mémorisation à l'adresse associée à l'instruction. Exemple : INP 50 (codée 050) mémorise le nombre tapé au clavier à l'adresse 50.
OUT
instruction permettant l'affichage d'une donnée sur le périphérique de sortie qu'est l'écran. Les étapes sont les mêmes que pour l'instruction INP précédente à ceci prés que l'on adresse l'écran au lieu du clavier et que la donnée transite de la mémoire principale au périphérique de sortie. Exemple : OUT 51 (codée 151) affiche à l'écran la donnée mémorisée à l'adresse 51.
CLA
instruction initialisant le registre accumulateur (ACC) de l'unité arithmétique et logique (UAL) à la valeur fournie en argument de cette instruction. Etapes : 1) mise à zéro du registre ACC, 2) positionnement du bus d'adresse à l'adresse correspondant au registre ACC, 3) positionnement du bus d'adresse de la mémoire centrale à l'adresse associée à l'instruction, 4) lecture de la donnée et mémorisation dans le registre ACC. Exemple : CLA 52 (codée 252) initialise ACC au nombre contenu à l'adresse 52.
STO
instruction mémorisant, en mémoire centrale, le contenu du registre ACC à l'adresse fournie en argument de l'instruction. Les étapes sont similaires à celles de l'instruction CLA, sans initialisation du registre ACC bien entendu. Exemple : STO 53 (codée 353) stocke le contenu d'ACC à l'adresse 53.
ADD (resp. SUB)
instruction d'addition (resp. de soustraction) du contenu de la cellule mémoire dont l'adresse est fournie en argument au contenu du registre accumulateur de l'UAL. Les étapes sont similaires à celles de l'instruction CLA. Exemple : ADD 53 (codée 453) (resp. SUB 53) ajoute (resp. soustrait) le contenu de la cellule mémoire d'adresse 53 au registre accumulateur (ce qui correspond, si on suit l'ordre des exemples, à une multiplication pas deux dans le cas de l'addition).
SHT
instruction de décalage d'une unité vers la gauche puis vers la droite du nombre contenu dans le registre accumulateur, avec entrée de zéro à droite puis à gauche. Le but est d'obtenir très rapidement la multiplication et/ou la division par 10 (ou par 16 en hexadécimal) du nombre contenu dans l'ACC. Aucune étape particulière, si ce n'est la positionnement du bus d'adresse à l'adresse correspondant au registre ACC. Exemple : SHT 12 (codée 612) du nombre 37 donne comme résultat 003 soit 3.
JMP
saut inconditionnel (i.e sans condition) à l'adresse fournie en argument de l'instruction. Cette instruction initialise le compteur ordinal à cette adresse. Aucune étape particulière, si ce n'est l'initialisation de CO. Exemple : JMP 60 (codée 760) initialise CO à la valeur (adresse) 60.
TAC
comparaison du contenu du registre accumulateur (ACC) et du nombre 0. Si leur valeur sont égales, la valeur du compteur ordinal est augmentée de 1 comme d'habitude, sinon le CO prend la valeur fournie avec l'instruction. Etapes : 1) positionnement du bus d'adresse à l'adresse correspondant au registre ACC, 2) comparaison entre ACC et 0 puis retour du résultat (un booléen) à l'unité de commande, 3) mise à jour du compteur ordinal (CO). Exemple : TAC 70 (codée 870), initialise CO à 70 si ACC ≠ 0.
HRS
instruction de fin de programme. Aucune étape particulière.

Exemple

L'exemple ci-dessous est un premier programme très simple qui permet d'additionner le nombre A au nombre B pour obtenir la somme S. Il ne cherche pas à vous impressionner sur la puissance supposée d'un ordinateur mais à vous familiariser avec son fonctionnement.

Adresse Contenu Commentaires
00 050 lire A (d'adresse 50)
01 051 lire B (d'adresse 51)
02 250 initialiser l'accumulateur et additionner A
03 451 additionner B (S est maintenant dans l'accumulateur)
04 352 mémoriser S à l'adresse 52
05 152 afficher S
06 900 arrêter et remettre à l'état initial

Cet exemple peut vous sembler plutôt long et fastidieux pour faire quoi ? Une addition aussi simple que A + B, mais ce faisant, vous avez pénétré la méthode de travail d'un ordinateur, une méthode qui découpe le travail en tranche sans rien laisser au hasard. L'ordinateur effectue ce calcul des millions de fois plus vite que nous, en quelques nanosecondes, et une fois ce programme mis en mémoire, l'ordinateur est alors capable de faire n'importe quelle addition.