Le processeur 8 bits
Pile
22/8/2019
L'ordinateur
L'ordinateur crée, manipule et transforme de l'information.
Peu importe l'architecture, les supports de matérialisation, la visualisation, l'exploitation ce qui compte c'est l'information.
L'information
Une information est un élément ayant une signification dans un environnement donné.
Il fait beau J'ai faim
L'ordinateur ne gère pas le signifiant, il n'en a aucune idée. Il va gérer des informations réduites à leurs plus simples expressions, un machin qui a deux états une bascule ou un bit.
Donc si j'ai une bascule qui représente "il fait beau", cette bascule aura deux états possibles "il fait beau" et "il fait pas beau".
Et l'idée de génie est de pouvoir regrouper ces bascules; si on en met deux pour signifier une information on va pouvoir avoir 4 états ou 4 valeurs.
| Il fait beau | Il pleut | Commentaire |
|---|---|---|
| Faux | Faux | |
| Faux | Vrai | |
| Vrai | Faux | |
| Vrai | Vrai | Est ce possible? |
| Bit 0 | Bit 1 | Valeur | Autre signifiant |
|---|---|---|---|
| 0 | 0 | 0 | Âne |
| 1 | 0 | 1 | Cheval |
| 0 | 1 | 2 | Mulet |
| 1 | 1 | 3 | Bardot |
On a vite compris que c'était bien de regrouper 8 bascules comme cela on peut compter de 0 à 255 et surtout enregistrer tous les caractères des alphabets occidentaux et quelques autres caractères de ponctuation. Donc on a un octet composé de 8 bascules ( "one byte with 8 bits").
La mémoire
On va utiliser plusieurs octets, des dizaines d'octets, des millions d'octets, et on les range dans un table pour pouvoir les retrouver plus facilement. C'est que l'on appelle la mémoire et les adresses varie généralement de 0 à un certain nombre particulier (ADDRESSE_MAX), on appelle cela la capacité d'adressage d'un ordinateur.
Donc à un instant donné, une information va se caractériser dans l'ordinateur par plusieurs choses
| Caractéristiques | Commentaire |
|---|---|
| L'adresse | Où est rangée la donnée dans la mémoire |
| Type | Mon information est vrai ou fausse, un nombre de 0 à 255, un nombre à précision limitée |
| Longueur | Mon information utilise une octet, deux ou dix |
| Signifiant | Qu'est ce que cela signifie? |
Instruction
Avec cette information on va faire des choses, comment additionner deux nombres ou concaténer deux chaînes de caractères.
On prend la vitesse du bateau 15 Nœuds On ajoute le Cap 165° On obtient l'âge du capitaine 180 ans
Que fait l'ordinateur?
L'ordinateur prend à une adresse (317) la valeur 15 L'ordinateur prend à un autre endroit (1242) la valeur 165 L'ordinateur range à un troisième endroit (728) la valeur 180
Ici l'ordinateur fait quelque chose qui n'a aucun sens, mais c'est ce qu'on lui a dit de faire et il le fait très vite. Il peut le faire des millions de fois par seconde.
Chaque opération élémentaire est définie par une instruction, et l'ordinateur exécute ces instructions les unes à la suite des autres séquentiellement..
Une instruction se caractérise par qui, quoi et comment.
| Qui | Les opérandes | La vitesse du bateau |
| Quoi | L'opération | Charger dans un endroit où on va pouvoir faire une addition |
| Comment | L'adressage | Dans la mémoire à l'adresse 317 |
Programme
Ces instructions sont regroupées dans un programme; il y a différents types d'instruction
- Charger ou ranger des informations en mémoire
- Effectuer une opération sur des informations
- Faire des comparaisons d'informations
- Changer de suite du programme
Et comme finalement ces instructions sont des informations élémentaires on va les ranger quelque part dans un tableau afin de pouvoir y accéder facilement.
Remarquons tout de suite que si on peut mettre un programme dans de la mémoire de données on pourra modifier ce programme facilement. Cela a un très gros intérêt, on peut par exemple passer d'un programme écrit dans un langage signifiant pour l'homme à un programme exploitable par l'ordinateur (la compilation) et lancer l’exécution de ce programme.
On évitera juste de modifier le programme que l'on est en train d’exécuter...
Processeur
Le processeur est donc le sous-ensemble d'un ordinateur qui exécute un programme et modifie les données.
On peut identifier trois unités fonctionnelles dans un processeur, l'unité de contrôle, l'unité d'adressage et l'unité de traitement.
L'unité de contrôle
L'unité de contrôle est chargée du traitement des instructions.
Ces instructions sont lus dans la mémoire ("fetch"), décodées et exécutées.
Ces instructions sont des mots binaires (comme tout le reste) qui définissent qui, quoi et comment. On a généralement un code d'opération (Load, Add,...), zéro, un ou plusieurs opérandes.
Cette unité comporte :
- le registre instruction : ce registre mémorise le code opération qui a été fourni par la mémoire de programme. Il a une taille de 8 bits dans le cas du processeur du STM8 et comprend le le champ opération - nature de l'instruction à exécuter – et le champ du mode d’adressage destiné à identifier l’opérande.
C'est le code opération qui, une fois décodé, permettra au séquenceur de dérouler les différentes séquences nécessaires à l'exécution de l'instruction.
C'est généralement à ce niveau que l'on différencie les architectures CISC des architectures RISC, les architectures CISC ("Complex Instruction Set COmputer")ont des codes d'instruction couvrant toutes les combinatoires d'opérandes ( 1, 2 ou 3 opérandes) combinées par le nombre de modes d'adressage, les architectures RISC vont limiter les instructions à celle ayant un seul opérande adressé, les autres opérandes seront implicites (l'accumulateur) d'où un nombre réduit d'instruction ("Reduced Instruction Set Computer").
- le décodeur : il décode les différents champs du code opération contenu dans le registre instruction afin de déterminer le type d'opération à effectuer ainsi que les techniques d'adressage de l’opérande. Les informations issues du décodage du code opération sont présentées au séquenceur. C'est un système de logique purement combinatoire.
- le séquenceur : en fonction du code opération décodé et éventuellement du résultat de l'exécution d'une instruction précédente le séquenceur détermine les séquences à dérouler afin d’exécuter l’instruction. Ainsi le séquenceur coordonne tous les échanges s'effectuant à l'intérieur du processeur ainsi que ceux s'effectuant entre le processeur et les autres composantes internes au microcontrôleur ou les circuits extérieurs. Le bus de données est alors utilisé. Chaque instruction est traitée par le séquenceur comme une succession d'opérations élémentaires dont il gère les enchaînements (les séquences) et qui concourent à son exécution. Le séquenceur peut être réalisé soit en logique câblée soit en logique microprogrammée suivant le type de processeur. La solution microprogrammée est adoptée dans les architectures CISC des processeurs complexes (16 et 32 bits) et permet, par sa souplesse, de faciliter la conception du séquenceur ===L'unité d'adressage=== L'unité d'adressage est chargée de la gestion des différentes adresses utilisées par le processeur. Cette unité comprend plusieurs éléments:
- le compteur ordinal ou CO ( "program counter" ou "PC") : encore appelé compteur de programme, contient l’adresse de l’instruction en cours d’exécution ou celle de l’instruction suivante. Ce compteur est incrémenté automatiquement après chaque décodage d'une instruction de la longueur de l'instruction (Code opératoire et opérande). Lors d'une rupture de séquence (saut ou déroutement, appel de sous-programme ou interruption) le compteur ordinal est rechargé avec une nouvelle adresse, celle où va s’exécuter la suite du programme. La taille du CO dépend de l'espace mémoire adressable du processeur, elle est de 24 bits pour le processeur du STM8 donc 2^4 * 2^10 * 2^10 soit 16 millions d'adresse.
- le pointeur de pile ( "stack pointer") : c'est un pointeur destiné à adresser une partie de la mémoire de données appelée la pile, celle-ci est de type LIFO (Last In First Out). Le rôle de ce pointeur est particulièrement important, il permet d'assurer la sauvegarde et la restitution de contexte d'exécution, ce qui est utilisé à chaque appel de fonction ou exécution de routine d'interruption. Son fonctionnement est particulier puisque à chaque que l'on pousse quelque-chose sur la pile il est modifié dans un sens et chaque fois que l'on tire quelque-chose de la pile il est modifié dans l'autre sens. Dans le cas du processeur du STM8 le pointeur de pile est décrémenté après chaque poussée en pile et incrémenté avant chaque tirage de la pile. La taille du registre du SP est de 16 bits pour les processeurs de la famille STM8, donc la capacité de la pile ne peut pas dépasser 2^6 * 2^10 = 64 K octets soit 65 536 octets. La taille de la mémoire vive, dans laquelle se trouve la pile, dépend des microcontrôleurs de la famille, au maximum cette mémoire aura une taille de 6 K octets. Pour le microcontrôleur choisi pour l’enseignement – STM8S105C6 – la taille de la mémoire vive est de 2 K octets.
- les index X et Y : ces 2 registres de 16 bits ont la fonction pointeur pour les données de l’espace mémoire de données au microcontrôleur. Ils constituent une composante essentielle de la technique d'adressage indexé. Le registre X intervient dans le cas de certaines opérations arithmétiques portant sur les opérandes de 16 bits.
- le Registre d’Accès Mémoire R.A.M : registre de 24 bits, valorisé transitoirement au moment d'accéder à une adresse mémoire. Ce registre est calculé en fonction du mode d'adressage et des opérandes. Ce registre n'est pas accessible par logiciel, il est implicite mais c'est bien lui qui définit les signaux sur le bus d'adresse; sa longueur est égale à la largeur du bus d'adresse et donc la capacité maximale d'adressage du processeur.
L'unité de traitement
L'unité de traitement est chargée d'exécuter tous les traitements arithmétiques et logiques sur les données. Elle comprend :
- une unité arithmétique et logique UAL ("Arithmetic Logic Unit - ALU") réalise l'opération arithmétique ou logique entre l’opérande contenu dans l'accumulateur A et l'autre opérande spécifié par l'instruction. Le résultat de l'opération est toujours mis dans l'accumulateur. L'ALU est constituée d'un système logique combinatoire qui est configuré en fonction des ordres envoyés par le séquenceur à la suite du décodage du code opération de l'instruction. L'ALU est caractérisée par la taille des données qu'elle peut traiter en une fois, soit 8 bits pour le STM8. La taille des données généralement traitées par l’ALU est une des caractéristiques techniques du processeur, et permet de définir une classification en processeurs 8, 16, 32 ou 64 bits; c'est aussi généralement la largeur du bus de données. Mais évidemment on peut avoir des exceptions comme des opérandes en 16 bits pour des multipltication traités par l'ALU, et des architectures particulières où ont peut lire des mots de 16 bits (largeur du bus de données) pour minimiser le nombre d’accès mémoire. Le STM8 a comme son nom l'indique une ALU et un bus de données d'une largeur de 8 bits. Ce processeur a néanmoins la possibilité de faire des opérations arithmétiques sur des opérandes plus longues par exemple sur 16 bits. Le principe est simple et repose sur l'utilisation de drapeaux particuliers, on fait une première addition sur les deux octets de poids fort, puis on additionne les deux octets de poids fort en rajoutant l'éventuelle retenue générée par la première addition. Les indicateurs d’états ou drapeaux ("flags") sont des variables booléennes qui sont valorisées en fonction du résultat de la dernière opération. Ces indicateurs sont regroupés dans un registre particulier de 8 bits appelé registre d'état : CCR ("Condition Code Register") pour ce processeur. Les traitements en multi-précision sont toujours possibles et se font alors par traitements successifs par l'ALU avec utilisation du drapeau de retenue ("Carry").
- l'accumulateur A est un registre de donnée qui est la destination de toute opération arithmétique ou logique, qui est aussi l'opérande implicite dans les cas d'un opérateur à deux opérandes. Comme il peut être source et destination d'une même opération, il est physiquement implémenté comme un "double registre" dans tous les processeurs 8 bits comme celui du STM8 -. Avant l'opération effectuée par l'unité arithmétique et logique l’accumulateur d’entrée contient l'un des 2 opérandes puis l’accumulateur de sortie contient le résultat. Ceci est rendu possible par l’existence de 2 registres physiques : 1 pour l’opérande et l’autre pour le résultat mais les 2 ont pour nom accumulateur. Sa taille est de 8 bits pour le STM8. - registre tampon : contenant du second opérande. Il n’a pas de nom permettant de l’identifier par les instructions mais il est la destination automatique du second opérande. Il a aussi une taille de 8 bits.
- le registre d'état du processeur [Condition Code Register ou CCR ] : ce registre de 8 bits regroupe 8 variables booléennes porteuses d’informations binaires concernant le processeur. Certaines informations appelées indicateurs d'état ou flags – 5 dans notre cas - sont positionnées par l'ALU suite au traitement des opérandes et apportent un complément d’information sur le résultat de l’opération contenu dans l’accumulateur. Ces indicateurs seront soit utilisés directement par l'ALU dans le cas de certaines opérations, comme les calculs en multi-précision, soit testés par le séquenceur lors de l’exécution des instructions de déroutements conditionnels. Structure du registre d'état du STM8 :
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| V | 0 | I1 | H | I0 | N | Z | CY |
- CY : indicateur de report ou "CARRY". Ce bit est positionné à 1 par l'ALU lorsque le résultat du traitement nécessite un bit de plus que la capacité de l'accumulateur. Il est utilisé pour les traitements en multi-précision. Dans le cas d’une soustraction c’est la retenue soustractive appelée "BORROW" avec BORROW =/CARRY
- Z : indicateur ZERO. Ce bit est positionné à 1 par l’ALU lorsque le résultat de l’opération est nul ou bien que le contenu de l’accumulateur est nul.
- N : indicateur NEGATIVE. Ce bit est positionné à 1 par l’ALU lorsque le MSB est à 1.
- I0 : INTERRUPT MASK LEVEL 0 : bit LSB du niveau de priorité logicielle des interruptions.
- H : indicateur HALF CARRY ou report auxiliaire, positionné par l'ALU lorsqu'il y a report du bit 3 vers le bit 4. Il est utilisé à l'occasion des opérations en BCD.
- I1 : INTERRUPT MASK LEVEL 1 : bit MSB du niveau de priorité logicielle des interruptions.
- V : indicateur OVERFLOW ou dépassement de capacité. Il n’est utilisé par le programmeur que lors d’opérations avec des valeurs signées. Il est positionné par l'ALU lorsque le résultat de l'opération est incompatible avec les valeurs des opérandes (le nombre de bits permettant de représenter le résultat étant insuffisant). Dans ce cas le résultat du calcul n’est pas exploitable. C’est un cas d’erreur. Pour tout complément consultez le chapitre 1 – Central Processing Unit – du RM0016 du site st.com.
Structure des instructions
L'instruction est destinée au processeur qui, avant de l'exécuter, doit la décoder. Elle se présente donc sous forme binaire car la technologie électronique actuelle des processeurs repose sur la mise en oeuvre de la logique binaire.
L'instruction contient toutes les informations dont le processeur a besoin pour pouvoir l'exécuter :
- le type d'opération
- l’identification des opérandes sources
- l'endroit où sera stocké le résultat L'ensemble de ces informations codées sous forme binaire s'appelle l’instruction machine. Dans cette instruction on distingue 2 parties :
- la première se présente sous forme codée – le code opération –
- la seconde (optionnelle) correspond à la partie opérande ( soit sa valeur soit son adresse).
Ce code opération est de longueur fixe pour un processeur donné. Il est de 8 bits pour les processeurs de la famille STM8 donc on maximum 256 types d'opération différents. Il est placé dans le registre instruction afin de pouvoir être décodé.
Le code opération, lui même est généralement divisé en plusieurs parties appelées champs. Chaque champ a un rôle précis et une longueur déterminée.
Généralement il y a :
- le champ opération contient le type d'opération à effectuer (exemples : addition, multiplication, transfert de donnée)
- le champ opérande précise la façon d'accéder à l’opérande Dans le cas de machine à plusieurs adresses (CISC) le champ opérande est découpé en sous-champs pour chacun des opérandes et sa longueur peut alors plus longue.
La décomposition de l'instruction en plusieurs champs s'appelle le format de l'instruction.
Exemple de format d'instruction:
| champ opérande | champ opération |
|---|---|
| 4 bits | 4 bits |
Le champ opérande précise le moyen d'accès à l'opérande. Celui-ci peut être soit contenu dans l'instruction soit être identifié par son adresse soit être identifié par un autre registre (les techniques d'adressage seront étudiées dans un autre chapitre).
Le champ opération définit l'opération à effecteur.
Par exemple les codes d'instruction du XOR et du ADD en accés immédiat et en accés mémoire long sont respectivement
| Opération | Accès | Code d'instruction |
|---|---|---|
| Add | Immédiat | 0xAB |
| Xor | Immédiat | 0xA8 |
| Add | Mémoire | 0xCB |
| Xor | Mémoire | 0xC8 |
A cause de la grande diversité des instructions il y a plusieurs formats pour les différents types instructions d'un même processeur, même pour un processeur RISC. Cette étude n’entre pas dans le cadre de ce cours.
Non seulement le nombre de champs n'est pas constant mais pour les processeurs CISC leur longueur non plus n'est pas constante. Par conséquent le décodeur d'instructions est plus complexe, ce qui est un des éléments justifiant leur appellation.
Étude de la structure des instructions du STM8
Le nombre de références mémoire ou adresses d’une instruction arithmétique et logique est une des caractéristiques du processeur. La notion de référence mémoire d’une instruction arithmétique et logique correspond à l’ (aux) opérande(s) qui se trouve(nt) en mémoire et que l’instruction devra chercher avant d’effectuer l’opération. Un processeur à une référence mémoire ou une adresse, comme c’est le cas pour le STM8, aura dans son champ opérande les informations permettant d’accéder à un seul opérande en mémoire.
Cet opérande peut être une constante, il se trouve alors dans l’instruction machine, il peut être accédé en mémoire ou par exemple accédé grâce à une adresse contenue dans un registre d'index.
ADD A, # $7A code machine : 0xAB et 0x7A (adressage immédiat) ADD A, $ 25 code machine : 0xBB et 0x25 (adressage direct) ADD A, (X) code machine : 0xFB (adresage indexé)
Il n'est pas nécessaire de préciser l'autre opérande puisque tous les traitements effectués par l'unité arithmétique et logique utilisent le contenu de l'accumulateur d’entrée comme opérande et produisent un résultat qui est mis dans l‘accumulateur de sortie.
A titre d’exemples les architectures 68K sont à 2 adresses et celles des architectures ARM sont à 3 adresses (cours de 3A).
La documentation du STM8 attribue les 8 premiers bits de l'instruction au code opération et le ou les octets suivants à l’opérande.
Il y a 4 tailles d'instructions pour le STM8, le codage nécessitant 1, 2, 3 et parfois 4 octets :
| code opération | |||
|---|---|---|---|
| code opération | octet additionnel | ||
| code opération | 1° octet additionnel | 2° octet additionnel | |
| code opération | 1° octet additionnel | 2° octet additionnel | 3° octet additionnel |
Le code opération sera toujours contenu dans le 1er octet.
Voici quelques exemples de format d'instruction.
Instruction d'addition de l'accumulateur avec un opérande rangé en mémoire vive
- ADD A, adresse (mode d'adressage direct court)
| 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | adresse de l'opérande sur 8 bits |
|---|
Le champ opérande sur 4 bits (1011b) indique que l’octet suivant est l’adresse de l’opérande.
Le champ opération sur 4 bits (1011b) indique une addition sans prise en compte de la retenue.
Les 8bits suivant définissent l'adresse de l'opérande sur 8 bits donc dans les 256 premiers octets de la mémoire.
L’instruction complète nécessite 16 bits.
Instruction d'addition de l'accumulateur avec un opérande identifié par sa valeur
ADD A, #valeur (mode d'adressage immédiat)
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | opérande sur 8 bits |
|---|
Le champ opérande sur 4 bits (1010b) signifie que l’octet suivant est la valeur de l’opérande.
Le champ opération sur 4 bits ( 1011b) signifie addition sans prise en compte de la retenue.
L’instruction complète nécessite 16 bits.
Instruction d'addition de l'accumulateur avec un opérande rangé en mémoire vive
ADD A, adresse (mode d'adressage direct long)
| 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | adresse de l'opérande sur 16 bits |
|---|
Le champ opérande sur 4 bits (1100b) indique que les 2 octets suivants sont l’adresse de l’opérande.
Le champ opération sur 4 bits (1011b) signifie addition sans prise en compte de la retenue.
L’instruction complète nécessite 24 bits.
En reprenant les mêmes types d’instructions mais en prenant en compte la retenue éventuelle (le code mnémotechnique devient ADC) le champ opération deviend alors 1001b au lieu de 1011b.
Dans le cas du STM8 le bus de données a une largeur de 8 bits et le mot mémoire est de 8 bits. Une instruction qui nécessite 2 octets comme dans certains exemples précédents occupera donc 2 adresses mémoires consécutives de la mémoire programme.
Contenu d'une partie de la mémoire de programme avec les 3 instructions précédentes
| adresse x + 7 | 5A | adresse de l’opérande |
|---|---|---|
| adresse x + 6 | 06 | adresse de l’opérande |
| adresse x + 5 | CB | code opération 3 ème instruction ADD A, $065A |
| adresse x + 4 | F3 | valeur de l’opérande |
| adresse x + 3 | AB | code opération 2 ème instruction ADD A, #$F3 |
| adresse x + 2 | 25 | adresse de l’opérande |
| adresse x + 1 | BB | code opération 1 ère instruction ADD A, $25 |
| adresse x | . . . |
Les adresses mémoires sont dans ce tableau de bas en haut, l'opérande d'une instruction suit le code instruction de l'instruction.
Exécution d'une instruction
En supposant qu'à l'adresse x + 4 du contenu mémoire ci-dessus la valeur de l'opérande ne soit pas F3 mais AB, comment le processeur fera-t-il la distinction entre la valeur AB du code opération et la valeur AB de l'opérande?
La distinction est faite grâce à l'utilisation d'une nouvelle variable : le temps.
L'unité de contrôle du processeur, dont on a dit qu'elle avait la charge de tout ce qui a rapport aux instructions, comporte un élément très important : le séquenceur. Celui-ci est piloté par une horloge dont la fréquence est une des caractéristiques du processeur et par conséquent du microcontrôleur. Le fonctionnement du séquenceur et sa constitution seront étudiés en 2A.
Sachant que le premier mot de l'instruction est toujours le code opération, lorsque celui-ci sera mis sur le bus de données par la mémoire de programme, le séquenceur l’orientera automatiquement vers son destinataire: le registre instruction.
L'information contenue dans le mot ou octet suivant pourra être soit une adresse, soit la valeur de l’opérande, soit l’instruction suivante (ceci dans le cas où la première instruction serait limitée à un code opération de 1 octet). Cette information sera alors orientée par le séquenceur vers le registre approprié du processeur.
Il en sera de même si l'instruction comportait un 3ème octet.
L'exécution d'une instruction nécessite donc plusieurs actions élémentaires exécutées les unes à la suite des autres en séquence. Certaines actions peuvent se dérouler en même temps lorsqu’il n’y a pas concurrence au niveau des éléments matériels mis en oeuvre.
Par exemple le compteur ordinal est incrémenté en même temps que le code opération est décodé.
Pour le déroulement décrit ci-dessous l'instruction correspond à une addition entre une valeur contenue dans l'accumulateur et un opérande se trouvant en mémoire à l’adresse $38.
|| ADD A, $38 |
On considère que cet exemple est représentatif de l’exécution d’une instruction du processeur du STM8. Contenu des mémoires programme et données :
|| . | mémoire programme | . | . | mémoire données
| Compteur | 8108 | 04 | . | 3A | A9 |
| Ordinal | 8107 | 38 | . | 39 | 0F |
| 8106 | 8106 | BB | . | 38 | B5 |
| . | 8105 | ... | . | 37 | 5 |
Une instruction précédemment exécutée a permis de mettre une valeur dans l’accumulateur.
Séquence de déroulement des actions de l'addition du contenu de l'accumulateur avec un opérande en mémoire :
- 1 : copie du contenu du compteur ordinal dans le registre d'accès mémoire - R.A.M - du processeur. le contenu du R.A.M définit les valeurs des états logiques présents sur le bus adresses
- 2 : opération de lecture du contenu mémoire programme (activation des signaux par le séquenceur)
- 3 : échantillonnage du bus de données et transfert dans le registre instruction
- 4 : décodage du code opération : détermination de l'opération à effectuer, comment accéder à l’opérande
- 5 : incrémentation du compteur ordinal afin qu'il contienne l'adresse de l'emplacement mémoire suivant.
- 6 : copie du contenu du compteur ordinal dans le registre d'accès mémoire. le contenu du R.A.M définit les valeurs des états logiques présents sur le bus adresses
- 7 : opération de lecture du contenu en mémoire programme (activation des signaux nécessaires)
- 8 : échantillonnage du bus de données et transfert dans le registre d'accès mémoire: c'est l'adresse de l'opérande soit $38
- 9 : incrémentation du compteur ordinal afin qu'il contienne l'adresse de l'emplacement mémoire suivant.
- 10 : le contenu du R.A.M définit les valeurs des états logiques présents sur le bus adresses
- 11 : opération de lecture du contenu en mémoire données (activation des signaux nécessaires)
- 12 : échantillonnage du bus de données et transfert dans le registre temporaire de l'ALU, c'est la valeur de l'opérande soit $ B5.
- 13 : réalisation de l'addition dans l'unité arithmétique et logique, le résultat de l'addition est alors mis dans l'accumulateur A et certains indicateurs du registre d'état du processeur sont positionnés. Si l’accumulateur contenait la valeur $51 sa valeur deviendra $06 et l’indicateur CARRY sera mis à 1, on peut également dire que l’indicateur CARRY est positionné CARRY indicator is. La valeur du compteur ordinal vaudra $8108 et pointera donc sur l’instruction suivante. Remarque : l'étape de rangement du résultat ailleurs que dans l'accumulateur - en mémoire par exemple - ne peut pas se faire au cours de la même instruction dans le cas du STM8. Ceci à cause de sa structure relativement simple ; il est alors nécessaire de prévoir une instruction supplémentaire de rangement en mémoire. L'analyse de la séquence ci-dessus montre que si l'instruction avait été une soustraction ou bien une fonction logique au lieu d'être une addition la quasi totalité des actions auraient été les mêmes. La généralisation de ce type d'analyse pour les autres instructions montre que l'on retrouve très souvent des séries d'actions communes à plusieurs instructions. Il est alors judicieux de regrouper ces actions de façon à limiter la taille du séquenceur. Par conséquent au lieu d'associer une séquence complète à chaque type d'instruction on a décomposé le traitement de l'instruction en une série d’opérations élémentaires. Ainsi l'exécution de chaque instruction correspond au déroulement d'une ou de plusieurs opérations élémentaires encore appelés cycles machine. Chaque instruction peut ainsi être caractérisée par le nombre et la nature des cycles machine nécessaires à son exécution. La décomposition de l'exécution de chaque instruction en cycles machine existe pour tous les processeurs. Le détail des actions et la durée de chaque cycle machine sont des caractéristiques importantes des processeurs et ont une forte incidence sur leurs performances. Le cycle que le processeur exécute toujours en premier est le cycle de recherche du code opération couramment appelé FETCH. C'est un cycle de lecture en mémoire programme. Il correspond aux actions 1 à 5 du déroulement présenté ci-dessus. Pour tous les processeurs il y a également des cycles machine de lecture de donnée et d'écriture de donnée en mémoire, ce sont les cycles les plus fréquemment exécutés. Ils se déroulent avec des variantes suivant les tailles de données et la taille des bus de données. La recherche de l'adresse de l'opérande - actions 6 à 9 - tout comme la lecture de l'opérande - actions 10 à 12 - correspondent à des cycles machine de lecture mémoire : le premier est un cycle de lecture en mémoire de programme et le second un cycle de lecture en mémoire de données interne (adresse sur 8 bits). Les 2 cycles sont similaires au niveau des principes d'échanges entre le processeur et la mémoire mais différents au niveau de l'adresse utilisée, de la nature de la mémoire (les signaux générés par le processeur pour de déroulement de ces cycles ne sont pas les mêmes) et de la destination de l'information recueillie sur le bus de données.
La recherche de performances au niveau vitesse d'exécution a conduit les fabricants à utiliser au maximum toutes les ressources du processeur notamment en faisant exécuter de plus en plus d'actions en parallèle. Ainsi il est possible qu'une addition des opérandes par l'ALU se fasse pendant que le processeur recherche le code opération de l'instruction suivante. Par contre une multiplication ou une division prennent un temps qui est chiffré par le fabricant. Il en découle qu'il n'est pas toujours évident de décomposer précisément l'exécution de l'instruction en cycles machine.
Au cours du déroulement de chaque cycle machine externe le séquenceur active différents signaux électriques destinés soit à commander les éléments internes du processeur soit à commander les circuits (dont les mémoires) qui vont échanger des données avec le processeur.
L'exécution d'une instruction apparaît donc comme une succession de cycles machine externes et internes dont le premier est toujours un cycle externe : celui de recherche du code instruction/opération en mémoire de programme. Les durées des différents cycles machine d'un processeur ne sont pas nécessairement égales.
En ce qui concerne le STM8 le fabricant indique, non pas en cycles mais en périodes horloge, le nombre de périodes nécessaires à l’exécution de chaque instruction. Ces informations sont nécessaires lorsqu’il est nécessaire de connaître avec précision la durée d’exéction des programmes.
Remarque : la façon dont est présenté le processeur du STM8 permet de comprendre le principe général de l’exécution des instructions. Cependant la réalité technique de ce processeur diffère de cette présentation. C'est une architecture appelée Harward c'est-à-dire comportant 2 bus de données: l’un de 32 bits pour les recherches d’instructions et l’autre de 8 bits pour les accès aux données, ce qui permet non seulement d’effectuer des actions en parallèle, mais en plus, grâce au système pipe line à 3 niveaux conduit à traiter jusqu’à 3 instructions en même temps.
Le détail de ceci n’est pas au programme de 1A mais sera étudié en 4A.
Performances du STM8S : 0,28 DMIPS