Keyboard shortcuts

Touchez ← ou → pour naviguer les chapitres

Touchez S ou / pour chercher dans le livre

Touchez ? pour afficher ce message

Touchez Esc pour masquer ce message

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 registre r1
  • le code 0b0010 = 0x2 = 2 est l’opĂ©ration d’ajout d’une valeur Ă  celle dĂ©jĂ  dans le registre r1
  • 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)

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.

n = 2 + 3

© 2022-2025 David Crowley