Architecture de Von Neumann
Architecture de référence
L'architecture générale des ordianteurs a été imaginée par John Von Neumann, mathématicien et physicien américano-hongrois en 195.
L’architecture de von Neumann décompose l’ordinateur en 4 parties distinctes :
- l’unité arithmétique et logique (UAL ou ALU en anglais) ou unité de traitement : son rôle est d’effectuer les opérations de base ;
- l’unité de contrôle, chargée du « séquençage » des opérations ;
- la mémoire qui contient à la fois les données et le programme qui indiquera à l’unité de contrôle quels sont les calculs à faire sur ces données. La mémoire se divise entre mémoire volatile (programmes et données en cours de fonctionnement) et mémoire permanente (programmes et données de base de la machine) ;
- les dispositifs d’entrée-sortie, qui permettent de communiquer avec le monde extérieur.
Lien vers un excellent site (pixees) :
https://pixees.fr/informatiquelycee/n_site/nsi_prem_von_neu.html
UAL
L'unité arithmétique et logique est le coeur de l'ordinateur. On la représente habituellement par ce schéma (en forme de V) :
- A et B sont les opérandes (les entrées)
- R est le résultat
- F est une opération binaire (opération à effectuer)
- D est un drapeau indiquant un résultat secondaire de la fonction (signe, erreur, etc.)
Mémoire
La mémoire est un tableau dans lequel seront sttockés aussi bien les varaibles que les programmes. Chaque cellule de ce tableau possède une adresse X. Il exite plusieurs façon de noter les valeurs : M[X], X (et $X pour une valeur), etc.
Unité de commande
C'est elle qui donne les ordres à toutes les autres parties de l'ordinateur. Elle possède principalement quatre registres :
- CO : le compteur ordinal, qui contient la'adresse de la prochaine instruction à exécuter;
- RI : le registre qui contient l'instruction en cours;
- AC : l'accumulateur chargé de stocker des opérandes intermédiaires (opérande : argument)
- CC : le code condition pour les instructions de rupture conditionnelle
On peut résumer son fonctionnement par l'algorithme suivant :
Répéter indéfiniment :
RI ← M[CO]
CO ← CO+1
R.OP(RI.AD)
Fin du répéter
Quelques commentaires :
- L'instruction désignée par CO est chargée dans RI
- CO est incrémenté de 1
- L'opération chargée dans RI est décomposée de la façon suivante : OP correspond à la fonction et AD est son opérande
- En cas de rupture conditionnelle, l'adresse du saut est enregistrée dans CO
Exemples
On imagine un ordinateur constitué d'ume mémoire centrale et d'un jeu d'instructions.
- Mémoire : tableau de 32 cellules. Chaque cellule constutuée d'un octet.
- Instructions : code opération sur 3 bits et une partie adresse sur 5 bits
Voici le tableau d'instructions :
Instruction |
Effet |
LD X |
Lit le contenu de la cellule X (ACC ← M[X]) |
STO X |
Enregistre dans la cellule X (M[X] ← ACC) |
ADD X |
Ajoute le contenu de la cellule X (ACC ← ACC +M[X]) |
SUBB X |
Soustrait le contenu de la cellule X (ACC ← ACC - M[X]) |
JMP ADR |
Saute à l'adresse ADR (CO ← A) |
JMPZ ADR |
Saute à l'adresse ADR si nul |
JMPP ADR |
Saute à l'adresse ADR si positif |
JMPN ADR |
Saute à l'adresse ADR si négatif |
On considèrera qu'un programme commence à l'adresse 8, les adresses 0 à 7 étant réservées au stockage des données.
Voici un exemple de programme :
Adresse |
Contenu |
0 |
48 |
1 |
37 |
..... |
...... |
8 |
LD 0 |
9 |
SUB 1 |
10 |
STO 2 |
11 |
END |
Que fait ce programme ?
Ecrire un autre programme, avec ce jeu d'instructions, qui lit la valeur entrée dans la case mémoire 0
Ecrire un programme qui taduise l'expression z = x+y
Ecrire un programme qui écrit le max de deux nombres
Simulateurs de CPU
Il existe autant de langages machines que de types de processeurs. Les commandes de base sont assez faciles à transposer d'un langage à l'autre.
Exemple avec l'instruction STO
qui peut s'appeler STR
, STA
Lien vers un simulateur :
http://www.peterhigginson.co.uk/AQA/
avec sa liste d'instructions :
The AQA Instruction Set.
LDR Rd, <memory ref> Load the value stored in the memory location specified by <memory ref> into register d.
STR Rd, <memory ref> Store the value that is in register d into the memory location specified by <memory ref>.
ADD Rd, Rn, <operand2> Add the value specified in <operand2> to the value in register n and store the result in register d.
SUB Rd, Rn, <operand2> Subtract the value specified by <operand2> from the value in register n and store the result in register d.
MOV Rd, <operand2> Copy the value specified by <operand2> into register d.
CMP Rn, <operand2> Compare the value stored in register n with the value specified by <operand2>.
B <label> Always branch to the instruction at position <label> in the program.
B<condition> <label> Conditionally branch to the instruction at position <label> in the program if the last comparison met the criteria specified by the <condition>. Possible values for <condition> and their meaning are: EQ:Equal to, NE:Not equal to, GT:Greater than, LT:Less than.
AND Rd, Rn, <operand2> Perform a bitwise logical AND operation between the value in register n and the value specified by <operand2> and store the result in register d.
ORR Rd, Rn, <operand2> Perform a bitwise logical OR operation between the value in register n and the value specified by <operand2> and store the result in register d.
EOR Rd, Rn, <operand2> Perform a bitwise logical exclusive or (XOR) operation between the value in register n and the value specified by <operand2> and store the result in register d.
MVN Rd, <operand2> Perform a bitwise logical NOT operation on the value specified by <operand2> and store the result in register d.
LSL Rd, Rn, <operand2> Logically shift left the value stored in register n by the number of bits specified by <operand2> and store the result in register d.
LSR Rd, Rn, <operand2> Logically shift right the value stored in register n by the number of bits specified by <operand2> and store the result in register d.
HALT Stop the execution of the program.
De nouveau, un lien vers pixees :
https://pixees.fr/informatiquelycee/n_site/nsi_prem_sim_cpu.html
Travaux à réaliser
Il s'agit de programmer en langage machine les structures de base qu vous connaissez. Vous utiliserez le simulateur afin de tester vos productions.
Télécharger le fichier Jupyter que vous trouverez ici :
Télécharger le fichier jupyter