Les procédures
Appel de sous-programmes : pour éviter la répétition d’une même séquence
d’instructions plusieurs fois dans un programme, on rédige la séquence une seule fois
en lui attribuant un nom et on l’appelle lorsqu’on en a besoin. Le programme appelant
est le programme principal. La séquence appelée est un sous-programme ou procédure.
Ecriture d’un sous-programme :
Remarque : une procédure peut être de type NEAR si elle se trouve dans le même
segment ou de type FAR si elle se trouve dans un autre segment.
Exemple :
Appel d’un sous-programme par le programme principal : CALL procédure
Cours Architecture & µprocesseur
1
26
Lors de l’exécution de l’instruction CALL, le pointeur d’instruction IP est chargé avec
l’adresse de la première instruction du sous-programme. Lors du retour au programme
appelant, l’instruction suivant le CALL doit être exécutée, càd que IP doit être rechargé
avec l’adresse de cette instruction.
Avant de charger IP avec l’adresse du sous-programme, l’adresse de retour au
programme principal, càd le contenu de IP, est sauvegardée dans une zone mémoire
particulière appelée pile.
Lors de l’exécution de l’instruction RET, cette adresse est récupérée à partir de la pile et
rechargée dans IP, ainsi le programme appelant peut se poursuivre.
Cours Architecture & µprocesseur
2
27
La pile
Fonctionnement de la pile : la pile est une zone mémoire fonctionnant en mode LIFO
(Last In First Out : dernier entré, premier sorti). Deux opérations sont possibles sur la
pile :
empiler une donnée : placer la donnée au sommet de la pile ;
dépiler une donnée : lire la donnée se trouvant au sommet de la pile.
Le sommet de la pile est repéré par un registre appelé pointeur de pile (SP : Stack
Pointer) qui contient l’adresse de la dernière donnée empilée.
La pile est définie dans le segment de pile dont l’adresse de départ est contenue dans le
registre SS (Stack Segment, registre de segment de pile).
Cours Architecture & µprocesseur
3
28
Remarque : la pile et le programme croissent en sens inverse pour diminuer le risque de
collision entre le code et la pile dans le cas où celle-ci est placée dans le même segment
que le code (SS = CS).
Lors de l’appel à un sous-programme, l’adresse de retour au programme appelant
(contenu de IP) est empilée et le pointeur de pile SP est automatiquement décrémenté.
Au retour du sous-programme, le pointeur d’instruction IP est rechargé avec la valeur
contenue sommet de la pile et SP est incrémenté.
Cours Architecture & µprocesseur
4
29
La pile peut également servir à sauvegarder le contenu de registres qui ne sont pas
automatiquement sauvegardés lors de l’appel à un sous programme :
instruction d’empilage : PUSH opérande
instruction de dépilage : POP opérande
où opérande est un registre ou une donnée sur 2 octets (on ne peut empiler que des
mots de 16 bits).
Exemple :
Remarque : la valeur du pointeur de pile (SP) doit être initialisée par le programme
principal avant de pouvoir utiliser la pile.
Publicité
Utilisation de la pile pour le passage de paramètres : pour transmettre des paramètres à une
procédure, on peut les placer sur la pile avant l’appel de la procédure, puis celle-ci les
récupère en effectuant un adressage basé de la pile en utilisant le registre BP.
Cours Architecture & µprocesseur
5
30
Exemple : soit une procédure effectuant la somme de deux nombres et retournant le
résultat dans le registre AX .
programme principal :
procédure somme :
Cours Architecture & µprocesseur
6
31
L’instruction ret 4 permet de retourner au programme principal et d’incrémenter le
pointeur de pile de 4 unités pour dépiler les paramètres afin de remettre la pile dans son
état initial.
Etat de la pile :
Cours Architecture & µprocesseur
7
32
Méthodes de programmation
Etapes de la réalisation d’un programme :
Définir le problème à résoudre : que faut-il faire exactement ?
Déterminer des algorithmes, des organigrammes : comment faire? Par quoi
commencer, puis poursuivre ?
Rédiger le programme (code source) :
utilisation du jeu d’instructions (mnémoniques) ;
création de documents explicatifs (documentation).
Tester le programme en réel ;
Corriger les erreurs (bugs) éventuelles : déboguer le programme puis refaire des
tests jusqu’à obtention d’un programme fonctionnant de manière satisfaisante.
Langage machine et assembleur :
Langage machine : codes binaires correspondant aux instructions ;
Assembleur : logiciel de traduction du code source écrit en langage assembleur
(mnémoniques).
Cours Architecture & µprocesseur
8
33
Réalisation pratique d’un programme :
Rédaction du code source en assembleur à l’aide d’un éditeur (logiciel de
traitement de texte ASCII) :
edit sous MS-DOS,
notepad (bloc-note) sous Windows,
Assemblage du code source (traduction des instructions en codes binaires) avec
un assembleur :
MASM de Microsoft,
TASM de Borland,
A86 disponible en shareware sur Internet, ...
pour obtenir le code objet : code machine exécutable par le microprocesseur ;
Chargement en mémoire centrale et exécution : rôle du système d’exploitation ou
d’un moniteur (carte de développement à base de microprocesseur).
Pour la mise au point (débogage) du programme, on peut utiliser un programme d’aide
À la mise au point (comme DEBUG sous MS-DOS) permettant :
l’exécution pas à pas;
la visualisation du contenu des registres et de la mémoire ;
la pose de points d’arret …
Cours Architecture & µprocesseur
Publicité
9
34
Structure d’un fichier source en assembleur :
Pour faciliter la lisibilité du code source en assembleur, on le rédige sous la forme
suivante :
Cours Architecture & µprocesseur
10
35
Exercice 1
Déterminer le contenu des registres AX, BX, CX et DX dans chaque ligne de
la séquence d’instructions ci-dessous sachant que ces registres contiennent
initialement les valeurs suivantes :
DX=4532H
CX=1BCEH
AX=9897H BX=5678H
La pile contient une seule valeur = 1F8BH
OR BX,FFFFH
BX=FFFFH
PUSH BX
SS=FFFFH
XOR AX,AX
AX=0
AND DX,0000H
DX=0
MOV AX,000EH
AX=000Eh
MUL BL
AX=0DF2h
POP CX
CX=FFFFh
PUSH AX
SS=0DF2h
POP DX
DX=0DF2h
OR BX,0100H
BX=FFFFh
Cours Architecture & µprocesseur
11
36
Exercice 2
Soit la table TAB1 définit par (9A, 82, 30, F5, 54, C0, 65, 71, 80,
93) :
Ecrire un programme faisant appel à :
•Une procédure RECHERCHE qui permet de chercher la
valeur 54 dans TAB1 si elle existe et de la supprimer.
•Une procédure INVERSION qui permet l’inversion des
quartets de chaque valeur de la table TAB1 et de les
stocker en ordre inverse dans une autre table TAB2, (39,
08, 17, 57 0C, 45, 5F, 03, 28, A9).
•Une procédure PARITE qui permet de partager TAB1
en deux tables TAB3 et TAB4. La première doit contenir
les éléments pairs. La deuxième doit contenir les éléments
impairs.
Cours Architecture & µprocesseur
12
Solution
Recherche proc near
Publicité
Mov ax,0
Mov si,0
Mov bx,offset tab1
L2: mov al,[bx+si]
Cmp al,54h
Jne l1
Mov al,[bx+si+1]
Mov [bx+si],al
L1: inc si
Cmp si,10
Jne l2
Ret
Recherche endp
inversion proc near
Mov ax,0
Mov si,0
Mov di,10
Mov cl,4
Lea bx,tab1
Lea bp,tab2
L1: mov al,[bx+si]
Ror al,cl
Mov [bp+di],al
Inc si
Dec di
Cmp si,10
Jne l1
ret
inversion endp
Cours Architecture & µprocesseur
13
35
Solution
Parité proc near
Mov ax,0
Mov si,0
Mov di,offset tab3
Mov bp, offset tab4
Mov bx,offset tab1
Mov cl,2
L3: mov al,[bx+si]
Div cl
Cmp ah,0
Jne l1
Mov [bp],al
Inc bp
Jmp l2
L1: mov [di],al
Inc di
L2: Inc si
Cmp si,10
Jne l3
Ret
Parité endp
Cours Architecture & µprocesseur
14
35
Publicité
Exercice 3
Soit la table TAB1 contenant les valeurs suivantes (62, FF,
2D,4C,3F,F3,15,50,7D) :
Ecrire un programme principal faisant appel à :
•une procédure CHAINE qui permet d’afficher la chaine
de caractères suivante : « la somme des termes est : »
•une procédure SOMME qui permet de calculer la somme
des éléments de TAB1.
•une procédure DIVISION qui permet de mettre ce
résultat dans une table TAB2.
•une procédure AFFICHAGE qui permet l’affichage
caractère par caractère le résultat de la somme.
Cours Architecture & µprocesseur
15
35
Solution: Version 1 : Procédures sans pile
Cours Architecture & µprocesseur
16
35
Solution: Version 1 : Procédures sans pile
Cours Architecture & µprocesseur
17
35
Solution: Version 2 : sans procédures mais avec pile
Cours Architecture & µprocesseur
18
35
Solution: Version 3 : procédures ET pile
Cours Architecture & µprocesseur
19
35
Solution: Version 3 : procédures ET pile
Cours Architecture & µprocesseur
20
35
Exercice 4
Ecrire un programme qui affiche sur écran trois messages :
Mess1 « il s’agit d’une lettre :… » si le caractère tapé est une lettre
(minuscule ou majuscule)
Mess2 « il s’agit d’un chiffre :… »si le caractère tapé est un chiffre
(0….9)
Mess 3 »il s’agit d’un symbole :… » pour le reste des caractère
N.B :
*Le nombre de fois n de taper un caractère n’est pas imposé c’est à eux
de choisir le n
*dans ce programme, ils manipulent int 21 avec les fonctions 06, 02 et
09.
Cours Architecture & µprocesseur
21
35
Solution
Cours Architecture & µprocesseur
22
35