Le langage machine
Rappel d'ouverture (5 minutes, cours fermé)
- Dans le modèle de von Neumann, où est rangé le programme ?
- Que désigne le compteur ordinal ?
- Pourquoi un programme d'ordinateur ne marche-t-il pas sur un téléphone ?
Corrigé
- Dans la mémoire, avec les données.
- Le numéro de la case où se trouve la prochaine instruction.
- Les deux machines n'ont pas la même table d'instructions.
1. La machine et ses instructions
On va parler dans le langage d'une machine : le Little Man Computer (LMC).
- Elle a 100 cases mémoire, numérotées de 0 à 99. Chaque case contient un nombre.
- Elle a une seule case de calcul : l'accumulateur. Tous les calculs se font dedans.
Et voici tout ce qu'elle sait faire. Rien d'autre.
| Instruction | Exemple | Ce que fait la machine |
|---|---|---|
LDA (load) |
LDA 15 |
Elle prend ce qu'il y a dans la case n°15 et le met dans l'accumulateur. La case n°15 ne change pas. |
STA (store) |
STA 15 |
Elle met ce qu'il y a dans l'accumulateur dans la case n°15. L'accumulateur ne change pas. |
ADD |
ADD 15 |
Elle ajoute à l'accumulateur ce qu'il y a dans la case n°15. |
SUB |
SUB 15 |
Elle enlève de l'accumulateur ce qu'il y a dans la case n°15. |
INP (input) |
INP |
Elle demande un nombre et le met dans l'accumulateur. |
OUT (output) |
OUT |
Elle affiche ce qu'il y a dans l'accumulateur. |
HLT (halt) |
HLT |
Elle s'arrête. |
BRA (branch) |
BRA 4 |
Elle va à la case n°4, au lieu de passer à la suivante. |
BRZ (branch if zero) |
BRZ 4 |
Si l'accumulateur vaut 0, elle va à la case n°4. Sinon, elle passe à la suivante. |
BRP (branch if positive) |
BRP 4 |
Si l'accumulateur vaut 0 ou plus, elle va à la case n°4. Sinon, elle passe à la suivante. |
Cette table ne s'apprend pas par cœur : tu l'as sous les yeux pour tous les exercices. C'est une convention, comme la table que ton groupe a inventée : une autre machine en a une autre.
La même table, dite comme dans les livres
C'est exactement la même chose, dite de façon plus courte et plus précise. Deux mots à connaître :
<adr>n'est pas à recopier : les chevrons< >veulent dire « mets un numéro de case ici ».LDA <adr>s'écrit par exempleLDA 15;PCest le compteur ordinal, le numéro de la case où se trouve la prochaine instruction.
De gauche à droite, le langage devient de plus en plus formel : la première table en français de tous les jours, puis la description usuelle, puis la notation, où ← se lit « reçoit ».
| Instruction | Description usuelle | Notation |
|---|---|---|
LDA <adr> |
charge dans l'accumulateur le contenu de l'adresse <adr> |
ACC ← mémoire[<adr>] |
STA <adr> |
range le contenu de l'accumulateur à l'adresse <adr> |
mémoire[<adr>] ← ACC |
ADD <adr> |
ajoute à l'accumulateur le contenu de l'adresse <adr> |
ACC ← ACC + mémoire[<adr>] |
SUB <adr> |
soustrait de l'accumulateur le contenu de l'adresse <adr> |
ACC ← ACC − mémoire[<adr>] |
INP |
lit une entrée et la place dans l'accumulateur | ACC ← entrée |
OUT |
envoie l'accumulateur sur la sortie | sortie ← ACC |
HLT |
arrête le processeur | arrêt |
BRA <adr> |
branchement inconditionnel à l'adresse <adr> |
PC ← <adr> |
BRZ <adr> |
branchement à l'adresse <adr> si l'accumulateur est nul |
si ACC = 0 : PC ← <adr> |
BRP <adr> |
branchement à l'adresse <adr> si l'accumulateur est positif ou nul |
si ACC ≥ 0 : PC ← <adr> |
À l'évaluation, tu auras cette deuxième table, et seulement elle
Pas besoin de l'apprendre par cœur, elle te sera donnée. Mais il faut savoir la lire : entraîne-toi avec elle, au plus tard pour les défis.
2. Prédire, sur ton cahier
Pas de simulateur dans cette partie : papier et crayon.
2.1 LDA
Exercice 1
Au départ, la mémoire contient :
| Case n° | 10 | 11 | 12 | 13 |
|---|---|---|---|---|
| Contenu | 7 | 3 | 0 | 25 |
Sur ton cahier, écris :
- ce que contient l'accumulateur après
LDA 11; - ce que contient l'accumulateur après
LDA 13; - pour le programme ci-dessous, l'accumulateur après la ligne 1, puis après la ligne 2, et ce que contient la case n°10 à la fin.
| Ligne | Instruction |
|---|---|
| 1 | LDA 10 |
| 2 | LDA 11 |
2.2 STA
Exercice 2
Même mémoire au départ : case n°10 → 7, case n°11 → 3, case n°12 → 0, case n°13 → 25.
Programme A. Recopie et remplis.
| Ligne | Instruction | Accumulateur | Case n°10 | Case n°12 |
|---|---|---|---|---|
| 1 | LDA 10 |
|||
| 2 | STA 12 |
Programme B. Écris le contenu des cases 10 à 13 à la fin.
| Ligne | Instruction |
|---|---|
| 1 | LDA 13 |
| 2 | STA 10 |
| 3 | STA 11 |
Exercice 3 : échanger deux cases
Même mémoire au départ. Ce programme veut échanger les cases n°10 et n°11, pour avoir 3 dans la case n°10 et 7 dans la case n°11.
| Ligne | Instruction |
|---|---|
| 1 | LDA 10 |
| 2 | STA 11 |
| 3 | LDA 11 |
| 4 | STA 10 |
Sur ton cahier : que contiennent les cases n°10 et n°11 à la fin ? Le programme a-t-il réussi ?
2.3 ADD et SUB
Exercice 4
Même mémoire au départ : case n°10 → 7, case n°11 → 3, case n°12 → 0, case n°13 → 25.
Programme A. Recopie et remplis.
| Ligne | Instruction | Accumulateur | Case n°12 |
|---|---|---|---|
| 1 | LDA 10 |
||
| 2 | ADD 11 |
||
| 3 | STA 12 |
||
| 4 | SUB 10 |
Programme B. Que contient l'accumulateur à la fin ?
| Ligne | Instruction |
|---|---|
| 1 | LDA 13 |
| 2 | SUB 10 |
| 3 | SUB 10 |
| 4 | SUB 10 |
2.4 Un programme entier
Le programme aussi est rangé dans la mémoire : sa première instruction dans la case n°0, la suivante dans la case n°1, et ainsi de suite. La machine les fait l'une après l'autre, jusqu'à HLT.
Exercice 5
Toutes les cases de données valent 0 au départ.
Programme A. On tape 4, puis 9. Qu'est-ce qui s'affiche ? Que contient la case n°10 à la fin ?
| Case n° | Instruction |
|---|---|
| 0 | INP |
| 1 | STA 10 |
| 2 | INP |
| 3 | ADD 10 |
| 4 | OUT |
| 5 | HLT |
Programme B. On tape 6. Qu'est-ce qui s'affiche ? Que contient la case n°11 à la fin ?
| Case n° | Instruction |
|---|---|
| 0 | INP |
| 1 | STA 10 |
| 2 | ADD 10 |
| 3 | STA 11 |
| 4 | LDA 10 |
| 5 | OUT |
| 6 | HLT |
3. Donner un nom aux cases
Compter les numéros de cases, c'est pénible, et on se trompe. Alors on donne un nom à une case.
a: DATveut dire : cette case s'appellea, et elle contient 0 au départ.b: DAT 5veut dire : cette case s'appelleb, et elle contient 5 au départ.DATn'est pas une instruction. On le met après leHLT, pour que la machine ne passe jamais dessus.
C'est le programme A de l'exercice 5, en plus lisible.
Exercice 6
Chaque ligne occupe une case, à partir de la case n°0.
| Ligne | Instruction |
|---|---|
| 1 | LDA a |
| 2 | ADD b |
| 3 | STA c |
| 4 | SUB a |
| 5 | OUT |
| 6 | HLT |
| 7 | a: DAT 4 |
| 8 | b: DAT 7 |
| 9 | c: DAT 0 |
Sur ton cahier, écris :
- le numéro de la case qui s'appelle
c; - le nombre affiché ;
- ce que contient
cà la fin.
Correction
cest la case n°8 : la ligne 1 est dans la case n°0, donc la ligne 9 dans la case n°8. Le nom, c'est juste un numéro que la machine calcule pour toi.- Affiche 7.
ccontient 11. Ce n'est pas ce qui est affiché :OUTaffiche l'accumulateur.
4. Le simulateur
Maintenant, et seulement maintenant, la machine.
Installation
- Dans VSCode, ouvre les extensions (barre de gauche), cherche
mmarchand.lmc-vscode, clique Installer. - Crée un fichier qui finit par
.lmc, par exempleessai.lmc. - Pour ouvrir le simulateur, clique sur la flèche ▶ en haut du fichier.
| Bouton | Ce qu'il fait |
|---|---|
| Assembler .lmc | traduit ton fichier en nombres |
| Charger .lmcobj en RAM | met ces nombres dans la mémoire |
| Step | fait une instruction |
| Run | fait tout, jusqu'au HLT |
Tu as modifié ton programme ? Assemble à nouveau
Sinon, « Charger » remet l'ancienne version en mémoire.
Exercice 7
Tape le programme de l'exercice 6, et vérifie tes réponses en mode Step, une instruction à la fois.
5. Sauter
Jusqu'ici, la machine fait les cases dans l'ordre. BRA, BRZ et BRP la font sauter à une autre case. Avec un nom de case, c'est plus simple : BRA fin veut dire « va à la case qui s'appelle fin ».
Dans toute cette partie : écris ta réponse avant d'ouvrir le simulateur.
5.1 BRA
Exercice 8
Programme A. On tape 5. Qu'est-ce qui s'affiche ?
| Ligne | Instruction |
|---|---|
| 1 | INP |
| 2 | BRA fin |
| 3 | OUT |
| 4 | fin: HLT |
Programme B. Combien de nombres ce programme va-t-il demander ?
| Ligne | Instruction |
|---|---|
| 1 | debut: INP |
| 2 | OUT |
| 3 | BRA debut |
N'ouvre pas le simulateur tant que tu n'as pas écrit tes réponses.
Correction
A. Rien. La ligne 2 saute par-dessus le OUT.
B. Sans fin. Après la ligne 3, la machine revient à la ligne 1, toujours. Rien ne l'arrête.
5.2 BRZ
Exercice 9
| Ligne | Instruction |
|---|---|
| 1 | INP |
| 2 | BRZ zero |
| 3 | LDA cent |
| 4 | OUT |
| 5 | HLT |
| 6 | zero: LDA mille |
| 7 | OUT |
| 8 | HLT |
| 9 | cent: DAT 100 |
| 10 | mille: DAT 1000 |
Sur ton cahier, écris ce qui s'affiche :
- quand on tape 5 ;
- quand on tape 0 ;
- quand on tape 5, si on a effacé la ligne 5.
N'ouvre pas le simulateur tant que tu n'as pas écrit tes réponses.
Correction
- Avec 5 : 100.
- Avec 0 : 1000.
- Sans la ligne 5, avec 5 : 100 puis 1000. Rien n'arrête la machine après le premier
OUT, alors elle continue sur la ligne suivante. Chaque chemin a besoin de sonHLT.
5.3 BRP
Exercice 10
| Ligne | Instruction |
|---|---|
| 1 | INP |
| 2 | SUB dix |
| 3 | BRP grand |
| 4 | LDA zero |
| 5 | OUT |
| 6 | HLT |
| 7 | grand: LDA un |
| 8 | OUT |
| 9 | HLT |
| 10 | dix: DAT 10 |
| 11 | zero: DAT 0 |
| 12 | un: DAT 1 |
Sur ton cahier, écris :
- ce qui s'affiche quand on tape 15, puis 10, puis 3 ;
- en une phrase, ce que fait ce programme.
N'ouvre pas le simulateur tant que tu n'as pas écrit tes réponses.
Correction
- 15 donne 1, 10 donne 1, 3 donne 0.
- Il affiche 1 si le nombre vaut 10 ou plus, et 0 sinon. La machine ne sait pas comparer : on enlève 10, et on regarde si le résultat est positif.
5.4 Revenir en arrière : la boucle
Exercice 11
| Ligne | Instruction |
|---|---|
| 1 | INP |
| 2 | STA cpt |
| 3 | boucle: LDA cpt |
| 4 | BRZ fin |
| 5 | OUT |
| 6 | SUB un |
| 7 | STA cpt |
| 8 | BRA boucle |
| 9 | fin: HLT |
| 10 | cpt: DAT |
| 11 | un: DAT 1 |
On tape 3. Sur ton cahier, écris :
- les nombres affichés, dans l'ordre ;
- combien de fois la ligne 5 est faite ;
- ce que contient
cptà la fin.
Puis : qu'est-ce qui se passe si on tape 0 ? Et si on efface la ligne 4 ?
N'ouvre pas le simulateur tant que tu n'as pas écrit tes réponses.
Correction
- Affiche 3, 2, 1.
- La ligne 5 est écrite une fois et faite trois fois.
cptcontient 0 : c'est ce 0 qui fait sauter la ligne 4 versfin.
Avec 0 : rien ne s'affiche, et la machine s'arrête tout de suite. Le test est en tête, donc il est fait avant le premier OUT.
Sans la ligne 4 : la machine affiche 3, 2, 1, 0, puis −1, −2, −3… et ne s'arrête jamais. Plus rien ne la fait sortir, et cpt ne repasse plus par 0.
Le squelette d'une boucle, toujours le même
Toutes les boucles de cette page suivent ces trois temps, dans cet ordre. Reprends-le tel quel, même quand tu vois plus court.
- On vérifie la condition de sortie, tout en haut.
- On fait le corps de la boucle.
- On boucle, avec
BRA.
Quand la sortie ne se joue pas sur un 0 mais sur une comparaison, il n'existe pas de « saute si c'est négatif ». On saute alors vers le corps si on continue, et la ligne juste en dessous part vers fin.
Deux sortes de sauts
- Sauter en avant, par-dessus des lignes : la machine choisit un chemin. En Python, ce sera
if. - Sauter en arrière : la machine refait les mêmes lignes. En Python, ce sera
while.
6. Écrire des programmes
Dans l'ordre. Chaque défi ajoute une seule difficulté.
Pour chacun : écris ton programme sur ton cahier, puis tape-le et teste-le dans le simulateur.
C'est le simulateur qui te dit si ça marche, pas la correction. Si ça ne marche pas, reprends ton programme ligne par ligne avec la deuxième table, celle que tu auras à l'évaluation. Chaque instruction fait ce qui est écrit dans la table, et rien d'autre.
La correction s'ouvre en dernier
Avant de l'ouvrir, écris sur ton cahier, en une phrase, ce que ton programme fait et qui n'est pas ce que tu voulais.
Et si ton programme marche mais ne ressemble pas à la correction, il est juste quand même : il y a plusieurs façons d'écrire chacun de ces défis.
Sans saut
Défi 2
Demander un nombre et l'afficher deux fois.
Défi 3
Demander deux nombres, et afficher le second, puis le premier.
Indice
Le deuxième INP écrase le premier nombre. Range-le avant.
Défi 4
Demander deux nombres et afficher leur somme.
Défi 5
Demander deux nombres et afficher le premier moins le second.
Indice
Au moment du SUB, c'est le premier nombre qui doit être dans l'accumulateur.
Correction
Le résultat peut être négatif : avec 4 puis 9, la machine affiche −5. Mais la case, elle, contient 9995, c'est-à-dire 10000 − 5. Le signe n'est écrit nulle part : la machine a simplement décidé que tout mot à partir de 5000 se lit comme un négatif. Tu retrouveras exactement cette idée en binaire, au chapitre Représentation de l'information.
Défi 6
Demander un nombre et afficher son triple. La machine ne sait pas multiplier.
Indice
Le triple de 7, c'est 7 + 7 + 7.
Avec un saut
Défi 7
Demander un nombre. Afficher 1 s'il vaut 0 ou plus, 0 s'il est négatif.
Indice
Regarde l'exercice 10. Les nombres 0 et 1 doivent exister dans des cases : zero: DAT 0 et un: DAT 1.
Défi 8
Demander deux nombres. Afficher 1 s'ils sont égaux, 0 sinon.
Indice
Deux nombres sont égaux quand l'un moins l'autre vaut 0.
Défi 9
Demander deux nombres et afficher le plus grand.
Indice léger
Calcule le second moins le premier, et regarde le signe avec BRP.
Indice précis
Range les deux nombres dans a et b. Si b − a vaut 0 ou plus, on saute vers un morceau qui affiche b. Sinon, on affiche a. Chaque morceau finit par son HLT.
Correction
Défi 10
Demander trois nombres et afficher le plus grand.
Indice léger
D'abord lire les trois nombres et les ranger. Ensuite seulement chercher le plus grand : une case max garde le plus grand vu jusqu'ici, et le premier nombre y va directement.
Indice précis
Pour chaque nouveau nombre : nombre moins max. Si c'est 0 ou plus, le nombre va dans max. On n'affiche qu'une fois, à la fin.
Correction
INP // les trois nombres, d'abord
STA a
INP
STA b
INP
STA c
LDA a // puis on cherche le maximum :
STA max // a est le plus grand vu jusqu'ici
LDA b // b - max
SUB max
BRP bGagne // positif ou nul : b prend la place
BRA testC
bGagne: LDA b
STA max
testC: LDA c // c - max, le même test avec le troisième
SUB max
BRP cGagne
BRA fin
cGagne: LDA c
STA max
fin: LDA max // on n'affiche qu'une fois, à la fin
OUT
HLT
a: DAT
b: DAT
c: DAT
max: DAT
Avec une boucle
Défi 11
Afficher 10, 9, 8, … jusqu'à 1.
Indice
C'est l'exercice 11, sans le INP : le compteur part de 10.
Défi 12
Afficher 1, 2, 3, … jusqu'à 10.
Indice léger
Le compteur ne passe jamais par 0, donc BRZ ne peut pas décider seul. On continue tant que 10 moins le compteur est positif ou nul.
Indice précis
Ce test écrase l'accumulateur : le compteur vit dans une case cpt, et il faut le recharger dans le corps. C'est le second squelette de la partie 5.4.
Correction
LDA un // le compteur part de 1
STA cpt
boucle: LDA dix // 1. la condition de sortie : on continue tant que
SUB cpt // 10 - compteur est positif ou nul
BRP corps
BRA fin
corps: LDA cpt // 2. le corps : afficher, puis monter d'un
OUT
ADD un
STA cpt
BRA boucle // 3. on boucle
fin: HLT
cpt: DAT
un: DAT 1
dix: DAT 10
Défi 13
Demander un nombre, et afficher sa table de multiplication de 1 à 10. On tape 7 : affiche 7, 14, 21, … 70.
Indice léger
C'est le défi 12, avec une case res en plus : à chaque tour, on lui ajoute le nombre tapé.
Indice précis
Deux cases à tenir, res et cpt, et un seul accumulateur. Avant de charger l'une, range l'autre.
Correction
INP // le nombre tapé
STA n
STA res // le premier multiple, c'est le nombre lui-même
LDA un // le compteur part de 1
STA cpt
boucle: LDA dix // 1. la condition de sortie : dix multiples en tout
SUB cpt
BRP corps
BRA fin
corps: LDA res // 2. le corps : afficher le multiple courant,
OUT
ADD n // puis préparer le suivant
STA res
LDA cpt // et avancer le compteur
ADD un
STA cpt
BRA boucle // 3. on boucle
fin: HLT
n: DAT
res: DAT
cpt: DAT
un: DAT 1
dix: DAT 10
Défi 14
Demander un nombre N, et afficher 1 + 2 + … + N. On tape 5 : affiche 15.
Indice léger
Un compteur part de N et descend jusqu'à 1. À chaque tour, on l'ajoute à une case somme.
Indice précis
Le test est en tête : charger cpt, sortir s'il vaut 0. Dans le corps : charger somme, ajouter cpt, ranger somme, puis enlever 1 à cpt. Afficher une seule fois, à la sortie.
Correction
INP // le nombre N
STA cpt
boucle: LDA cpt // 1. la condition de sortie
BRZ fin
LDA somme // 2. le corps : ajouter le compteur à la somme
ADD cpt
STA somme
LDA cpt // puis descendre d'un
SUB un
STA cpt
BRA boucle // 3. on boucle
fin: LDA somme // on n'affiche qu'une fois, à la sortie
OUT
HLT
cpt: DAT
somme: DAT 0
un: DAT 1
Avec un peu de tout
Défi 15 : la multiplication
Demander deux nombres et afficher leur produit. On tape 6 puis 7 : affiche 42.
Les deux nombres tapés sont positifs, et leur produit ne dépasse pas 4999.
Indice léger
C'est le défi 6, le triple. Mais cette fois, le nombre de fois qu'on ajoute est tapé au clavier, il n'est pas connu d'avance.
Indice précis
Une case res part de 0, une case cpt part du second nombre. À chaque tour : ajouter le premier nombre à res, puis enlever 1 à cpt. On sort quand cpt vaut 0, et on affiche res une seule fois, à la fin.
Défi 16 : la division euclidienne
Demander deux nombres, et afficher le quotient, puis le reste de la division euclidienne du premier par le second. On tape 17 puis 5 : affiche 3, puis 2.
Les deux nombres tapés sont positifs, et le second n'est pas 0.
Indice léger
La machine ne sait pas diviser, comme elle ne savait pas multiplier au défi 6. Combien de fois peut-on enlever 5 à 17 avant de passer en négatif ?
Indice précis
Une case reste part du premier nombre, une case quotient part de 0. Tant que reste moins le diviseur est positif ou nul, on range ce résultat dans reste et on ajoute 1 à quotient. On sort de la boucle quand il devient négatif, et on affiche les deux cases à la fin, une seule fois.
Défi 17 : compter jusqu'au 0
Demander des nombres, un par un, jusqu'à ce qu'on tape 0. Afficher combien de nombres ont été tapés avant ce 0. On tape 12, 7, 9, puis 0 : affiche 3.
Indice léger
Dans tous tes programmes jusqu'ici, la boucle savait d'avance combien de tours faire. Ici, c'est le nombre tapé qui décide d'arrêter.
Indice précis
INP met le nombre tapé dans l'accumulateur : BRZ peut donc le tester tout de suite, sans le ranger nulle part. Si ce n'est pas 0, on ajoute 1 à une case n, et on revient au INP. On affiche n à la sortie.
Défi 18 : la suite de Fibonacci
Chaque terme est la somme des deux précédents : 1, 1, 2, 3, 5, 8, 13, 21, et ainsi de suite. Demander un nombre N, et afficher les N premiers termes. On tape 8 : affiche 1, 1, 2, 3, 5, 8, 13, 21.
N est compris entre 1 et 19. Au-delà, les termes sortent de ce que la machine sait afficher, et elle se met à annoncer des nombres négatifs sans prévenir.
Indice léger
Il faut garder deux termes en même temps, et il n'y a qu'un accumulateur. Relis l'exercice 3 : pourquoi l'échange y échouait-il ?
Indice précis
Trois cases, a, b, et une case de passage t. À chaque tour : afficher b, calculer a + b et le ranger dans t, puis ranger b dans a et t dans b. Un compteur part de N et descend jusqu'à 0.
En Python, tu écriras 6 * 7, 17 // 5 et 17 % 5 en une ligne chacun. Ici, il n'y a que ADD et SUB.
7. Quand ça ne marche pas
- Le simulateur fait l'ancien programme : assemble à nouveau.
- Ça ne s'arrête pas : un saut en arrière sans sortie, ou un
HLTqui manque. - Une valeur a disparu : tu as chargé autre chose dans l'accumulateur sans la ranger avant.
- N'importe quoi, puis ça s'arrête : la machine est passée sur tes
DAT. Il manque unHLTavant.
Utilise Step, et dis ce qui va se passer avant de cliquer.
8. À retenir
- La machine ne connaît qu'une petite table d'instructions. Elle fait exactement ce qui est écrit.
- Il n'y a qu'un accumulateur : on range avant de charger autre chose.
LDAetSTAcopient : la case, ou l'accumulateur, garde sa valeur.- Un nom de case, c'est juste un numéro que la machine calcule pour toi.
- Sauter en avant, c'est choisir ; sauter en arrière, c'est répéter.
Une case contient quatre chiffres, de 0000 à 9999. Mais la machine lit tout mot à partir de 5000 comme un négatif : le plus grand nombre qu'elle sait afficher est 4999, et le plus petit −5000. Que se passe-t-il quand un calcul sort de là ? C'est la question du chapitre Représentation de l'information, où cette idée s'appelle le complément à 2.
Ce que la machine voit vraiment, des nombres et rien d'autre, est à la page Pour aller plus loin.