MEO - - Page 1 -
Structure du 68000
Cours de TSII – D.BOURE
1)Introduction:
Ce chapitre a pour objet la découverte des principaux mécanismes du langage-machine. On y découvrira
les caractéristiques du 68000, ses principes de fonctionnement, ses modes d'adressages...
Chacun devra à la suite de ce chapitre savoir analyser et comprendre une instruction 68000 en général.
Les premiers exercices réels pourront être abordés au cours de l'étude du chapitre...
2) Organisation interne du 68000
La figure ci-dessus montre l'organisation interne d'un microprocesseur (MPU Micro-Processing Unit). On
y distingue :
- une ALU (Aritmetic and Logic Unit)
- des registres internes
- une CU (control Unit)
Notre MPU dispose de 3 bus (ensemble cohérent de signaux):
- un bus de données ( 16/32 bits)
- un bus d'adresses ( 23/32 bits)
- un bus de commande
MEO - - Page 2 -
Le bus de données, bidirectionnel, sert à l'échange des informations entre le MicroProcesseur et son
environnement ( mémoire ou périphériques par exemple).
Le bus d'adresse sert à sélectionner l'endroit où se trouve une information qui doit transiter sur le bus des
données.
Le bus de commande transporte les différents signaux d'ordre et de synchronisation requis par le système.
3) Organisation de la Mémoire:
Si un microprocesseur est une formidable machine de calcul, il n'en présente pas moins de regrettables
défauts... Le plus grand d'entre eux étant son incapacité à mémoriser des informations nombreuses.
En effet, seuls les registres permettent à un microprocesseur de garder trace des résultats antérieurs, et
ceux-ci sont bien sûr insuffisants pour un traitement important... Ces registres sont cependant des
mémoires à très grande rapidité, inclus dans le processeur, et leur utilisation sera primordiale...
On va, pour pallier aux insuffisances du microprocesseur, utiliser des RAM externes, fourre-tout dans
lequel nous logerons:
- Nos programmes
- Nos données (Initialisées ou Non)
- Notre Pile
- Et encore bien d'autres sources d'ennuis et de collisions...
Cette division est purement formelle, et ces zones sont tellement identiques que le programmateur peut
très bien modifier un programme comme une zone de données, exécuter une zone de données comme un
programme ...
Sur un micro-ordinateur, on arrivera même à la gestion concurrente de plusieurs applications, avec
chacune une zone programme, une zone de données, une pile propre... Windows ou Unix fournissent des
exemples parfaits de ce qui vient d'être dit...
4) Séquencement d'une Instruction:
Essayons de décrire le fonctionnement du 68000 lors de la rencontre dans la mémoire désignée par le
registre PC (Program Counter) des mots hexadécimaux :
Le cycle d'exécution de cette instruction peut se décomposer en :
a) Lecture du code opératoire $21F9:
Ce code est analysé par le décodeur du 68000, pour en déduire quel type d'action il aura à exécuter, les
mots qui suivront ne pourront constituer que des paramètres de l'action. La découverte manuelle de la
signification de $21F9 ne peut se faire que par recherche dans un manuel de référence du 68000.
En binaire: $21F9 = % 00 10 000 111 111 001
Ce code a été volontairement décomposé en blocs compréhensibles pour en faciliter la lecture:
$ 21F9 00FC 0024 2400
00 =MOVE
10 =.L
000 111 =L'opérande Destination est une adresse mémoire sur 16 bits...
111 001 = L'opérande Source est une adresse mémoire sur 32 bits...
MEO - - Page 3 -
L'instruction à exécuter est donc entièrement décrite; il s'agit de :
Le séquenceur du 68000 sait donc désormais ce qu'il doit effectuer.
b)Lecture du mot suivant:
La valeur $00FC est mémorisée dans un registre tampon du bus de données... Aucune autre action n'est
entreprise par le CPU... C'est typiquement ce genre d'action qui ralentit un 68000 face à son grand frère le
68020 par exemple (Gestion 32 bits sur le bus des données) ou face à son concurrent le 80286 (Gestion 16
bits des adresses en mode réel)...
c)Lecture du mot suivant:
Ces 16 bits vont constituer les 16 bits de poids faibles de l'adresse opérande source. L'ensemble formé
avec les 16 bits précédemment lus est immédiatement transmis sur le bus des adresses.
d)Lecture de l'opérande Source:
Ou du moins de la première partie de cette opérande puisque la taille de celui-ci est de 32 bits... La valeur
lue est stockée dans un registre tampon du bus des données... La valeur présente sur le bus des Adresses
est automatiquement incrémentée de 2 unités.
e)Lecture de l'opérande source
Fin de cette lecture, la valeur 32 bits de l'opérande source est maintenant entièrement présente dans un
registre tampon du bus des données...
f)Lecture de la destination
Le séquenceur place à nouveau PC sur le bus des adresses, et provoque la lecture de l'adresse de la
destination. Cette valeur est immédiatement étendue à 32 bits et placée sur le bus des adresses. Notez que
PC est immédiatement incrémenté et pointe dès maintenant sur la prochaine instruction à exécuter.
g)Ecriture sur la destination
Le registre tampon est maintenant déchargé sur le bus des données, et les 16 bits de poids forts sont écrits
en mémoire. Le bus des adresses est incrémenté de 2 immédiatement...
h)Ecriture sur la destination
Les 16 bits de poids forts sont transmis à l'adresse marquée par le bus des adresses. L'instruction en cours
est donc entièrement terminée.
Cette instruction a été effectuée en 8 cycles, 6 cycles de lecture et 2 cycles d'écriture. Dans le cas de cette
instruction, aucun autre travail n'est effectué par le 68000 (contrairement par exemple à une addition ou à
une multiplication)...
Connaissant le temps d'exécution d'un cycle de lecture ou d'écriture, qui est de 4 cycles d'horloge, on peut
prévoir le temps d'exécution exact de l'instruction, soit ici 32 cycles Horloge.
Motorola préconise pour décrire ces temps, la notation :
MOVE.L $FC0024,$2400
32(6/2)
MEO - - Page 4 -
5) Structuration des Registres:
Les registres sont des lieux privilégiés pour le stockage des données, et sont partie intégrante du
microprocesseur. Leur accès est donc fort simple et très rapide.
Le transfert d'une donnée de 32 bits d'un registre vers un autre registre peut s'écrire:
et son temps d'exécution est de
Le seul cycle de lecture est celui du code opératoire lui-même ($2001), l'exécution elle-même est
quasiment instantanée...
Le 68000 possède un grand nombre de registres et permet donc une très grande vitesse, puisque la plupart
des algorithmes peuvent être traités en utilisant les registres uniquement. Cependant tous les registres du
68000 n'ont pas un fonctionnement strictement identique, et il est nécessaire d'en bien connaître les détails
afin d'éviter des erreurs de logique grossières...
D0.D1.D2.D3.D4.D5.D6.D7 - Les Registres de Données :
Les registres de données sont les plus souples que possède le 68000. Ils pourront
toujours être utilisés comme opérande à une instruction.
L'utilisateur peut à tout moment choisir le format de chacun de ces registres séparément
parmi 8, 16 ou 32 bits. La taille du registre détermine le format d'exécution de
l'instruction. Une addition correcte sur 16 bits peut provoquer un dépassement de
capacité en 8 bits.
Le format d'utilisation est précisé, non dans le registre lui-même mais dans le code
opératoire de l'instruction à exécuter. Si une instruction nécessite deux opérandes, il est
évident que le microprocesseur leur attribue la même taille...
Exemples:
A0.A1.A2.A3.A4.A5.A6 - Les Registres d'Adresses :
Les registres d'adresses A0 à A6 doivent normalement être utilisés comme pointeur sur la
mémoire ( c'est ce qui explique sur le schéma de la page 1, la liaison directe de ces
registres avec le bus des adresses ). Ils ne contiennent à priori pas de données mais plutôt
les adresses où sont situées les données .
Rien n'interdit cependant de les utiliser pour y stocker des données ou effectuer des
calculs, à condition de prendre en compte les spécificités des registres d'adresses.
En effet, les registres d'adresses ne supportent que les formats 16 et 32 bits. En format 16
bits, une extension de signe à 32 bits est systématiquement effectuée par le 68000.
Exemples:
4(1/0)
MOVE.L D0,D1
16 bits
8 bits
32 bits
MOVE.W D0,D1 D0 & D1 sont 16 bits
NOT.L D6 D6 est 32 bits
ADD.B D0,D1 D0 & D1 sont 8 bits
16 bits
32 bits
Extension
à 32 bits
MOVEA.L #$8000,A0 place $00008000 dans A0
MOVEA.W #$8000,A0 place $FFFF8000 dans A0
MEO - - Page 5 -
Notez l'utilisation de l'instruction MOVEA qui signifie Move To Adress Register. Cependant la plupart
des assembleurs acceptent l'écriture du MOVE standard, remplaçant ce dernier par un MOVEA lors de la
compilation.
De toute façon, il serait préférable d'utiliser ici l'instruction LEA (Load Effective Adress) :
A7 ou USP / SSP - Registre Pointeur de Pile :
Le registre A7 est un registre d'adresse, et il possède toutes les caractéristiques décrites au-dessus. Il peut
être utilisé exactement comme les registres A0 à A6 ...
Cependant ce registre présente la particularité d'être directement utilisé par le 68000, comme pointeur de
pile. Car notre bon 68000 a besoin de stocker de manière dynamique (Oh, que ce mot est ici important)
des informations liées à son fonctionnement, variables locales (parlons pour le moment de zone
temporaire de stockage), adresse de retour de sous-programme, passage de paramètres, interruption (vous
pouvez très momentanément négliger ce dernier point).
Ceci peut être résumé par le schéma suivant:
.....
Paramètre N
Paramètre N-1
......
Paramètre 2
Paramètre 1
Adresse de Retour
Variable Locale 1
Variable Locale 2
.....
Le dernier point (les interruptions), la prémonition de l'avènement du multitâche, une expérience
antérieure (le 6809) ont même poussé Motorola à intégrer 2 piles dans le 68000, USP et SSP qui gardent
toutes deux à un instant donné le nom de A7... C'est USP qui sera implicitement employé dans nos
applications...
La pile système du 68000 est de type FIFO (First In, First Out) par opposition aux piles de type LIFO
(Last In, First Out), et les informations y sont stockées de manière descendante (pour éviter au maximum
les collisions entre DATAs et pile)...
Le registre A7 peut et doit être utilisé par le programmeur, pour fournir des arguments à des fonctions,
réserver des espaces pour des besoins propres... Le maintien de la pile en état incombe bien sûr au
programmeur. On est prié de laisser ces lieux dans l'état... etc...
MOVEA.L #$8000,A0 LEA.L $8000,A0
1 / 9 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !