Qu'est-ce qu'un programme


Basiquement, un programme est une ou plusieurs instructions comprises et exécutées par le processeur.

Une instruction est une fonction gravée dans la puce, elle peut être suivie d'operande(s). Du point de vue du processeur, l'instruction est un code numérique auquel on a attribué un mnémonique qui est plus facile à retenir par le programmeur qu'un code.

Par exemple : mov dest, src

"mov" est un mnémonique, et lorsque le processeur rencontrera cette instruction, il copiera le contenu de l'operande source dans l'operande de destination.

Un programme exécutable au format Windows s'appelle un : Portable Executable (PE).

Tout programme PE doit contenir :

Comme vous avez pu le remarquer dans les deux précédants cours, il a été déclaré des segments sous la forme :

Data SEGMENT 'data'

    [données informatives]

Data ENDS

Code SEGMENT 'code'

    données exécutables

Code ENDS

Donc, tout programme assembleur devra comporter la déclaration de segments dans la forme énoncée ci-dessus.

Lorsque vous cliquez sur un fichier exécutable (.exe) le programme chargé d'implanter en mémoire le code et les données s'appelle le "Loader". Ce dernier va lire le contenu du fichier et initialiser les différents segments en mémoire. L'application une fois chargée dans la mémoire vive sera exécutée par le processeur. Le programme se terminera lorsque le processeur aura exécuté la fonction ExitProcess de windows. Comme son non l'indique cette fonction termine le processus dans lequel l'application a été chargée. Puis Windows reprend la main.

Tout segment de code devra se terminer obligatoirement, afin de fermer l'application, par l'appel à la fonction spéciale de Windows : ExitProcess.

Le segment de code

Ce segment contiendra comme son nom l'indique tout le code de l'application.

Le segment de données

Ce segment contiendra l'ensemble des données informatives de l'application. Ce sont les données globales. Une donnée est appelée une variable ou une constante. Une variable peut avoir son contenu effacé alors que le contenu de la constante ne sera jamais effacé.

Le segment de pile

C'est aussi un segment de données mais ces dernières ne seront utilisées qu'au niveau local, c'est-à-dire dans le bloc d'une fonction. C'est dans pile que les paramètres de la fonction appelée sont placés. Ce segment, contrairement au segment 'data' devra toujours être déclaré. S'il ne l'est pas, le compilateur se chargera d'en déclarer un par défaut. Au moment du chargement en mémoire de l'application, Windows place sur la pile du programme exécuté des données. C'est la raison pour laquelle un programme possède un tel segment.

Ci-après, le programme présenté dans le cours n° 2 implanté en mémoire vive :