Ecrire le programme suivant en Python
import dis
dis.dis('x = 2;x = x + 3')
Un programme Python est traduit en langage machine pour être exécuté
Chaque instruction contient un code que le processeur peut décoder ce qui permet ensuite au processeur d'exécuter une tâche bien précise
Avant de voir les codes machines correspondants aux deux instructions précédentes nous allons voir les codes sous forme compréhensible (le langage assembleur)
Pour deux instructions (deux affectations) en assembleur il y a 7 actions
Chaque action par exemple LOAD_CONSTANT a un sens bien précis défini dans la documentation Python
Un élément important la pile (stack) permet de simplifier la gestion des opérations
Voici comment est effectué l'addition
A partir de ces éléments on peut décoder le code assembleur:
Chaque action a 2 octets, un octet pour le code opératoire (opcode) par exemple LOAD_CONST, puis un octet pour l'adresse mémoire (ou pas)
Si on veut désassembler le code assembleur LOAD_CONST et obtenir le code machine correspondant on utilise le dictionnaire opmap ainsi
Ainsi LOAD_CONST 0 est traduit par 0x64 0x00
Finir la traduction
Que donnera en langage assembleur et en langage machine les instructions suivantes ?
x = 2
y = 3
z = x + y