0% ont trouvé ce document utile (0 vote)
233 vues5 pages

Registres et Pile en Assembleur

Le document décrit le fonctionnement du registre des drapeaux et de la pile dans un microprocesseur. Il présente des exemples de programmes utilisant des instructions comme CMP, PUSH et POP pour manipuler ces éléments et explique leur utilité.

Transféré par

Oussama Bouhoun
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
233 vues5 pages

Registres et Pile en Assembleur

Le document décrit le fonctionnement du registre des drapeaux et de la pile dans un microprocesseur. Il présente des exemples de programmes utilisant des instructions comme CMP, PUSH et POP pour manipuler ces éléments et explique leur utilité.

Transféré par

Oussama Bouhoun
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Département Electronique Faculté de Technologie Université Ferhat Abbas

TP 2 : Le registre des drapeaux (Flags register)


et la pile (stack).

Rappel : Les registres, dont les principaux sont ax, bx, cx, dx, si, di, bp, sp, cs, ds, es, ss, flags et ip,
sont des emplacements de mémoire situés dans le processeur. Ils ont en général chacun une fonction
particulière.
Le registre Flag 

1- P1 : Reprendre le programme d’addition des valeurs 121 et 13 en utilisant juste AX.
2- P2 : Reprendre le programme d’addition des valeurs 121 et 13 en utilisant AL.

Durant l’exécution des 2 programmes observer le registre Flags, en cliquant sur le bouton
Flags dans la fenêtre ‘Emulator’ et compléter le tableau ci-dessous.

AH AL CF ZF SF OF PF AF IF DF
Valeurs initiales
00 00 0 0 0 0 0 0 1 0
Valeurs après exécution Programme 1( P1)
00 86 0 0 0 0 0 1 1 0
Valeurs après exécution Programme 2 (P2)
00 86 0 0 1 1 0 1 1 0

Constat 1 : Dans les deux cas, le programme donne des mêmes résultats, mais dans le second cas le
registre flag nous signal un changement au niveau de SF et OF.

Programme (1a): En utilisant les instructions Mov et Cmp, écrire un programme pour
comparer la valeur1 = 9 avec la valeur 10. Exécuter le et remplir le tableau des Flags.

mov ax, 10
cmp ax, 9

Licence électronique 1 Le microprocesseur


Département Electronique Faculté de Technologie Université Ferhat Abbas

CF ZF SF OF PF AF IF DF
0 0 0 0 0 0 1 0

Programme 1b: Reprendre la même opération pour comparer la valeur 2 = 10 avec 10.

CF ZF SF OF PF AF IF DF
0 1 0 0 1 0 1 0

Programme 1c: Reprendre la même opération pour comparer la valeur 3 = 11 avec 10.

CF ZF SF OF PF AF IF DF
1 0 1 0 1 1 1 0

Constat2 : Dans les 3 cas, La dernière ligne du programme ne renvoi rien, mais le registre Flags
change à chaque fois.

D’accord nous avons bien observé que les flags changent, et alors !
A quoi cela sert ? et comment exploiter les informations fournies par les flags. ?
Ce qui suit, répondra à vos interrogations.

Soit une variable qui peut prendre les valeurs 9,10 et 11, qu’on va comparer à la valeur 10 et
prendre des décisions en conséquence.

Programme 2a : Vous reprenez le programme (1a), si la variable prend la valeur 9 donc
inferieur à 10, vous chargez BX avec la valeur 00FFh dans le cas contraire vous chargez BX
avec la valeur FF00h.

Programme 2b : Vous reprenez le programme (1b), si la variable prend la valeur 10 donc
égale à 10, vous chargez CX avec la valeur 00FFh dans le cas contraire vous chargez CX
avec la valeur FF00h.

