Flux rss
Collection CommentÇaMarche.net
Bookmark Ajouter aux favoris / Partager

La notion de procédure

En langage assembleur, on appelle procédure un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la procédure. Cette notion de sous-programme est généralement appelée fonction dans d'autres langages. Les fonctions et les procédures permettent d'exécuter dans plusieurs parties du programme une série d'instructions, cela permet une simplicité du code et donc une taille de programme minimale. D'autre part, une procédure peut faire appel à elle-même, on parle alors de procédure récursive (il ne faut pas oublier de mettre une condition de sortie au risque sinon de ne pas pouvoir arrêter le programme...).

La déclaration d'une procédure

Etant donné qu'une procédure est une suite d'instructions, il s'agit de regrouper les instructions composant la procédure entre des mots clés. L'ensemble de cette manipulation est appelée déclaration de procédure.

Ces mots clés permettant la déclaration de la procédure sont une étiquette (qui représente le nom de la fonction) précédant le mot clé PROC marquant le début de la procédure, suivi de near (qui signale que la procédure est située dans le même segment que le programme appelant) et RET désignant la dernière instruction, et enfin le mot clé ENDP qui annonce la fin de la procédure. Ainsi une déclaration de procédure ressemble à ceci :

étiquettePROCnear
 instruction1 
 instruction2 
 ... 
 RET 
étiquetteENDP 

Appel d'une procédure

C'est l'instruction CALL qui permet l'appel d'une procédure. Elle est suivie soit d'une adresse 16 bits, désignant la position du début de la procédure, ou bien du nom de la procédure (celui de l'étiquette qui précède le mot clé PROC).

Comment l'appel et la fin de la procédure fonctionnent ?

Lorsqu'on appelle une procédure, la première adresse de la procédure est stockée dans le registre IP (pointeur d'instruction). Le processeur traite ensuite toutes les lignes d'instructions précédant le mot clé RET. Finalement, l'adresse stockée avant l'appel de PROC est remise dans le registre IP.

Cela paraît simple mais le problème provient du fait que les procédures peuvent être imbriquées, c'est-à-dire que de saut en saut, le processeur doit être capable de revenir successivement aux adresses de retour. En fait, à chaque appel de fonction de l'instruction CALL, le processeur empile l'adresse contenue dans le registre IP (il pointe alors sur l'instruction suivant l'instruction CALL) avant de la modifier. A l'appel de l'instruction RET (qui ne prend pas d'arguments) le contenu de la pile est dépilé puis stocké dans le registre IP.

Le passage de paramètres

Une procédure effectue généralement des actions sur des données qu'on lui fournit, toutefois dans la déclaration de la procédure il n'y a pas de paramètres (dans des langages évolués on place généralement les noms des variables paramètres entre des parenthèses, séparés par des virgules). Il existe toutefois deux façons de passer des paramètres à une procédure :

  • Le passage des paramètres par registre : on stocke les valeurs dans les registres utilisés dans la procédure
  • Le passage des paramètres par pile : on stocke les valeurs dans la pile avant d'appeler la procédure, puis on lit le contenu de la pile dans la procédure

Le passage de paramètres par registre

C'est une méthode simple pour passer des paramètres :
Elle consiste à écrire sa procédure en faisant référence à des registres dans les instructions, et de mettre les valeurs que l'on désire dans les registres juste avant de faire l'appel de la fonction...

Le passage des paramètres par registre est très simple à mettre en oeuvre mais elle est très limitée, car on ne peut pas passer autant de paramètres que l'on désire, à cause du nombre limité de registres. On lui préfèrera le passage des paramètres par pile.

Le passage de paramètres par pile

Cette méthode de passage de paramètres consiste à stocker les valeurs des paramètres dans la pile avant l'appel de procédure (grâce à l'instruction PUSH), puis de lire le contenu de la pile grâce à un registre spécial (BP : Base pointer) qui permet de lire des valeurs dans la pile sans les dépiler, ni modifier le pointeur de sommet de pile (SP).

L'appel de la procédure se fera comme suit :
PUSH parametre1 ;où parametre1 correspond à une valeur ou une adresse
PUSH parametre2 ;où parametre2 correspond à une valeur ou une adresse
CALL procedure

La procédure commencera par l'instruction suivante :

MOV BP, SP;Permet de faire pointer BP sur le sommet de la pile

Puis pourra contenir des instructions du type :
MOV AX, [BP];Stocke la valeur contenue dans le sommet de la pile dans AX, sans dépiler
MOV BX, [BP+2];Stocke la valeur contenue dans le mot suivant de la pile dans BX (un mot fait 2 octets), sans dépiler


