Chapitre 4
La pile et les exceptions
4.1 Introduction
Pratiquement le MC68000 peut être soit en état de fonctionnement normal
équivalent à l’exécution d’un programme donné, ou en état d’arrêt (Halt) qui
peut être par exemple la conséquence d’une erreur bus (double), ou …nalement
dans un état de traitement d’une exception.
Du point de vue dé…nition, l’exception est une généralisation de la notion
classique d’interruption pour inclure en plus des requêtes matérielles, les re-
quêtes de nature logicielle.
Avant de détailler le mécanisme d’interruption et son implémentation dans
le cas du MC68000, ce chapitre introduira tout d’abord la notion de mémoire
pile, ainsi que le processus d’appel de sous programme.
Des exemples d’applications seront exposés et traités dans le chapitre consa-
cré aux entrées-sorties numériques.
4.2 La notion de pile
Une pile est une zone mémoire de type LIFO (Last In First Out) pointée
avec un registre d’adresse (appelé pointeur de pile) dont le contenu est l’adresse
de la dernière donnée introduite.
Une opération d’écriture est précédée par une décrémentation du pointeur
pour assurer un empilement dans la mémoire.
En contre partie, une opération de lecture correspond à une incrémentation
du pointeur assurant ainsi un dépilement de la pile.
Dans le cas du MC68000 le pointeur de pile est le registre A7.
4.2.1 L’appel et le retour d’un sous programme
Deux instructions peuvent être utilisées pour un appel de sous programme :
49
50 CHAPITRE 4. LA PILE ET LES EXCEPTIONS
BSR etiquette ; identique a BRA
JSR < AE > ; identique a JM P
Dans les deux cas un branchement vers un sous-programme, implique la
séquence
8 d’opération suivantes :
< A7 [A7]-4 ; décrementation du pointeur pile
A7 P C ; sauvegarde de l’adresse de retour
:
PC adresse du sous-prog
Le A7 est décrémenté de 4 octets pour l’empilement de l’adresse de retour
dans la pile, et l’exécution du sous programme commence après le chargement
de son adresse de début dans le registre PC.
L’instruction RT S à la …n d’un sous-programme permet une récupération
de l’adresse de retour, ainsi qu’une incrémentation du pointeur A7 :
PC (A7) ; réstauration de l’adresse de retour
A7 A7 + 4 ; incrementation du pointeur pile
Fig4.1 :La pile et le p ointeur A7
Exemple
Un sous-programme qui calcule le carré d’un entier avec un passage d’argu-
ments et du résultat dans des registres de donnée (D0, D1)
4.2. LA NOTION DE PILE 51
Apres l’instruction BSR :
- A7 $5008-4=$5004 (décrémentation du pointeur pile)
- L’adresse de retour (PC+4=$100C), qui représente l’adresse de l’instruc-
tion suivante est sauvegardée dans la pile
- Le PC est chargé par l’adresse de début du sous-programme (PC $1012)
Apres l’instruction RTS :
- L’adresse que pointe le A7 est transférée au PC $100C (l’adresse de re-
tour)
- A7 $5004+4=$5008 (incrémentation du pointeur pile)
Fig4.2 :Contenu de la pile et du p ointeur A7
Passage d’arguments
Le passage d’arguments entre un programme et un sous-programme peut
etre e¤ectuée soit par valeurs ou adresses, en utilisant soit des registres, ou une
partie de la mémoire pile.
Exemple
Le sous-programme dans l’exemple suivant calcule l’expression S + x2 -5;
où la pile est utilisée pour une transmission de l’argument ’x’par valeur, et un
retour du résultat ’S’par adresse.
52 CHAPITRE 4. LA PILE ET LES EXCEPTIONS
Fig4.3 :Contenu de la pile et du p ointeur A7
Remarque
L’instruction PEA (push e¤ective address) permet une sauvegarde directe
d’une adresse dans la pile, avec une pré-décrémentation du pointeur A7. elle
remplace pratiquement l’instruction :
MOVE.l #adrS,-(A7)
Sauvegarde de registres dans la pile
Lors de l’appel d’un sous programme une sauvegarde temporaire du contenu
des registres (utilisés par ce S/P) dans la mémoire pile est possible.
L’instruction MOVEM est généralement utilisée vu quelle permet un trans-
fert multiple de registres avec di¤érent mode d’adressage :
W
M OV EM: liste de registres; AE
L
W
M OV EM: < AE >; liste de registres
L
Le mode indirect pré-décrémenté :
Ce mode est utilisé pour la sauvegarde multiple des registres dans la me-
moire.
4.2. LA NOTION DE PILE 53
par défaut l’ordre de sauvegarde des registre commence par les registres
d’adresse puis ceux de donnée (A7, A6, A5,....,A0, D7, D6,....,D0).
Le mode indirect post-incrémenté :
Ce mode est limité aux transferts de la mémoire vers les registres, et l’ordre
de restitution est :
(D0, D1,....,D7, A0, A1, A3,....,A7,).
Exemple
M OV EM:W D0; D4; =A1-A3;-(A0) , Les registres sauvegardés
en mémoire (pointée par A0) : A1,A2,A3,D0,D4
M OV EM:W (A5)+; A2-A4=D0; D7 , Les registres restitués de la
mémoire (pointée par A5) : A2,A3,A4,D0,D7
Fig4.4 :Etat initial et …nal de la pile et du p ointeur A7
Dans le cas des autres modes d’adressage, le transfert se fait à partir de
l’adresse spéci…ée vers les adresses mémoire croissantes.
Exemple
On considère l’exemple précédent (calcul de l’expression ) où la pile est
utilisée pour :
- Une transmission de l’argument ’x’par valeur.
54 CHAPITRE 4. LA PILE ET LES EXCEPTIONS
- Un retour du résultat ’S’par adresse.
- Une sauvegarde, et une restitution du contenu initial du registre de donnée
(D0).
Fig4.5 :Contenu de la pile et du p ointeur A7
4.3 La notion d’interruption
L’interruption est une procédure qui répond à un signal matériel externe
(IRQ : Interrupt Request), et qui permet d’interrompre le programme en cours
au pro…t d’un autre.
En d’autres termes, une interruption provoque le déroutement du processeur
de la tache en cours vers une autre qui peut être une tache d’urgence.
Dans un système à microprocesseur, l’implémentation matérielle d’interrup-
tion est équivalente à la mise en place d’une communication par poigné de main
4.3. LA NOTION D’INTERRUPTION 55
(handshaking). Car si le périphérique demandeur d’interruption active la ligne
de demande d’interruption, le microprocesseur doit signaler que la requête est
acceptée en activant une ligne de reconnaissance de la demande.
Fig4..6 : Schém a sim pli…é du m écanism e de base d’une interruption
Si l’interruption est acceptée, le microprocesseur doit impérativement :
- Terminer l’instruction en cours
- Sauvegarder l’adresse de retour (l’instruction suivante) ainsi que l’état
des di¤érents indicateurs (‡ags) a…n de pouvoir continuer correctement la tache
une fois le programme relatif à l’interruption terminé.
- Déterminer et charger dans le registre PC (program counter) l’adresse
du sous programme d’interruption.
Ainsi dé…nie la gestion des interruptions pose un ensemble de problèmes,
dont le premier est la détermination de l’adresse du sous programme d’interrup-
tion, et le second est relatif à la gestion de la priorité dans le cas où plusieurs
sources d’interruption sont possibles.
4.3.1 Les interruptions du MC68000
Dans le cas du MC68000, et tel qu’il a été décrit dans le premier chapitre,
la ligne de requête d’interruption est remplacé par trois pins ( IP L0 -IP L2 )
56 CHAPITRE 4. LA PILE ET LES EXCEPTIONS
qui servent en outre à la gestion matérielle de la priorité entre les di¤érents
demandeurs.
Fig4.7 : Exem ple d’un circuit de gestion des interruptions du M C 68000
Pratiquement dans un système à base du MC68000 une demande d’inter-
ruption suit un ensemble d’étapes :
Etape 1 :
Le périphérique demandeur d’interruption signale sa requête par le dépôt de
son niveau de priorité (complément à 1) sur les trois pins (IP L0 -IP L2 ). Par
conséquent, un circuit logique encodeur de priorité est su¢ sant pour assurer
à la fois la prise en compte de la demande d’interruption ainsi que la gestion
matérielle de la priorité entre les di¤érents circuits périphériques.
Etape 2 :
La requête d’interruption est prise en considération uniquement si le niveau
de priorité déposé sur ( IP L0 -IP L2 ) est supérieur a celui de la tache en cours
(les bit du masque d’interruption (I0-I1-I2) du registre d’état SR).
Si la condition est véri…ée, le microprocesseur dépose le niveau de priorité sur
la ligne d’adresse A1-A2-A3), et passe au mode superviseur (bit S=1, et FC0 -
FC1 -FC2 =111). La combinaison de ces signaux permet la génération des signaux
de validation des requêtes d’interruption (IACK : Interrupt acknowledge).
La valeur du masque d’interruption (I0 -I1 -I2 ) est modi…ée suivant le niveau
de priorité de la nouvelle tache validée.
Etape 3 :
Sauvegarde du contenu du registre PC (32 bits), et du registre d’état SR (16
bits) dans la pile.
4.3. LA NOTION D’INTERRUPTION 57
Etape 4 :
Détermination de l’adresse du sous programme d’interruption relatif à la
requête validée.
L’ensemble des adresses de sous-programmes d’interruption sont stockés en
mémoire dans une table nommé la table des vecteurs d’exceptions.
L’instruction RTE à la …n du sous-programme d’interruption permet une
récupération des valeurs du PC, et du SR stockées dans la pile.
Cette restitution permet une continuité normale de l’exécution du programme
qui était déjà en cours avant l’interruption.
4.3.2 La table des vecteurs d’exceptions
Dans un système à base du MC68000 la table des vecteurs d’exceptions est
une zone mémoire ou sont stockées les adresses de début des di¤érents sous-
programmes d’interruption.
Cette zone mémoire occupe le premier K octets de l’espace mémoire super-
viseur.
Pour déterminer l’adresse de la tache à exécuter, le microprocesseur a besoin
uniquement du numéro de vecteur pour identi…er l’adresse de début du sous
programme.
On distingue di¤érents types de sources d’interruptions :
- Les interruptions système : telles que le RESET, l’erreur bus, ou la
violation de privilège.
- Les interruptions logicielles (TRAP #n) : dont les numéros de vecteur
varient de 32 à 47.
- Les interruptions auto-vectorisées :
Dans ce cas le microprocesseur calcule le numéro de vecteur à partir du
niveau de priorité du périphérique (numéro de vecteur= niveau de priorité+24),
et par conséquent ce type d’interruption occupe les numéros de vecteur de 25 à
31.
Cette approche est adoptée par Motorola pour permettre un interfaçage
facile du MC68000 avec les circuits périphériques (auto-vectorisés) conçus ini-
tialement pour les microprocesseurs 8 bits du type : 68xx.
Une interruption est considérée auto-vectorisée si le périphérique accom-
pagne sa requête par activation du signal V P A .
58 CHAPITRE 4. LA PILE ET LES EXCEPTIONS
Tab4.1 :La table du vecteur d’exceptions du M C68000
- Les interruptions utilisateur :
Si lors de la requête le signal V P A n’est pas activé, alors l’interruption
est non-auto-vectorisée, et par conséquent le périphérique dépose un numéro de
vecteur sur le bus de donnée (D0-D7) et active le signal DT ACK .
Les interruptions utilisateurs occupent les numéros de vecteur de 64 à 255.
Multiplié par 4, un numéro de vecteur donne l’adresse où est stockée l’adresse
de début du sous-programme d’interruption.
- Si une interruption de niveau trois 3 est reçue avec une activation du si-
gnal V P A , alors l’interruption est auto-vectorisée (numéro de vecteur=3+24=27),
et par conséquent le PC reçoit les 32 bits à partir de l’adresse mémoire (27x4=108=$06C).
- Si l’interruption est de niveau trois 3 (sans l’activation de V P A ) avec
un dépôt de la valeur 65 sur les lignes de donnée D0-D7, alors l’interruption est
4.4. EXERCICES 59
vectorisée (numéro de vecteur =65), et par conséquent le PC est chargé par le
contenu mémoire à partir de l’adresse (65x4=260=$104).
- Si au cours de son fonctionnement normal, le microprocesseur exécute
l’instruction TRAP#02, alors une interruption logicielle se produit avec le bran-
chement vers une adresse (le nouveau contenu du PC) qui est la valeur stockée
à partir de $084
4.3.3 Le traitement du RESET
Le RESET (la réinitialisation) est l’exception du niveau le plus élevée (7),
est par conséquent elle présente une interruption non-masquable.
Pratiquement le reset du MC68000 est réalisé par une mise à zéro simultanée
des pins ( RESET , HLT ) pendant au moins 100ms (le processus est déjà
expliqué dans le chapitre 2 -Fig 2.7).
En plus du passage au mode superviseur (bit S=1), cette interruption par-
ticulière provoque :
- Le chargement du pointeur pile A7 avec les 32 bits de l’adresse mémoire
$0000 (le numéro de vecteur 0).
- Le chargement du compteur programme PC avec les 32 bits de l’adresse
mémoire $0004 (le numéro de vecteur 1), qui présente l’adresse de début du
programme.
Remarque
La pin RESET du MC68000 est une ligne bidirectionnelle (à collecteur ou-
vert), et l’instruction ’RESET ’provoque sa remise à zéro pendant 124 periodes
d’horloge, réinitialisant ainsi les circuits périphériques sans que le microproces-
seur ne soit a¤ecté.
4.4 Exercices
Exercice 1 :
Ecrire un programme qui calcule l’expression :
S=A2 +B2 +C2
Sachant que A, B, et C sont trois nombres signés codés sur 16 bits et rangés
en mémoire respectivement aux adresses adra, adrb, et adrc
Le résultat S est sauvegardé dans le registre D5
Exercice 2 :
Développer un programme qui calcule l’expression :
S=A3 +B3 +C3
Sachant que A, B, et C sont trois nombres signés codés sur 8 bits et rangés
en mémoire respectivement aux adresses adra, adrb, et adrc