Exprimer un algorithme dans un langage de programmation a pour but de le rendre exécutable par une machine dans un contexte donné. La découverte de l’architecture des machines et de leur système d’exploitation constitue une étape importante.
L'architecture générale des ordinateurs a été développée dans le cadre d'un projet EDVAC par John Von Neumann (et d'autres scientifiques de l'époque), mathématicien et physicien américano-hongrois en 1945. Ce modèle propose une structure dans laquelle le programme est stocké dans la mémoire de la machine. On parle maintenant de modèle de Von Neumann.
Vous pouvez faire des recherches autour de noms célèbres de l'informatique :
Vous pouvez également faire des recherches sur les cartes perforées (premières mémoires de masse) qui permettaient de mettre en mémoire les informations pour la machine.
source : wikipedia : carte perforée
Une carte perforée
Un perforateur de carte manuel
Un vérificateur de carte
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 : elle joue un rôle de coordonnateur ;
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.
L'unité de commande et l'unité arithmétique et logique forment l'unité centrale ou l'unité de commande ou plus communément le processeur.
Les ordinateurs actuels reposent toujours sur cette architecture même si désormais les ordinateurs possèdent des processeurs multiples et si les entrées-sorties ne sont plus directement commandées par une unité centrale.
On appelle bus les systèmes permettant le transfert de données entre les différents composants.
Il existe trois grands types de bus :
Le bus d’adresse qui permet de faire circuler des adresses (par exemple l’adresse d’une donnée à aller chercher en mémoire).
Le bus de données qui permet de faire circuler des données (par exemple le contenu d’une donnée à aller chercher en mémoire).
Le bus de contrôle qui permet de spécifier le type d’action (par exemple, écrire une donnée en mémoire ou lire une donnée en mémoire).
À ne pas confondre avec la carte mère qui est un circuit imprimé qui supporte et relie tous les composants et les périphériques propres à un ordinateur.
L'unité arithmétique et logique est le cœur de l'ordinateur. On la représente habituellement par ce schéma (en forme de V) :
source : wikipedia
Supposons une UAL fonctionnant en 8 bits (comme par exemple sur les anciennes Gameboy).
Prenant comme opérande en binaire : $A=10010001$ (soit $A=(145)_{10}$) et $B=10000011$ (soit $B=(131)_{10}$).
Supposons que l'on demande à cette UAL d'effectuer l'addition de ces deux nombres : cette information correspond à $F$.
Mathématiquement, la somme de $A$ et de $B$ vaut 276. Ce nombre s'écrit en binaire $100010100$ ; il
faudrait
donc 9 bits.
Or, comme l'UAL travaille en 8 bits, le résultat $R$,de taille fixe limitée à 8 bits, correspondra à la
somme obtenue mais tronquée
en l'octet $00010100$ ;
ainsi, $R=00010100=(20)_{10}$ au lieu de $(276)_{10}$.
L'UAL doit indiquer que le résultat renvoyé a été tronqué, c'est-à-dire que l'addition a produit une retenue, le drapeau portera donc cette information (parmi d'autres d'ailleurs).
La mémoire est un tableau dans lequel seront stockés aussi bien les variables que les programmes. Chaque cellule de ce tableau possède une adresse X. Il existe plusieurs façon de noter la valeur rattachée à une adresse X : #X (notation que l'on utilisera dans ce cours) , mais aussi M[X] ou $X.
Voici ci-dessous une représentation d'une mémoire où les adresses sont codées sur 4 bits et les valeurs sur 8 bits.
À l'adresse X$=0000$ de la mémoire est stocké le nombre entier 161 écrit en binaire, d'où la valeur : #X$=10100001$.
Physiquement, dans un ordinateur, il y a plusieurs types de mémoire ; en voici quatre :
La mémoire interne vive, appelée aussi par l'acronyme anglais RAM pour
Random Access Memory : elle est liée directement au
processeur qui peut ainsi accéder rapidement (environ 10 nanosecondes) à n'importe quelle donnée
enregistrée dessus, sans avoir à lire les données
qui précèdent.
Par contre, dès l'arrêt de l'alimentation ou de l'ordinateur, les données stockées sont perdues
:
cette mémoire est dite volatile.
La mémoire interne morte, appelée aussi par l'acronyme anglais ROM pour Read Only Memory : elle contient des données fixées lors de leur fabrication et pérennes : cette mémoire est dite permanente. Ces données servent entre autre au bon démarrage d'un ordinateur avec le BIOS.
Le temps d'accès pour un processeur à cette mémoire est de l'ordre de 150 nanosecondes.
La mémoire externe, comme les disques durs ou les clés USB, qui permettent de stocker à long terme de grandes quantités de données et programme.
Le temps d'accès pour un processeur varie d'environ 50 microsecondes (pour un disque dur SSD) a quelques millisecondes (pour un disque dur HDD).
Les registres qui sont des emplacements mémoire internes aux processeurs. On considérera surtout ce type de mémoire dans la suite.
Le temps d'accès est de l'ordre de la nanoseconde.
L'ensemble des différentes mémoires peut être schématisé par une pyramide :
à la pointe les mémoires les plus proches du processeur (registres, mémoires caches, ...)
et à la base les plus éloignées et avec un temps de transmission de données avec le processeur
plus important (disques durs, ...).
Le processeur, appelé aussi unité de commande ou unité centrale, dirige le fonctionnement de tous les autres
éléments de l'ordinateur.
Outre divers éléments comme une horloge servant à synchroniser différents éléments du processeur, l'unité
de
commande comporte un ensemble de registres
spécialisés qui ne peuvent contenir qu'un type précis de données.
Parmi ces registres, nous allons utiliser les trois suivants :
On peut résumer le fonctionnement du processeur par l'algorithme suivant :
Tant que CO contient des instructions : RI reçoit de la mémoire l'instruction dont l'adresse est contenue dans CO L'instruction chargée dans RI est exécutée. CO est incrémenté de la longueur de l'instruction traitée pour permettre d'accéder à l'instruction suivante
Voici un premier exemple d'instruction : MOV R0 , #8. Cette instruction affecte la valeur 8 au registre R0.
Il faut repérer qu'une instruction possède deux parties : l'opération ou l'instruction et
la partie opérandes. Dans notre exemple la partie opération est MOV
,
et la partie opérandes est R0 , #8
.
Comment cette instruction est-elle exécutée ?
phase de recherche : l'instruction est initialement stockée à une adresse donnée de la mémoire ;
cette adresse est contenue dans CO.
On place le contenu de l'instruction dans RI.
phase d'exécution : l'instruction est exécutée : la valeur 8 est affectée au registre R0.
Pour simplifier, ici nous n'avons pas présenté l'augmentation de CO puisque seule une instruction était à effectuer.
Si vous désirez aller plus loin, vous pouvez consulter ce vieux mais détaillé site.
De nos jours, les ordinateurs sont multicoeurs, c'est-à-dire
possèdent plusieurs processeurs qui travaillent en parallèles.
Voici un schéma de la structure multiprocesseurs d'un ordianteur puissant datant de 2022 :
Le langage machine est une succession de bits qui est interprétable par le processeur d'un ordinateur.
Comme ces successions de bits sont très peu gérables par un humain, un langage de programmation de bas niveau est nécessaire :
Un langage assembleur est le langage machine machine ou des combinaisons de bits sont représentées par des "symboles" qu'un être humain peut mémoriser.
Un programme assembleur convertit ces "symboles" en la combinaison de bits correspondante pour que le proscesseur puisse traiter l'information.
Un langage assembleur est souvent spécifique un type de processeur.
On considère ici un processeur de type x86.
On veut faire comprendre à un processeur de ce type l'instruction suivante : écrire le nombre 97 dans le registre AL.
Voici comment écrire cette instruction en langage assembleur : movb $0x61,%al
.
Pour comprendre :
la partie movb %al
signifie écrire dans le registre AL,
la partie $0x61
correspond au nombre 91 écrit en hexadécimal car
$(97)_{10}=(61)_{16}$.
Voici comment un programme assembleur va convertir en binaire : 10110000 01100001
.
Pour comprendre :
la partie movb %al
est codée en 10110000
,
le nombre 97, donc le code hexadécimal $0x61
, s'écrit en binaire
01100001
car $97=64+32+1$.
En langage assembleur, on peut rencontrer :
des calculs simples (addition, soustraction, multiplication, ...),
des affectations (placer telle valeur de la mémoire vive dans tel registre et vice versa)
des instructions de saut qui permettent de coder des instructions conditionnelles par exemple.
De plus, il y a trois possibilités pour accéder à un opérande (valeur sur laquelle va être opérée une opération) :
Dans les années 40 et 50, les programmes étaient surtout écrits en langage assembleur. Cependant, c'était long, fastidieux et les erreurs étaient fréquentes.
Ensuite, des langages de plus haut niveau ont permis des codes plus simples à écrire et à comprendre par des humains tandis que les progrès des puissances des ordinateurs permettait de compiler ces langages de haut niveau en langage machine en assez peu de temps.
Des programmes tel que le système d'exploitation DOS (le plus utilisé sur PC jusque vers 1990) ou les jeux vidéos pour console comme Super Nintendo ou Mega Drive ont été écrits en langage assembleur.
De nos jours, le langage assembleur peut être encore utilisé dans certaines objet à informatique embarqué ayant une faible mémoire.
Source : "INTERROS des LYCEES-Les VRAIS EXOS donnés dans les lycées"-"numérique et sciences informatiques"-Stéphane PASQUET-Nathan
On imagine un ordinateur constitué d'une mémoire centrale et d'un jeu d'instructions.
Mémoire : tableau de 32 cellules. Chaque cellule constitué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 ← #X) |
STO X | Enregistre dans la cellule X (#X ← ACC) |
ADD X | Ajoute le contenu de la cellule X (ACC ← ACC + #X) |
SUB X | Soustrait le contenu de la cellule X (ACC ← ACC - #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 | 25 |
1 | 14 |
..... | ...... |
8 | LD 0 |
9 | SUB 1 |
10 | STO 2 |
11 | END |
Que fait ce programme ?
Écrire un programme qui traduit l'expression z = x+x+y
.
On suppose que les variables x
et y
sont liées aux adresses 0 et 1.
Écrire un programme qui écrit le minimum de deux nombres différents.
considérer le signe de la différence de deux nombres
Le programme fonctionne-t-il encore si les deux nombres sont égaux ?
Il existe autant de langages machines que de types de processeurs. Les commandes de base sont assez faciles à transposer d'un langage à l'autre.
Par exemple, l'instruction qui permet de copier le contenu d'un registre dans une mémoire donnée par son
adresse peut
s'appeler suivant les processeurs STO
, STR
ou STA
.
Afin de pouvoir mieux visualiser le fonctionnement d'un processeur et de pouvoir tester ses lignes de code en langage assembleur, nous allons désormais utiliser le simulateur accessible avec ce lien.
Voici un visuel de ce simulateur :
Voici une présentation en vidéo de ce simulateur.
Voici un schéma détaillant les différents éléments de l'architecture de Von Neumann :
Voici une image d'un simulateur de processeur :
Repérer dans le simulateur, les différents éléments spécifiques de l'architecture de Von Neumann.
Repérer dans le simulateur les éléments suivants :
Les registres :
PC
CIR
MAR
Les entrées.
Les sorties.
L'Unité Arithmétique et Logique.
L'unité de contôle.
La mémoire.
Correction : L'exercice précédent est corrigé dans la vidéo ci-dessous vidéo :
Voici un nouvel exercice de programmation en asssembleur. Cependant, le jeu d'instructions n'est pas le même que celui de l'exercice 1 car ce jeu correspond désormais à celui du simulateur précédemment présenté ; dans toute la suite du chapitre, c'est ce jeu d'instructions qui sera utilisé.
Voici le tableau d'instructions de ce simulateur :
Instruction | Effet |
---|---|
INP | Lire une valeur à partir de la console d'entrée |
OUT | Ecrire une valeur sur la console d'affichage |
ADD | Addition |
SUB | Soustraction |
MOV | Affectation |
LDR | Affectation |
STR | Affectation |
B | Aller à |
HALT | Fin du programme |
CMP | Comparaison |
BEQ | Comparaison (égalité) puis saut à une adresse |
BNE | Comparaison (inégalité) puis saut à une adresse |
BGT | Comparaison (supérieur) puis saut à une adresse |
BLT | Comparaison (inférieur) puis saut à une adresse |
#
pour le différencier d'une adresse mémoire Le nombre 25 est précédé d'un #
pour le différencier d'une adresse mémoire.
Pour les instructions de saut, on donne un label, ici test, à la place d'une adresse.
Vous pouvez obtenir un détail sur le jeu d'instructions de ce simulateur à cette endroit de la page .
Observer le programme écrit en langage machine :
Indiquer la signification de cette suite d’instructions.
Quel est le contenu de R0,R1,R2 à la fin de ces instructions ?
Que signifie la commande OUT R2,4
Voici une image plus complète du programme dans le simulateur :
Correction : L'exercice précédent est corrigé dans la vidéo ci-dessous vidéo :
Écrire en langage assembleur du simulateur le programme suivant :
x = 15
y = 12
z = x - y
print(z)
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.
Penser à faire des copies d'écran et/ou des vidéos de vos programmes. Penser à alimenter votre cahier de bord.
Écrire en langage assembleur du simulateur le programme suivant :
a = 3
b = 4
c = a + b
print(c)
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.
Tester le programme nommé max
contenu dans la rubrique SELECT
du simulateur.
Correction : L'exercice précédent est corrigé dans la vidéo ci-dessous vidéo :
Voici un script en langage asssembleur :
INP R0,2
INP R1,2
CMP R1,R0
BGT VRAI
OUT R0,4
B DONE
VRAI:
OUT R1,4
DONE:
HALT
Essayer de deviner ce que fait ce programme sans lancer le simulateur
Vous pouvez vous aider du détail sur le jeu d'instructions du simulateur présent à cet endroit de la page .
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse avec comme saisie 4 puis 8
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse avec comme saisie 7 puis 2
Que fait ce programme écrit en langage assembleur ?
Dans le langage assembleur, les instructions conditionnelles (si ... alors ... sinon) sont gérées par des sauts vers une partie suivante du programme, saut dans le cas où la valeur stockée dans le registre d'accumulation vérifie une condition.
Bien remarquer que contrairement au langage python où lorsque la condition n'est pas remplie il y a un "saut" vers une partie inférieure
du programme, alors qu'en assembleur il y a un "saut" lorsque la condition est remplie :
Écrire en langage assembleur du simulateur le programme suivant :
x = 15
y = 12
if x > y :
z = x+y
else :
z = x-y
print(z)
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.
Écrire en langage assembleur du simulateur le programme suivant :
a = int(input())
b = int(input())
c = a + b
print(c)
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.
Écrire en langage assembleur du simulateur le programme suivant :
x = int(input())
if x > 0 :
print(x)
else :
y = -x
print(y)
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.
Voici un script en langage asssembleur :
MOV R0,#0
REP:
CMP R0,#4
BLT VRAI
B DONE
VRAI:
ADD R0,R0,#1
B REP
DONE:
OUT R0,4
HALT
Essayer de deviner ce que fait ce programme sans lancer le simulateur
Vous pouvez vous aider du détail sur le jeu d'instructions du simulateur présent à cet endroit de la page .
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.
Deviner ce que fait le script si on remplace la première ligne par MOV R0,#5
.
Tester le programme modifié en langage assembleur en utilisant le simulateur accessible à cette adresse avec comme saisie 7 puis 2
Modifier le programme initial écrit en langage assembleur afin d'obtenir comme affichage les entiers successifs compris entre 1 et 10.
Dans le langage assembleur, les instructions répétitives (tant que et pour) sont gérées par des sauts vers une partie précédente du programme,
saut dans le cas où la valeur stockée dans le registre d'accumulation vérifie une condition et par un saut final vers la suite du programme
pour finir la répétition.
Écrire en langage assembleur du simulateur le programme suivant :
x = 1
while x < 6:
x = x + 2
print(x)
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.
Modifier le script obtenu afin d'obtenir comme affichage les nombres pairs compris entre 10 et 20
Comme une boucle répétitve POUR est une écriture d'une boucle TANT QUE, il est possible d'écrire ce type de boulce répétitive en assembleur.
En assembleur, il est aussi possible de gérer des tableaux (en précisant la taille fixe du tableau puis les données contenues),
tout comme gérer des fonctions (en utilisant la pile système et deux instructions PUSH
et POP
.)
Au niveau du processeur, le jeux d'instructions simples est géré par un ensemble
de circuits de transitors créant une combinaison de portes logiques.
Pour plus de détails, veuillez poursuivre au niveau
de la partie 4 de cette page.
Voici la liste des instructions de ce simulateur, instructions traduites en français :
< opérande 2 > peut être #nnn (c'est à dire un nombre, exemple #42) ou bien Rm (c'est à dire le registre m , par exemple R1 est le registre numéro 1).
Les registres vont de R0 à R12.
Compléments pour les instructions DAT, INP et OUT :
la pseudo-instruction DAT vous permet de mettre un nombre dans la mémoire en utilisant l'assembleur. Un label peut aussi être pris comme donnée.
INP Rd,2 lit un nombre dans le registre d.
OUT Rd,4 retourne en sortie le nombre du registre d.
Pour OUT, vous pouvez retourner des nombres signés (paramètre 4), des nombres non signés (paramètre 5), des hexadécimaux (paramètre 6) ou des caractères (paramètre 7). Vous pouvez entrer des hexadécimaux comme 0xnnn partout où un nombre est attendu.
La liste d'instructions en anglais :
The AQA Instruction Set.
Saisir dans l'assembleur le code suivant après avoir réglé la mémoire en mode unsigned au niveau du menu déroulant OPTIONS afin de travailler en base 10 :
INP R0, 2
STR R0, x
LDR R0, x
MOV R1, #2
ADD R0, R0, R1
STR R0,x
HALT
0
0
0
x: 456
Quelle case mémoire du processeur est adressé par x ?
Comment peut-on le voir au niveau du code une fois celui-ci "soumis" ?
Quelle case mémoire du processeur contient l'instruction selon laquelle le nombre 2 est copié dans le registre R1 ?
Sous quelle forme est stockée cette instruction ?
Éxécuter sur l'assembleur le code.
Comment évolue le contenu de la case adressée par x au cours de l'exécution ?
Que fait le programme écrit en assembleur ?
Un langage compilé est un langage de programmation qui lors de son exécution utilise un compilateur, c'est-à-dire un programme qui traduit le code source écrit dans ce langage de programmation en langage assembleur ou en langage machine afin de créer un programme directement exécutable sur la machine.
Ensuite, c'est ce fichier intermédiaire créé qui est exécuté sur la machine.
Par contre, un langage interprété est un langage de programmation qui lors de l'exécution fait appel à un interpréteur qui va exécuter le programme instruction par instruction ainsi :
lire et analyser l'instruction,
si l'instruction est syntaxiquement correcte dans la langage de programmation, l'exécuter,
passer à l'instruction suivante.
Ici, pas de fichier intermédiaire.
Le langage Python est un langage interpétré un peu hybride, c'est-à-dire que le code en Python est déjà compilé en un bytecode, un code intermédiaire qui n'est pas directement exécutable par un processeur mais qui est ensuite interprété par un interpréteur.
Pour comprendre comment un programme (simple) écrit dans le langage de haut-niveau Python va être traduit
en langage machine, il est intéressant d'utiliser le module dis
qui permet d'examiner le
bytecode
intermédiaire.
Voici le code en Python que l'on va étudier :
x = 4
x = x + 5
Pour étudier ce code, il suffit d'excuter le code suivant
import dis # importation du module permettant l'étude
dis.dis('x = 4; x = x + 5; print(x)')
Voici ce qui est affiché ; c'est le bytecode désassemblé :
1 0 LOAD_CONST 0 (4)
2 STORE_NAME 0 (x)
4 LOAD_NAME 0 (x)
6 LOAD_CONST 1 (5)
8 BINARY_ADD
10 STORE_NAME 0 (x)
12 LOAD_CONST 2 (None)
14 RETURN_VALUE
Les lignes affichées ont respectivement la signification suivante :
0 :Le nombre 4 est stocké dans un registre,
2 : le contenu de ce registre est copié dans la mémoire au niveau de la case dont l'adresse est x,
4 : la valeur de x est copiée dans un registre,
6 : le nombre 5 est copié dans un autre registre,
8 : l'addition des deux nombres (ceux en haut de la "pile" c'est-à-dire repéés par les nombres 0 et 1 de la troisème colonne),
10 : le résultat de l'addition est copié dans la mémoire au niveau de la mémoire dont l'adresse est x,
12 : la valeur None est copiée dans un troisième registre,
14 : cette valeur None est renvoyée.
Ce code est proche de ce que l'on pourrait écrire dans le langage assembleur du simulateur :
MOV R0, #4
STR R0, x
LDR R0, x
MOV R1, #5
ADD R0, R0, R1
STR R0,x
HALT
0
0
0
x: 0
Saisir dans l'assembleur le code précédent après avoir réglé la mémoire en mode unsigned au niveau de du menu déroulant OPTIONS afin de travailler en base 10.
Régler la mémoire en mode binary au niveau de du menu déroulant OPTIONS afin de voir comment s'écrirait en langage machine le code initial en Python, sur le type de processeur simulé par le simulateur.
Dans la langage assembleur, supprimer la troisième ligne. Le programme focntionne-t-il encore ?
Rajouter une ligne dans l'assembleur afin que le résultat de l'addition soit renvoyé en sortie.
Un processeur est construit de circuits électroniques possédant des transistors jouant le rôle d'interrupteurs.
Le premier transistor a été créé fin 1947 et est à la base de la minuaturation constante des ordinateurs.
Un transistor peut être vu comme un composant électrique à trois fils (électrodes) (le drain, la source et la grille). Suivant la tension appliquée entre la grille et la source, le transistor se comporte un interrupteur isolant ou un conduisant le courant entre la source et la grille :
Si la tension est nulle ou faible, aucun courant ne sort du drain : le transistor joue le rôle d'isolant.
Si la tension est suffisante, un courant sort du drain : le transistor joue le rôle de conducteur.
Voici une animation schématisant avec des fluides ce fonctionnement (Le mot
anglais Gate correspond au mot Grille en français) :
Dans l'électronique numérique, des transistors à effet de champ sont utilisés. Leur fonctionnement repose sur
la capacité de matériaux semi-conducteur (comme le silicium ou le germanium) à être isolant
mais aussi à laisser passer des électrons si une certaine tension est appliquée. On contrôle cette
capacité en ajoutant des "impuretés" (on parle de dopage) à ces matériaux de sorte de créer un excédent d'électrons dans le matériau (type n )
ou un déficit (type p).
En mettant en contact des semi-conducteurs dopés différemment, on peut céer deux types de transistors :
Désormais, les transitors sont produits utilisant des procédés photolithographiques.
En 2024, le leader mondial, l'entreprise Taïwanaise TSMC, est capable de produire des transistors de 3 nanomètres
avec une densité de plus 215 millions de transistors par millimètres carrés.
Dans le cours sur les booléns, on a vu que les opérations
au niveau des processeurs se font avec des portes logique ET, OU, XOR, ...
Toutes ces portes logiques sont construites au niveau des processeurs par la combinaison
de transistors.
Si vous désirez comprendre comment il est possible de traduire les calculs logiques et binaires avec des circuits électroniques physiques, vous pouvez lire les pages 167 à 170 du livre en pdf cours se trouvant à cettte adresse ainsi téléchargeable à cette adresse sur le site de l'INRIA.
Les transistors servent aussi à créer des mémoires (cf. lien vers un Wikilivre) :
Source : "INTERROS des LYCEES-Les VRAIS EXOS donnés dans les lycées"-"numérique et sciences informatiques"-Stéphane PASQUET-Nathan
On imagine un ordinateur constitué d'une mémoire centrale et d'un jeu d'instructions.
Voici le tableau d'instructions :
Instruction | Effet |
---|---|
LD X | Lit le contenu de la cellule X (ACC ← #X) |
STO X | Enregistre dans la cellule X (#X ← ACC) |
ADD X | Ajoute le contenu de la cellule X (ACC ← ACC + #X) |
SUB X | Soustrait le contenu de la cellule X (ACC ← ACC - #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 |
END | Arrêt du programme |
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 ?
Écrire un programme qui traduit l'expression z = x+y
Écrire un programme qui écrit le max de deux nombres
Pour accéder à une correction : sous forme d'une image
Écrire en langage assembleur du simulateur le programme suivant :
x = 24
y = 15
z = 2y
z = z - x
print(z)
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.
Correction de l'exercice : pdf téléchargeable ici.
Écrire en langage assembleur du simulateur le programme suivant :
a = int(input())
b = int(input())
c = a - 2*b
print(c)
Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.
Correction de l'exercice : pdf téléchargeable ici.
Propriétaire des ressources ci-dessous : ministère de l'Éducation nationale et de la jeunesse, licence CC BY SA NC
Voici une sélection de questions issues de la banque nationale de sujets, répondez à ces questions (attention, cette sélection n'est pas exhaustive).
Parmi ces composants électroniques, lequel est d'échelle microscopique dans un ordinateur ?
Réponses :
A- le bus
B- le radiateur
C- le transistor
D- le disque dur
Lequel de ces périphériques n'est pas un périphérique d'entrée ?
Réponses :
A- le moniteur
B- le clavier
C- la souris
D- le scanner
À quoi sert la RAM dans le fonctionnement d'un ordinateur ?
Réponses :
A- à stocker des données lors de l'exécution de programmes
B- à stocker des fichiers
C- à relier les périphériques
D- à accélérer la connexion à Internet
Dans une mémoire RAM, que peut-on faire ?
Réponses :
A- uniquement lire des données
B- uniquement écrire des données
C- lire et écrire des données
D- lire des données même en cas de coupure de courant
Lequel de ces objets n'est pas un périphérique ?
Réponses :
A- le clavier
B- une clé USB
C- la carte graphique
D- la carte mère
Sur un ordinateur, où est stocké de manière permanente le système d'exploitation ?
Réponses :
A- dans la mémoire RAM
B- sur le bus de données
C- sur le disque dur ou le disque SSD
D- dans le Cloud
Quelles sont les quatre parties distinctes de l’architecture de Von Neumann ?
Réponses :
A- L’unité logique, l’unité de contrôle, la mémoire et les dispositifs d’entrée-sortie
B- L’écran, le clavier, le disque dur et le micro-processeur
C- Le disque dur, le micro-processeur, la carte-mère et la carte graphique
D- La mémoire des programmes, la mémoire des données, les entrées-sorties et l’unité logique
Laquelle des mémoires suivantes est volatile ?
Réponses :
A- RAM
B- disque dur
C- ROM
D- clef USB
Dans un ordinateur, que permet de faire la mémoire vive ?
Réponses :
A- Stocker les données de façon permanente
B- Afficher les informations sur l’écran
C- Réaliser les calculs
D- Stocker les données de façon temporaire
Quel composant électronique, inventé vers le milieu du 20e siècle, a permis le développement des ordinateurs actuels ?
Réponses :
A- le condensateur
B- la résistance
C- le transistor
D- la diode
Identifier parmi les éléments suivants celui qui est uniquement un périphérique de sortie.
Réponses :
A- clavier
B- souris
C- écran
D- microphone
Dans l’architecture générale de Von Neumann, la partie qui a pour rôle d’effectuer les opérations de base est :
Réponses :
A- l'unité de contrôle
B- la mémoire
C- l'unité arithmétique et logique
D- les dispositifs d'entrée-sortie
Quelle est la seule affirmation exacte ?
Réponses :
A- la mémoire RAM ne fonctionne qu'en mode lecture
B- la mémoire RAM permet de stocker des données et des programmes
C- une mémoire morte ne peut pas être utilisée
D- la mémoire RAM permet de stocker définitivement des données
Quel est le principal rôle d’une carte mère dans un ordinateur ?
Réponses :
A- stocker les informations en mémoire vive
B- exécuter les instructions en langage machine
C- reproduire le processeur en plusieurs exemplaires
D- connecter les différents composants de l'ordinateur
Manuel "INTERROS des LYCEES-Les VRAIS EXOS 1re donnés dans les lycées"-"numérique et sciences informatiques"-Stéphane PASQUET-Nathan
Lien vers un excellent site (pixees, David Roche) : https://pixees.fr/informatiquelycee/n_site/nsi_prem_von_neu.html
De nouveau, un lien vers pixees (Davis Roche) : https://pixees.fr/informatiquelycee/n_site/nsi_prem_sim_cpu.html
Vers le site du YETI qui traite des commandes du simulateur : http://lesmathsduyeti.fr/lycee/nsi-1iere/language-assembleur/
Les différents
auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative
Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0
International