Dernière modification le mardi 14 octobre 2008 à 17:40:29.Ce document intitulé « Les procédures en assembleur » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
VBScript - Les fonctions et les procédures La notion de procédure On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction (ou procédure)... www.commentcamarche.net/contents/vbscript/vbsfunction.php3
Assembler un PC De l'assemblage d'un ordinateur Un ordinateur de type PC est modulaire, c'est-à-dire qu'il peut être monté en assemblant des éléments matériels de différents constructeurs, afin d'obtenir un ordinateur conforme à ses besoins. Les éléments... www.commentcamarche.net/contents/assemblage/monter.php3
Introduction à l'assembleur Les prérequis nécessaires Le langage assembleur est très proche du langage machine (c'est-à-dire le langage qu'utilise l'ordinateur : des informations en binaire, soit des 0 et des 1). Il dépend donc fortement du type de processeur. Ainsi il... www.commentcamarche.net/contents/asm/assembleur.php3
[Photofiltre]Réaliser un assemblage de 2 imagesPhotofiltre est un logiciel de retouche d'image. Cette astuce fonctionne aussi bien avec Photofiltre qu'avec Photofiltre Studio Dans ce cas précis, Photofiltre va permettre d'assembler un collage c'est-à-dire de coller une deuxième image (en... www.commentcamarche.net/faq/sujet-7719-photofiltre-realiser-un-assemblage-de-2-images
Compiler un programme assembleur avec NasmAvec Linux Etape 1. Créer un fichier source Etape 2. Assembler le fichier source Etape 3. Création de l'executable Etape 4. Execution du programme Avec windows Etape 1. Installer les logiciels nécessaires Etape 2. Créer un fichier... www.commentcamarche.net/faq/sujet-9836-compiler-un-programme-assembleur-avec-nasm
Liens utiles assembleur x86Voici quelques liens utiles pour l'assembleur x86. Le but étant de compiler des documents pertinents autant pour ceux qui débutent que pour ceux qui sont à l'aise dans ce domaine. Tutoriels Références complètes Assembleur sous... www.commentcamarche.net/faq/sujet-9899-liens-utiles-assembleur-x86
Nouveau PC via un assembleur : bug écran bleu (Résolu)Bonjour à tous; je viens de faire monter par un assembleur un super PC sur mesure( 1400€)...mais ...qui ne fonctionne pas ! En effet , il a fonctionné quelques minutes , j'y ai installé Norton et un CPL et il s'est arrêté tout seul lors de l'ouverture... www.commentcamarche.net/forum/affich-2450909-nouveau-pc-via-un-assembleur-bug-ecran-bleu
Appel de procédure distante RPC au demarage (Résolu)Bonjour a tous, apres une install de maps supplementaires de call of duty, j'ai obtenu au demarage une fenetre AUTORITE NT/SYSTEM avec appel de procedure distante RPC. J'ai pensé a Blaster et sasser et aux MAJ windows update. Mais rien ne fonctionne... www.commentcamarche.net/forum/affich-1334706-appel-de-procedure-distante-rpc-au-demarage
Procedure deblocage du lg kf 700 (Résolu)Bonjour, J'aimerai avoir la manipulation pour pouvoir inserer le code de déblocage du lg kf 700. Cette procédure est introuvable sur les différents que j'ai pu visiter. Merci www.commentcamarche.net/forum/affich-6902174-procedure-deblocage-du-lg-kf-700
50 ans d'archives de l'Assemblée nationale sur Internet(Paris - Relax news) - A l'occasion du 50ème anniversaire de la première séance de la première législature de la Ve République, qui s'est tenue le 9 décembre 1958, l'Assemblée nationale met en ligne tous les comptes rendus de séance de ces cinquante... www.commentcamarche.net/actualites/50-ans-d-archives-de-l-assemblee-nationale-sur-internet-5847949-actualite.php3
Liste des instructions en assembleurTableau des principales instructions en assembleur Voici une liste (non exhaustive) des principales instructions en assembleur des processeurs 80x86, ainsi que du code machine qui leur est associé et de leur taille en mémoire. Les valeurs val et... www.commentcamarche.net/contents/asm/liste.php3
Branchements en assembleurOn appelle saut (ou branchement) en assembleur le fait de passer à une instruction autre que celle qui suit celle en cours en mémoire. En effet, en temps normal (c'est-à-dire sans instruction contraire) le processeur exécute les instructions... www.commentcamarche.net/contents/asm/saut.php3