Accueil > Logiciels du systĂšme >
đ Langages de bas niveau
Survol et attentes
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.
Définitions
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.
- Langage de bas niveau
- Langage de programmation oĂč les instructions (codes dâopĂ©ratipn) correspondent directement aux opĂ©rations des circuits de lâordinateur et les donnĂ©es sont des rĂ©fĂ©rences directes Ă des registres du CPU ou des adresses en mĂ©moire vive. Le langage machine (binaire) et le langage assembleur (codes machines en mots/nombres lisibles par les humains) sont des exemples de langages de bas niveau. Le langage machine peut-ĂȘtre envoyĂ© directement au processeur. Le langage assembleur a simplement besoin dâĂȘtre traduit en langage machine (substituant les codes humains pour les codes binaires associĂ©s) avant dâĂȘtre exĂ©cutĂ©.
- Langage de haut niveau
- Langage de programmation qui doit dâabord ĂȘtre interprĂ©tĂ© ou compilĂ© en langage machine par un logiciel spĂ©cialisĂ©. Cette Ă©tape intermĂ©diaire dâanalyse du programme permet aux langages de haut niveau dâĂȘtre plus naturels pour les humains, dâinclure des instructions puissantes (fonctions, boucles, lecture/Ă©criture de fichiers, etc.) et des abstractions pour les donnĂ©es (objets, variables). Python, Java, C++, et JavaScript sont des exemples de langages de haut niveau.
Objectifs dâapprentissage
Ă la fin de cette leçon vous devrez ĂȘtre en mesure de :
- Nommer deux langages de bas niveau, le langage machine et le langage assembleur, et décrire leurs différences.
- DĂ©crire si les instructions de bas niveau font rĂ©fĂ©rence Ă la valeur ou Ă lâadresse des donnĂ©es
CritĂšres de succĂšs
- Je peux donner une définition et deux exemples de langage de bas niveau.
- Je peux décrire la structure des instructions de bas niveau et le rÎle du compteur du programme.
Comment les langages de programmation fonctionnent Ă bas niveau
Démonstration (vidéo - du début à 3:30)
Une excellente explication des bases du fonctionnement se trouve dans la vidéo de Computerphile, notamment les trois premiÚres minutes et demi.
Explication des instructions de bas niveau
Quelques points clés :
- chaque donnée, incluant les instructions, se trouve à une adresse spécifique en mémoire vive
- les instructions font toujours rĂ©fĂ©rence Ă lâadresse en mĂ©moire et non Ă la valeur quâelle contient; certaines instructions demandent de lire la valeur Ă cet endroit et dâautres demandent dâĂ©crire une nouvelle valeur Ă cet endroit
- il y a des adresses spĂ©cialisĂ©es sur le processeur pour stocker des valeurs Ă court terme durant les opĂ©rations - les registres de lâunitĂ© dâarithmĂ©tique et de logique
- il y a un registre spĂ©cial qui stocke toujours lâadresse de la prochaine instruction Ă exĂ©cuter - le compteur du programme; certaines opĂ©rations modifient directement cette valeur, sinon lâadresse avance par un nombre de bits spĂ©cifique correspondant Ă la largeur des cellules en mĂ©moire.
Ce qui nâest pas mentionnĂ© dans la vidĂ©o mais qui est Ă©galement important :
- Sâil y a des donnĂ©es que vous voulez utilisez en rĂ©fĂ©rence durant le programme ou conserver par la suite, il doit avoir des adresses en mĂ©moire pour ces valeurs au delĂ des registres de lâUAL (qui seront rĂ©utilisĂ©s pour dâautres opĂ©rations)
- On montre les instructions utilisant des mots quâon peut lire et des nombres dĂ©cimaux : Cela correspond au langage assembleur ou Ă un autre langage de bas niveau. Ces instructions seraient traduits en binaire (langage machine) pour lâexĂ©cution :
- un code unique par mot-clé, chaque code correspondant à un circuit qui existe dans le processeur
- toutes les valeurs sont en binaire
- un format standard pour lâinstruction, p. ex. 1 octet pour le code dâinstruction et, selon lâinstruction, des nombres spĂ©cifiques dâoctets pour la 1e opĂ©rande et pour la 2e opĂ©rande.
Langages de bas niveau
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.
Langages de haut niveau
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.
Comparaison des différents types de programmes
Voici une comparaison de programmes écrites en trois version présumant les informations suivantes :
- le code
0b0001=0x1= 1 est lâopĂ©ration dâenregistrement dâune valeur en mĂ©moire dans le registrer1 - le code
0b0010=0x2= 2 est lâopĂ©ration dâajout dâune valeur Ă celle dĂ©jĂ dans le registrer1 - le code
0b0011=0x3= 3 est lâopĂ©ration de stockage dâune valeur Ă une adresse en mĂ©moire vive - la valeur
0b00011011=0x1b= 27 est une adresse en mémoire vive qui contient la valeur 2 (0b10=0x2) - la valeur
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.
Langage machine
Codes dâopĂ©ration en binaire Adresses mĂ©moire en binaire
0b0001 0b00011011
0b0010 0b00011100
0b0011 0b00011101
Langage assembleur
MĂȘmes codes dâopĂ©ration en mots MĂȘmes adresses en hexadĂ©cimal
Load r1, 0x1b
Add r1, 0x1c
Store r1, 0x1d
Langage de haut niveau (Python)
nest 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.
n = 2 + 3