Programme 2c : Vous reprenez le programme (1c), si la variable prend la valeur 11 donc
supérieur à 10, vous chargez DX avec la valeur 00FFh dans le cas contraire vous chargez
DX avec la valeur FF00h.
NB : Il faut, consulter votre liste d’instructions et recenser celles qui impliquent
l’instruction ‘CMP’, et les bits ‘CF’, ‘SF’, ‘ZF’, etc du registre Flags.
Programme 2a Programme 2b Programme 2c
mov ax, 10 mov ax, 10 mov ax, 10
cmp ax, 9 cmp ax, 10 cmp ax, 11
ja inf je equ jb bel
mov bx, 0ff00h mov cx, 0ff00h mov dx, 0ff00h
inf: mov bx, 00ffh equ: mov cx, 00ffh bel: mov dx, 00ffh
mov ax, 9 mov ax, 11
cmp ax, 10 cmp ax, 10
jnb bel
jna inf
mov dx, 0ff00h
mov bx, 0ff00h
bel: mov dx, 00ffh
inf: mov bx, 00ffh

Licence électronique 2 Le microprocesseur


Département Electronique Faculté de Technologie Université Ferhat Abbas

La Pile (Stack) 

La pile est un espace mémoire pour placer et récupérer des données temporaires. Les
instructions qui travaillent avec la pile sont ( push, pop, call, …voir la liste complète des
instructions).

Quelle est son utilité ? Est-elle indispensable ? Comment fonctionne – t-elle ?


Ce qui suit, répondra à vos interrogations.

Programme 1a :
1- Charger les valeurs 1234h et 5678h respectivement dans les registres ax et bx.
Vous supposez que tous les autres registres sont utilisés (pas libre).
2- Alterner les valeurs contenues dans ax et bx.

Votre commentaire ? …Je ne peux pas, il faut d’abord libérer l’un d’eux. Il faut passer par
par la mémoire ou la pile.
Première methode : Mémoire interne (TP1)
mov ax, 1234h
mov bx, 5678h
mov [1000h],ax
mov ax, bx
mov bx,[1000h]
Hlt
Deuxième méthode : Pile ou stack seule
mov ax, 1234h
mov bx, 5678h
push ax
mov ax, bx
pop bx
hlt
troisième méthode : Pile ou stack seule.
mov ax, 1234h
mov bx, 5678h
push ax
push bx
pop ax
pop bx
hlt

Programme 1b :
1- Charger les valeurs 2,3,4,5 respectivement dans les registres ax, bx, cx, dx .
2- Multiplier 3 x 4 et placer le résultat dans bx,
3- Multiplier 2 et 5 et placer le résultat dans dx.

Votre commentaire ? pour multiplier 3 et 4 il faut charger 3 ou 4 dans ax et comme il est


occupé ………….je peux pas ou il faut le libérer

A travers ces 2 exemples, on répond au 2 premières questions. Voyant maintenant comment


fonctionne - t’elle ?

Licence électronique 3 Le microprocesseur


Département Electronique Faculté de Technologie Université Ferhat Abbas

Programme 2a :
1- Charger les valeurs 1234h et 5678h respectivement dans les registres ax, bx..
2- Sauvegarder temporairement la valeur contenue dans ax dans la pile.
Remarque : Explorer la liste des instructions et chercher l’instruction qui permet cela.
3- Charger la valeur contenue dans bx dans ax.
4- Charger la valeur sauvegardée temporairement dans la pile dans ax.

mov ax, 1234h


mov bx, 5678h
push ax
mov ax, bx
pop bx

Programme 2b :
5- Charger les valeurs 2,3,4,5 respectivement dans les registres ax, bx, cx, dx .
6- Sauvegarder temporairement les valeurs contenues dans ax et dx dans Stack.

Pourquoi effectuez- vous cette opération ? …la multiplication implique ax et dx , pour une
multiplication 16 bit et AX seulement pour une multiplication 8 bits.

7- Effectuer la multiplication des contenues de bx et cx.


8- Charger le résultat dans bx.
9- Continuer…….pour multiplier les contenues de ax et dx.

Votre programme 
mov ax, 2
mov bx, 3
mov cx, 4
mov dx, 5
push ax
push dx
mov ax, bx
mul cx
mov bx, ax
pop dx
pop ax
mul dx

Licence électronique 4 Le microprocesseur


Département Electronique Faculté de Technologie Université Ferhat Abbas

Comment s’effectue l’échange avec la pile :…Le dernier entrant, le premier sortant ( LIFO)
Last In First Out..

Conclusion générale: Vous résumez ce que vous avez compris

Licence électronique 5 Le microprocesseur

Vous aimerez peut-être aussi