Aller au contenu

Les langages de haut niveau

Pour simplifier encore leur tâche, les programmeurs ont inventé des langages encore plus proches de la langue anglaise : ce sont les langages de haut niveau tels que Python, le C, Java, etc.

Les instructions d’un programme de haut niveau sont traduites en langage assembleur ou en langage machine par un compilateur, pour être comprises par la machine. Un même code source (par exemple en C), sera compilé en divers programmes en assembleur, suivant le processeur utilisé.

Le premier compilateur a été écrit par Grace Hopper.

Dans certains langages, comme le C, il faut une phase de compilation avant l'exécution d'un programme. Ce n'est pas le cas de langages interprétés, comme Python.

Voici un exemple de traduction d'un script en Python (en utilisant le module dis) :

from dis import dis
dis('x=1;x=x+2')

qui donne :

0 LOAD_CONST 0 (1) → le nombre 1 est copié dans le registre 0
2 STORE_NAME 0 (x) → le contenu du registre 0 est copié dans la mémoire à la case adressée par x
4 LOAD_NAME 0 (x) → la valeur de x est copié dans le registre 0
6 LOAD_CONST 1 (2) → le nombre 2 est copié dans le registre 1
8 BINARY_ADD → l’addition des deux est effectuée
10 STORE_NAME 0 (x) → le résultat (contenu dans R0) est copié dans la mémoire à la case adressée par x
12 LOAD_CONST 2 (None) → la valeur None est copiée dans le registre 2
14 RETURN_VALUE → elle est renvoyée

Exercice

Voici un programme en langage Python :

x = 4
y = 8
if x == 10:
    y = 9
else :
    x=x+1
z = 6

Une traduction de ce programme en assembleur pourrait-être :

MOV R0,#4
STR R0,30
MOV R0,#8
STR R0,75
LDR R0,30
CMP R0,#10
BNE sinon
MOV R0,#9
STR R0,75
B finsi
sinon:
LDR R0,30
ADD R0,R0,#1
STR R0,30
finsi:
MOV R0,#6
STR R0,23
HALT

  1. À quoi correspondent les adresses mémoires 23, 75 et 30 ?
  2. Recopiez le programme ci-dessus dans ce ce simulateur pour vérifier son fonctionnement.

Exercice