Accueil > Logiciels du système >
On sait qu’on peut créer des circuits et composants pour performer diverses opérations logiques et arithmétiques. On sait aussi que les bits peuvent être interprétés de différentes façons pour représenter différents types d’informations (p. ex. nombres, texte, couleurs).
Maintenant on va combiner les deux, fusionner le matériel et les données, pour savoir comment on peut programmer nos propres algorithmes.
Ceci est une vue de très bas niveau et nous ne ferons pas de programmation comme ça… on va utiliser des abstractions puissantes - les langages de haut niveau - pour rendre la tâche plus facile. Mais si vous comprenez comment ça marche “sur le métal nu” vous comprendrez mieux pourquoi certains éléments du langage de haut niveau existent.
À la fin de cette leçon vous devrez être en mesure de :
Une excellente explication des bases du fonctionnement se trouve dans la vidéo de Computerphile, notamment les trois premières minutes et demi.
Quelques points clés :
Ce qui n’est pas mentionné dans la vidéo mais qui est également important :
Quand tout est en binaire (les codes d’opération et les opérandes), le code s’appelle le langage machine. Les 1 et 0 opèrent directement sur les circuits de l’ordinateur (les portes logiques et composants vus précédement).
Quand on remplace le code d’opération avec un mot-clé et on écrit les adresses avec des caractères (p.ex.: r1, 0x0004), le code s’appelle un langage assembleur. Il est équivalent au langage machine, mais lisible par les humains.
Ce sont les deux langages de bas niveau. Les opérations sont contraintes à représenter directement les circuits de la machine. Les langages de haut niveau n’ont pas cette contrainte.
Avec les langagages de haut niveau, on peut se permettre d’utiliser des mots-clés et des structures plus naturelles pour les humains sachant que ces instructions seront analysés par un logiciel (l’interpréteur ou le compilateur) qui les traduira en langage machine (ou produira des messages d’erreur si les instructions ne sont pas valides).
On trouve dans la plupart des langages de haut niveau des mot-clés comme : if
-else
(si, sinon), for
(pour les éléments ou valeurs suivants), while
(tant que la condition suivante est vraie), etc. Chacun de ces mots-clés seraient remplacé par toute une série de codes d’opération en langage machine.
Voici une comparaison de programmes écrites en trois version présumant les informations suivantes :
0b0001
= 0x1
= 1 est l’opération d’enregistrement d’une valeur en mémoire dans le registre r1
0b0010
= 0x2
= 2 est l’opération d’ajout d’une valeur à celle déjà dans le registre r1
0b0011
= 0x3
= 3 est l’opération de stockage d’une valeur à une adresse en mémoire vive0b00011011
= 0x1b
= 27 est une adresse en mémoire vive qui contient la valeur 2 (0b10
= 0x2
)0b00011100
= 0x1c
= 28 est une adresse en mémoire vive qui contient la valeur 3 (0b11
= 0x3
)Le but du programme est d’ajouter les valeurs 2 et 3 et le stocker en mémoire à l’adresse 0x1d
.
Codes d’opération en binaire Adresses mémoire en binaire
1
2
3
0b0001 0b00011011
0b0010 0b00011100
0b0011 0b00011101
Mêmes codes d’opération en mots Mêmes adresses en hexadécimal
1
2
3
Load r1, 0x1b
Add r1, 0x1c
Store r1, 0x1d
n
est une abstraction pour un endroit en mémoire L’addition de valeurs est représentée naturellement L’interpréteur de Python traduit le tout en langage machine.
1
n = 2 + 3