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.