LES SOUS PROGRAMMES
Si vous avez déjà découvert un langage de haut niveau, vous connaissez l'importance de la création
d'unités fonctionnelles dans vos programmes, appelés fonctions ou procédures ou sous programmes. Tout
problème complexe doit être divisé en tâches élémentaires qui permettent de mieux le comprendre ,
le mettre en oeuvre, le tester.
Deux instructions vont nous être utiles , le CALL et le RET.
L'instruction CALL effectue un saut inconditionnel vers un sous programme et empile l'adresse de
l'instruction suivante.
L'instruction RET dépile une adresse et saute à cette adresse.
L'instruction CALL permet d'appeler un sous programme en obligeant le processeur à poursuivre
l'exécution à un autre endroit que la ligne qui suit cette instruction CALL. Le corps du sous programme
comprend en réponse une instruction RET qui permet de revenir à l'instruction qui suit le CALL.
D'un point de vue technique, l'instruction CALL provoque le positionnement de l'adresse de retour
sur la pile et la copie de l'adresse du sous programme qui doit être appelé dans le pointeur
d'instruction. Dés que le sous programme a terminé son exécution, son instruction RET provoque le
dépilement de l'adresse de retour dans le pointeur d'instruction.
Le processeur exécute toujours l'instruction dont l'adresse est indiquée dans EIP.
La structure d'un sous programme sera la suivante :
sousp:
push ebp ;empile la valeur originale de ESP
mov ebp,esp ;EBP=ESP
sub esp,octets_locaux ; nombre d'octets nécessaires pour les locales
; instruction du sous programme
mov esp,ebp ;désalloue les locales
pop ebp ;restaure la valeur originale de ESP
ret
L'appel du sous programme dans le programme principal ou dans un autre sous programme sera :
call sousp
Les paramètres du sous programme peuvent être passées par la pile. Ils doivent être empilés avant
l'instruction CALL. Si le paramètre doit être modifié par le sous programme, l'adresse de la donnée
doit être passée, pas sa valeur. Si la taille du paramètre est inférieur à un double mot, il doit
être converti en un double mot avant d'être empilé.
APPLICATION
Essayons maintenant d'appliquer ce que nous venons de découvrir.
Nous voudrions additionner trois nombres et que cette addition soit faite dans un sous programme.
Essayons ce programme ci dessous :