Cours d Informatique Industrielle

Cours d Informatique Industrielle en pratique
...
2° Eléments de base d’un calculateur numérique
La figure suivante représente schématiquement la structure d’un calculateur numérique, où l’on peut voir ses différents éléments de base :
Figure n° 1 : Eléments de base d’un calculateur numérique
→ Le microprocesseur, appelé souvent Unité Centrale « UC ». C’est le cerveau du calculateur numérique, il sera étudié en détail par la suite.
→ L’unité de mémoire, comprenant aussi bien de la mémoire vive « RAM » que de la mémoire morte « ROM, EPROM, ... ». La section de la mémoire vive contient une ou plusieurs puces « LSI : Large Scale Integration » montées de manière à réaliser la capacité de la mémoire prévue. Cette section reçoit le programme et les données, ces derniers étant modifiés au fur et à
Support de Cours sur l’Informatique Industrielle (partie n° 1), Professeur M. TAHIRI, ENIM - Rabat (Maroc) page : 3 mesure que se déroule le traitement. Cette section sert également à la mémorisation des valeurs intermédiaires et des valeurs finales des calculs réalisés pendant l’exécution du programme.
La section de la mémoire morte comprend aussi une ou plusieurs puces « LSI » qui contiennent les instructions et les données inaltérables, par exemple les instructions du programme qui explore sans arrêt le clavier ou les données d’une table « ASCII » nécessaire pour sortir les informations sur un écran ou sur une imprimante.
→ L’interfaçage Entrée/Sortie est constitué de deux modules : module entrée et module sortie.
Le module d’entrée contient tous les dispositifs servant à prélever des informations et des données de l’extérieur du calculateur et à les transférer dans sa mémoire : c’est par cette unité que l’on introduit les programmes, les données avec un dispositif extérieur comme le clavier, les interrupteurs, les unités de disquettes ou de disques durs, des Convertisseurs Analogiques Numériques « CAN », etc.
Le module de sortie, regroupe tous les éléments que l’on a prévu pour transférer des données et des informations du calculateur vers le monde extérieur. Ces dispositifs de sortie reçoivent leurs ordres de l’unité de commande pour envoyer des données gardées en mémoire ou des résultats calculés par l’Unité Arithmétique et Logique « UAL » vers l’extérieur. Parmi les exemples d’éléments de sortie, nous pouvons citer les différents afficheurs, les différents voyants, les écrans de visualisation, les imprimantes, les unités de disquettes ou de disques durs, des Convertisseurs Numériques Analogiques « CNA », etc.
→ Un bus de données, permettant les transferts d’informations sur un faisceau de plusieurs conduc- teurs parallèles. Le nombre de fil est l’une des caractéristiques essentielles de l’UC. En principe, la largeur du bus de données est égale à la taille des mots manipulés par le microprocesseur (8 bits, 16 bits, ...). Le bus est unidirectionnel pour les trois liaisons suivantes :
Mémoire Morte → Microprocesseur, Microprocesseur → Unité de Sortie,
Unité d’Entrée → Microprocesseur et bidirectionnel pour la communication du microprocesseur avec la mémoire vive.
→ Un bus d’adresses, est aussi un ensemble de conduits parallèles unidirectionnel permettant de pointer toutes les cases mémoires adressables par le calculateur numérique. Le nombre de lignes de ce bus détermine la taille maximale de la mémoire. Si par exemple ce nombre est de 16, le champ mémoire qu’on peut adresser est de 64 Kilo Octets.
→ Un bus de commande et de contrôle bidirectionnel, comportant :
- Des lignes qui permettent à l’UC de spécifier à la RAM ou aux ports d’entrée et de sortie si elle veut faire une écriture ou une lecture.
- Des lignes utilisées par l’UC pour répondre aux périphériques, par exemple : acceptation d’une demande d’interruption ou d’un accès direct mémoire, ...
N.B. Le nombre de lignes dépend du type de microprocesseur utilisé !
3° Définition et évolution des microprocesseurs
Les microprocesseurs sont parmi nous ! Apparus vers les années 70, les microprocesseurs « ìP » ont rapidement envahi presque tous les domaines. Ils sont utilisés actuellement dans des millions de systèmes : les terminaux bancaires, les instruments de mesure, les lecteurs de disques compactes, les magnétoscopes, les pompes à essence, les appareils électroménagers, ..., sans oublier les microordinateurs et des gros systèmes informatiques.
Un µP est généralement une puce intégrée programmable renfermant tous les circuits de l’unité de commande et de l’unité arithmétique et logique. On l’appelle souvent, le cerveau du calculateur numérique car c’est lui qui se charge des fonctions suivantes :
→ Fournir les signaux de synchronisation et de commande à tous les éléments du calculateur. → Prendre en charge les instructions et les données en mémoire.
→ Transférer les données entre la mémoire et les dispositifs d’Entrée/Sortie et vice versa. → Décoder les instructions des programmes.
→ Effectuer les opérations arithmétiques et logiques correspondant aux instructions.
→ Réagir aux signaux de commande produits par les E/S comme le signal d’initialisation (Reset), les signaux correspondant aux interruptions, ...
...
Etude de trois microprocesseurs de la famille Motorola 4.1 Le microprocesseur 6802
Le ìP 6802 de Motorola est un processeur 8 bits conçu en technologie N-MOS. Il est tout à fait compatible TTL et il est encore utilisé sur certains systèmes. Il est né deux ans après le 6800, ce microprocesseur intègre sur le même circuit une mémoire RAM de 128 Octets dont les 32 premiers Octets peuvent être sauvegardés en mode faible consommation, par pile. Tous les registres internes (qui sont de l’ordre de six) sont analogues à ceux du 6800, ce qui implique même jeu d’instructions (72 instructions) et même mode d’adressage.
4.2 Le microprocesseur 6809
Le ìP 6809 est un processeur 8 bits de haute gamme, dont l’organisation interne est orientée 16 bits. Il est tout à fait compatible au niveau source avec les programmes écrits pour le 6800 ou le 6802 et il est conçu en technologie N-MOS. Il existe deux versions de ce processeur, le 6809 (avec horloge interne) et le 6809E (avec horloge externe). Leur brochage diffère ainsi que leurs signaux mais le jeu d’instruction est identique. Dans ce polycopié, nous allons étudier le 6809.
...
4.2.2 Architecture interne
Les éléments essentiels constituant le µP 6809 sont : ~ Un bus de données, bidirectionnel de 8 bits.
~ Un bus d’adresses, de 16 conduits monodirectionnels.
→ Un bus de contrôle et de commande, gérant les signaux suivants : R/W, MRDY, IRQ, NMI, FIRQ,FIRQ, Xtal, Extal, Reset, Halt, DMA/BREQ, NMI, BA, BS, E et Q.
D’autre part, le microprocesseur 6809 est composé de neuf registres internes que nous allons décrire ci dessous (voir figure n° 3).
→ Les accumulateurs A et B sont deux registres de taille 8 bits jouant des rôles identiques, à part pour les deux instructions ABX et DAA.
→ Le double accumulateur D est en fait la concaténation des deux registres A et B, l’accumulateur A représentant les poids forts et B les poids faibles. L’accumulateur D dispose d’instructions spécifiques : addition, soustraction, comparaison, etc. permettant de travailler directement sur 16 bits.
→ Le registre DP (Direct Page) : est un registre 8 bits. Il forme la partie haute de l’adresse à pointer dans le cas d’un adressage direct. Il est automatiquement remis à zéro par un Reset.
→ Les registres d’index X et Y : Ils sont de taille 16 bits. D’autre part, ils permettent d’adresser tout l’espace mémoire avec en plus la capacité d’être pré-décrémenté ou post-décrémenté (ce qui facilite le traitement de variables en tables).
16 bits
Registres programmables
CCR
Registre d’état
Figure n° 3 : Description des registres internes du µP 6809
→ Le compteur programme (Program Counter - PC) : est un registre de 16 bits. Il peut pointer sur toutes les cases mémoires. Il contient l’adresse de la prochaine instruction à exécuter.
Pour vos applications, il faut l’initialiser à l’adresse de départ du programme à exécuter.
→ Les pointeurs de pile U et S : Ce sont deux registres 16 bits qui fonctionnent tous deux identiquement. Ils opèrent en mode « dernier entré → premier sorti ». Ces deux registres peuvent à l’occasion servir de registre d’index avec la totalité des possibilités de X et Y. Le registre S (System) est utilisé par le 6809 pour toutes les opérations de sauvegarde en cas d’interruption ou de saut à un sous-programme (adresse de retour). Le registre U (User) est entièrement réservé à l’utilisateur.
→ Le registre d’état (Code Condition Register - CCR) : Ce registre définit à tout instant l’état du ìP résultant d’une instruction. Il est composé de 8 bits jouant chacun un rôle important pour les instructions de sauts ou de branchements conditionnels, ... :
« C » Carry : Ce bit prend la valeur 1 chaque fois que le résultat d’une instruction arithmétique ou logique dépasse 8 bits, c’est à dire nous avons une retenue. On peut considérer cette retenue comme le 9ème bit pour les accumulateurs A et B.
N.B. « C » reste à zéro dans les cas contraires !
« V » Overflow : C’est un bit de débordement. Il est mis à 1 si le résultat d’un complément à 2 déborde : c’est à dire dépasse l’octet. Sinon, il reste à 0.
« Z » Zero C’est un bit qui indique simplement si le résultat d’une instruction ou d’une opération est nul. Dans ce cas, il est mis à 1. Pour tout autre cas, il est mis à zéro.
« N » Negative : C’est un indicateur de signe. Il est positionné à 1 si le résultat d’une instruction ou d’une opération est négatif. Sinon, il reste à 0.
« I » Interrupt : C’est un indicateur d’interruption. Il est positionné, en général, par le programmeur sauf quelque fois sur initiative du microprocesseur. Il s’agit du masque pour la prise en compte des demandes d’interruption masquables : IRQ. Il sera automatiquement positionné à 1 si une demande d’interruption IRQ ou NMI.
« H » Half Carry : C’est un indicateur de demi-retenue. Lors d’une opération, le ìP traite les octets bit par bit. Si en traitant le 4ème bit de l’octet, il doit faire une retenue vers le bit 4. Il a l’obligeance de nous avertir en mettant H à 1.
N.B. Cet indicateur est exploité par l’instruction « DAA » (Decimal Adjustment of Accumulator A) pour formater en code BCD des additions de nombres BCD.
« F » (FIRQ mask) Ce bit conditionne le traitement de la ligne d’interruption FIRQ. Si F = 1, les interruptions seront masquées. Il est à zéro après un Reset et dans ce cas, FIRQ est dévalidée. Si l’utilisateur le force à 1, FIRQ est traitée.
N.B. Cette indicateur est positionné également par : NMI et SWI !
« E » (Entire flag) Ce bit nous renseigne sur le nombre de registres rangés dans la pile. Il est utilisé par l’instruction RTI pour déterminer le nombre d’octets que la pile doit restituer.
→ L’unité arithmétique et logique (Arithmetic and Logic Unit - ALU) : C’est l’organe le plus complexe du ìP. Son rôle est d’effectuer les opérations arithmétiques et logiques sur les données qui lui sont fournies par ses entrées. Parmi ces opérations, nous pouvons citer les logiques (ET, OU, AND, NAND, NOR, ...), les opérations arithmétiques (addition, soustraction, ...), les opérations de traitements particuliers (différents décalages, tests, ...), etc.
→ Le bloc de décodage d’instruction et de contrôle : C’est ce bloc qui génère les microcommandes propres à chaque instruction à exécuter, c’est à dire une fois que l’instruction se trouve dans le registre d’instruction, ce bloc se charge du décodage et de la génération des signaux internes et externes correspondant à cette instruction.
4.2.3 Différents modes d’adressage
Le ìP 6809 possède 59 instructions ‘de base’. Cela peut paraître faible, mais combinées aux différents modes d'adressage, elles offrent 1464 possibilités. Signalons au passage qu’une instruction comporte de un à quatre octets. Généralement, le premier octet indique l'action à effectuer, les suivants précisent les opérandes ou sur quelques registres cette action agira. Dans ce qui suit, nous allons présenter, succinctement, quelques modes d’adressage correspondant à ce microprocesseur.
→ Adressage inhérent ou implicite : Le code opération contient toute l’information nécessaire à l’exécution de l’instruction. Les instructions correspondant sont codées :
- soit sur un seul octet, exemple : ABX, ASLA, RORA, NEGA, COMA, DEÇA, ... - soit sur deux octets, exemple : SWI2, TFR, PSHS, PULU, CWAY, ...
Exemples : CLRA, initialisation de l'accumulateur A par $00 (figure 4) INCB, incrémentation de 1 de l'accumulateur B. AAX, addition de l'accumulateur A au registre X.
Figure n° 4 : Exemple d’utilisation du mode d’adressage inhérent pour le µP 6809
→ Adressage immédiat : Dans ce mode d’adressage, le code opératoire est suivi d’une valeur qui est l’opérande de l’instruction (sur un ou deux octets). Ceci permet de charger les registres internes du µP avec la valeur de l’opérande. Il existe trois types d’instructions dans ce mode d’adressage.
Exemple : LDA #$80, Chargement de A avec la valeur hexadécimal 80
Figure n° 5 : Exemple d’utilisation du mode d’adressage immédiat pour le µP 6809
Le symbole « $ » précise que la donnée est en hexadécimal. Pour les instructions LDr (r : registre quelconque), la valeur à charger dans le registre doit être du même type que l’accumulateur (8 bits pour les accumulateurs A, B et 16 bits pour les registres X, Y, U, S et D). Ce type d'adressage permet d'initialiser les registres internes du microprocesseur.
N.B : Ces instructions peuvent atteindre quatre octets comme LDS (Chargement du pointeur de Pile par avec le contenu mémoire) ou CMPU (Comparaison mémoire avec le pointeur de Pile).
→ Adressage direct : Ce mode d’adressage présente l’avantage de ne nécessiter que 2 octets pour avoir accès à des données situées sur l’ensemble de l’espace mémoire du µP. Le premier octet définit le code opératoire, le second représente les 8 bits de poids faibles de l’adresse effective dont les 8 bits de poids fort se trouvent dans le registre de page du µP
(DPR). Il suffit donc d’initialiser le registre de page (DPR) pour pouvoir travailler en adressage direct sur 256 octets de la page choisie ; au delà, il faut de nouveau accéder au DPR. A la mise sous tension, le registre de page est mis à zéro. On aura donc accès aux 256 octets de la page 0. Il existe deux types d’instructions dans ce mode d’adressage. On notera que l'adressage direct sera spécifié par le signe « < » placé devant l'opérande, dans la syntaxe assembleur.
Figure n° 6 : Exemple d’utilisation du mode d’adressage direct pour le µP 6809
Exemple : Si le registre de page vaut $D3 : l'instruction LDA <$42 chargera l'accumulateur « A » par le contenu de la case mémoire $ D342 qui est $7F.
NB : Ce mode présente l'avantage d'être exécuté rapidement
→ Adressage étendu : Dans ce cas, le champ adresse qui suit l’instruction contient l’adresse effective sur deux octets, ça permet d'atteindre toute la mémoire. Il existe deux types d’instructions dans ce mode d’adressage.
Exemple : Charger l'accumulateur A avec la valeur hexadécimal $F5 qui est le contenu de l'adresse $15CD (LDA $15CD ou LDA > $15CD).
Figure n° 7 : Exemple d’utilisation du mode d’adressage étendu pour le µP 6809
Autres exemples :
LDA $ 1000 → charge A avec le contenu de l'adresse $ 1000
SBCB $ 29D0 → soustrait à B le contenu de l'adresse $ 29D0 et le contenu du bit C de CCR CMPX $ 4800 → compare X au contenu de $ 4800-$ 4801
→ Adressage relatif court : Ce mode d’adressage est réservé pour les instructions de branchement qui sont d’une longueur de 2 octets. Le premier octet détermine le code opératoire qui spécifie le type de branchement en même temps que le test correspondant. Le deuxième octet correspond au déplacement qui est soit positif ou négatif : il est stocké sous forme binaire d’un nombre en complément à 2 de 8 bits dont la valeur décimale se situe entre -128 et +127. Une instruction de branchement est toujours précédée par une opération qui peut s'assimiler à un test. Le résultat de cette opération affecte 0 ou 1 sur un ou plusieurs bits du registre CCR. Le branchement se fait, ou se fait pas, suivant l'état 0 ou 1 d'un ou plusieurs bits du registre codes conditions (CCR).
→ Adressage relatif long : Ce mode d’adressage est identique au précédent. Les instructions sont codées sur 4 octets, les 2 premiers déterminent le code opération. Les 3ème et 4ème octets correspondent à la valeur signée du déplacement (le déplacement est codé sur 16 bits : la valeur décimale est comprise entre -32 768 et +32 767).
Exemple : Comparer le contenu de l'accumulateur A avec le contenu de l'emplacement mémoire $2000. S'il y a égalité entre les deux contenus, exécuter un branchement à l'adresse $52C9 (étiquette SAUT), sinon continuer le programme. En assembleur il faut :
Donner une étiquette : SAUT EQU $52C9. Puis, écrire que le branchement doit se faire s'il y a égalité de deux contenus, après comparaison : CMPA $2000 BEQ SAUT
Figure n° 8 : Exemple d’utilisation du mode d’adressage relatif pour le µP 6809
→ Adressage indexé : Dans ce mode d’adressage, l’adresse effective/absolue de l’opérande s’obtient en faisant la somme entre un déplacement (offset) associé au code opération et une base qui est contenue dans l’un des registres suivants : Index (X ou Y), Pointeur de pile (U et S) ou Compteur ordinal (PC).
Adresse Effective = Base + Déplacement
Enfin ce mode d'adressage permet aussi la pré-décrémentation et la post-incrémentation simple ou double. Ca permet de travailler sur des emplacements mémoires adjacents, possibilités intéressantes pour le traitement des tables de données.
→ Adressage indexé (Déplacement Nul) : C’est le fonctionnement le plus simple de ce mode d'adressage. Le registre d'index contient l'adresse effective de l'octet à manipuler, Exemple :
LDA 0, X → Charge A avec le contenu de l'adresse pointée par la valeur de X.
LDA , X → Charge A avec le contenu de l'adresse pointée par la valeur de X.
→ Adressage Indexé (avec auto-incrémentation) : Dans ce mode, l’incrémentation du
Registre d’Index aura lieu après l’exécution de l’opération, Exemple :
LDA , X+ Charge l’Accumulateur A avec le contenu de l'adresse $ 1000, mais IX contiendra $ 1001 après l'instruction terminée.
LDD , X++ Charge le Registre D avec les contenus des deux cases d’adresses adjacentes : $ 1000 & $ 1001 et incrémente deux fois IX après, donc IX = $ 1002.
→ Adressage Indexé (avec auto-decrémentation) : Dans ce mode, le contenu du Registre d’Index est décrémenté avant de pointer l’adresse effective, Exemple :
Si le Registre d’Index IX contient $ 1000, LDB,-X Commence par décrémenter le
Registre IX. Donc IX = $ 0FFF et charge l’Accumulateur B avec le contenu de $ 0FFF
N.B Le travail en auto-incrémentation/décrémentation simple facilite le traitement de tables de données sur 8 bits et le double de tables sur 16 bits.
→ Adressage Indexé (avec un déplacement constant) : Le post-octet définit la puissance du déplacement par le positionnement de son bit B7.
B7 = 0 Le déplacement est codé sur 5 bits (B0 - B4) et sera additionné en valeur algébrique au registre d'index avant le pointage de l'adresse effective.
B7 = 1 Le déplacement est stipulé par un ou deux octets qui suivront le post-octet.
Tableaux n° 3 : Tableau de correspondance relatif au post-octet
Les bits B5 et B6 du post-octet désignent le registre devant servir d'index.
Dans le cas d’un déplacement sur 8 bits, les bits B0-B3 du post-octet vaudront % 1000 et dans le cas d'un déplacement sur 16 bits ils vaudront % 1001, exemples :
LDA 4, X → Charge A avec le contenu de l'adresse X+4
LDA $05, X+ cette instruction va charger l'accumulateur A en mode indexé puis auto-incrémentation de 1, du contenu de X (voir la figure suivante).
Figure n° 9 : Exemple d’utilisation du mode d’adressage indexé pour le µP 6809
CMPD - 5, U → Compare D avec le contenu des adresses U-5, U-4
→ Adressage Indexé (avec un déplacement Accumulateur) : Dans ce cas, c’est le contenu des accumulateurs A, B ou D qui est additionné au registre d'index avant de pointer l'adresse effective. Le bit B7 du post-octet est à 1, les bits B5-B6 précisent l'index et les bits B0-B3 précisent l'accumulateur concerné :
% 1010 ACCA % 1001 ACC B % 1011 ACCD
Ex : LDA A, Y → Additionne Y et A pour obtenir l'adresse effective où l'on doit trouver le nouveau contenu de A.
→ Adressage Indexé (avec un PC comme base) : Ce mode permet seulement un adressage indexé à déplacement constant sur 8 ou 16 bits. Les bits B5-B6 du post-octet n'ont plus de sens, ce sont les bits B2-B3 qui forcent ce mode de travail : B2 = B3 = 1 → Index = PC
Le déplacement est précisé par un ou deux octets qui suivent le post-octet.
→ Adressage Indexé indirect : Ce mode d'adressage est une combinaison du mode indexé et du mode indirect. C'est le contenu de l'adresse pointée par l'index qui va servir d'adresse effective, exemple :
LDB [ - 6.S ] → Va chercher à l'adresse S-6, S-5 l'adresse effective à partir de laquelle on va charger B.
La notation « [ ] » précise le mode indirect et l'indexation offre les mêmes possibilités que le mode indexé simple.
4.2.3 Exemple de mise en application
Donnez l’organigramme et le programme Assembleur d’une routine permettant de programmer une temporisation de 1mn10s avec un signal d’horloge de fréquence égale à 1 Mhz.
Avec un signal d’horloge de fréquence 1 Mhz, 1 NC = 1µs. Pour 1mn10s : 70 / (1.10-6) = 70 106 NC
Figure n° 10 : Organigramme correspondant à la temporisation de 1mn10s
4.2.4 Conclusion
La multitude des combinaisons entre les 9 modes d'adressages et les 59 instructions de base du 6809, fait de ce microprocesseur le meilleur des microprocesseurs de 8 bits sur le marché.
4.3 Le microprocesseur 68000
→ Le microprocesseur 68000 est un processeur 32 bits, → Il est mis sur le marché en 1980.
→ La famille des processeurs 68000 comprend également les processeurs 32 bits 68020, 68030, 68040 ainsi que de nombreux types de micro-contrôleurs comprenant un processeur 68000 amélioré (micro-contrôleurs 68331, 68332, 68328, 68360).
4.3.1 Architecture du ìP 68000
Il existe, sur le marché, plusieurs variantes de circuits 68000 (voir un échantillon ci-dessous).
Motorola MC68HC000LC8, sa Motorola MC68HC001CFN8, Motorola MC68EC000FN10, Hitachi HD68000Y10, sa Thomson TS68000CFN16, fréquence est de : 8 MHz sa fréquence est de : 8 MHz sa fréquence est de : 10 MHz fréquence est de : 10 Mhz sa fréquence est de : 16 Mhz
Figure n° 11 : Quelques formes de circuits 68000
→ Les données sont stockées sur 8 bits (un octet), 16 bits ou sur 32 bits.
→ Les adresses sont définies sur 32 bits, avec 24 lignes d'adresse sortant du microprocesseur. L'espace d'adressage est donc de 224 octets, c'est-à-dire de 16 Moctets.
Le microprocesseur comporte différents registres (voir la figure suivante) :
Figure n° 12 : Les différents registres de la famille 68000
→ Un compteur ordinal (PC),
→ Huit registres de données D0, D1, ..., D7. On peut accéder au registres de données sur :
8 bits (octet, byte, bits d7 ...d0),
16 bits (doublet, word, bits d15 ...d0),
32 bits (quadlet, longword, bits d31 ...d0).
Un accès sur un seul bit parmi 32 bits est également possible. Les accès aux registres sont prévus pour manipuler des données et effectuer des opérations logiques et arithmétiques.
→ 8 registres d'adresse A0, A1, ..., A7 de 32 bits.
→ Un registre spécial, le registre de fanions F, contient les fanions.
→ Les registres d’adresse sont supposés être utilisés comme pointeurs sur des positions mémoires.
Ils contiennent en général l'adresse d'une position mémoire.
→ Le registre A7 joue un rôle particulier car il est employé comme Pointeur de Pile.
→ Le compteur ordinal (PC) donne l'adresse de l'instruction à rechercher en mémoire.
→ Le registre fanions (F) contient les fanions principaux C, X, V, N, Z, ...
4.3.2 Les instructions du ìP 68000 Instructions de chargement
Move.8 #VAL, D0
[ N, Z, V = 0, C = 0, X = 0] Chargement de D0 par une valeur immédiate, càd une valeur qui se trouve dans l’instruction. Exemple :
VAL = $ 1B ; définition du symbole VAL
Move.8 #VAL, D0 ; transfère la valeur hexadécimale 1B dans D0
Move.8 D1, D0 [ N, Z, ... ] Chargement de D0 par une valeur se trouvant dans D1
Move.8 {A0}, D0 [ N, Z, ... ] Chargement de D0 par une valeur se trouvant à une position mémoire pointée par le registre A0
Move.8 ADMEM, D0 [ N, Z, ... ] Chargement de D0 par une valeur se trouvant à la position mémoire ADMEM (ADMEM est une adresse symbolique qui doit qui être définie dans le programme).
Exemple : ADMEM = $ 0700 ; définition de l’étiquette ADMEM Move.8 ADMEM, D0 ; transfère la valeur qui se trouve à la position mémoire ADMEM = $ 0700 dans D0
Move.8 D0, {A1} [ N, Z, ... ] Chargement d’une position mémoire pointée par le registre A1 par une valeur se trouvant dans le registre D0
Move.8
[ N, Z, ... D0, ADMEM
] Chargement d’une position mémoire ADMEM par une valeur se trouvant dans le registre D0. Si ADMEM est spécifiée sur 16 bits, les bits de poids forts de l’adresse sont obtenus par extension du signe, càd que les bits 216 à 232 prennent la même valeur que le bit de poids 215
Les mêmes instructions permettent d’effectuer des transferts sur 16 ou 32 bits :
Move.16 #VAL, D3 [ N, Z, ... ] Chargement de D3 par une valeur immédiate 16 bits (la valeur fait partie de l’instruction). Les bits de poids fort de D3 conservent leur valeur.
Move.32 D3, D5 [ N, Z, ... ] Chargement du registre D5 par une valeur (32 bits) se trouvant dans D3
→ Les instructions de post-incrémentation et de pré-décrémentation permettent de combiner le transfert d'opérande et l'incrémentation, respectivement la décrémentation du registre d'index. L'incrémentation, respectivement la décrémentation, requiert l'addition, respectivement la soustraction, de 1, 2, ou 4 à la valeur du registre d'index, en fonction de la taille de l'opérande (8 bits, 16 bits ou 32 bits).
Move.8 D0, {A1 +} [ N, Z, ... ] Chargement du contenu de D0 à la position mémoire pointée par le registre A1, puis incrémentation de A1 (+1. car un seul octet a été transféré).
Move.16 D3, {- A1} [ N, Z, ... ] Décrémentation du registre d'index A1 par soustraction de 2, puis transfert du contenu du D3 à la position mémoire pointée par la nouvelle valeur du registre d’index A1.
Move.32 {A1 +}, D4 [ N, Z, ... ] Transfert du contenu de la position mémoire pointée par A1 dans le registre D4, ensuite ajout de 4 à la valeur de A1 (4 car la taille de l’opérande transférée est de 4 octets).
N.B : L'instruction PUSH.16 D0, équivalente à MOVE.16 D0, {-A7}, permet de sauver le contenu de D0 (une valeur 16 bits) sur la pile. L'instruction POP.16 D0 équivalente à MOVE.16 {A7 +}, D0 permet de récupérer cette valeur de la pile et de la transférer dans D0.
→ Les instructions pour opération arithmétiques : Les instructions arithmétiques et logiques permettent d'effectuer une opération arithmétique ou logique entre l’opérande source et l’opérande destination et de stocker le résultat à la position de l’opérande destination.
Les instructions arithmétiques et logiques permettent d'effectuer une opération arithmétique ou logique entre l’opérande source et l’opérande destination et de stocker le résultat à la position de l’opérande destination.
ADD.8 #VAL, D0 [ N, Z, V = 0, C = X] Addition d’une valeur immédiate et de la valeur contenue dans D0. Le stockage du résultat sera fait dans le registre de D0
ADDX.8 D1, D0
[ N, Z, V = 0, C = X] Addition, en tenant compte du fanion de report (eXtension) de la valeur contenue dans le registre D1 et de celle contenue dans le registre D0. Le stockage du résultat sera fait dans le registre de D0. Si le fanion (eXtension)) était actif avant l'addition, l'opération donne le résultat suivant : D1 + D0 → D0
SUB.8 {A2}, D1
[ N, Z, V = 0, C = X] Soustraction, en tenant compte du fanion d’empreint (eXtension), de la valeur se trouvant à la position mémoire pointée par {A2} de celle contenue dans le registre D1 et de celle contenue dans le registre D0. Le stockage du résultat sera fait dans le registre de D1. Si le fanion d’empreint (eXtension)) était actif avant la soustraction, l'opération est la suivante :
D1 – ({A2}) – 1 → D1
COMP.16 D3, D4 [ N, Z, V = 0, C = X] Comparaison de la valeur se trouvant dans D3 et de celle contenue dans le registre D4. Il s’agit d’une opération similaire à la soustraction, mais seuls les fanions sont mis à jour. La valeur se trouvant dans D4 n'est pas modifiée.
ADD.16 D3, D0
[ N, Z, V = 0, C = X] Addition 16 bits de la valeur se trouvant dans D3 et de celle se trouvant dans D0. Le stockage du résultat sera fait dans le registre de D0.
INC.32 D1
[ N, Z, V = 0, C = X] Incrémentation de la valeur du registre D1 + 1 → D1 (sur 32 bits)
DEC.16 D1
[ N, Z, V = 0, C = X] Décrémentation de la valeur du registre D1 - 1 → D1 (sur 16 bits). Les 16 bits de poids forts restent identiques.
DEC.8 D2
[ N, Z, V = 0, C = X] Décrémentation de la valeur du registre D2 - 1 → D2 (sur 8 bits). Les 24 bits de poids forts restent identiques.
Instructions pour opérations logiques
AND.8 D1, D0
[ N, Z, V = 0, C = 0] ET logique bit à bit (sur 8 bits) entre l'opérande se trouvant dans le registre D1 et de celle contenue dans le registre D0. Le résultat est stocké dans le registre de D0.
OR.16 D2, D3
[ N, Z, V = 0, C = 0] OU logique bit à bit (sur 8 bits) entre l'opérande se trouvant dans le registre D2 et de celle contenue dans le registre D3. Le résultat est stocké dans le registre de D3.
XOR.8 D1, D0
[ N, Z, V = 0, C = 0] OU EXCLUSIF logique bit à bit (sur 8 bits) entre l'opérande se trouvant dans le registre D1 et de celle contenue dans le registre D0. Le résultat est stocké dans le registre de D0.
NOT.8 D1
[ N, Z, V = 0, C = 0] Inversion logique bit à bit (sur 8 bits) entre l'opérande se trouvant dans le registre D1. Le résultat est stocké dans le registre de D1.
Instructions de décalage et de rotation
Les opérations de décalage entraînent une perte d'information : les bits de poids faibles ou forts, selon la direction de décalage, sont perdus.
Les opérations de rotation présentent l'information en réinjectant les bits de poids forts sur les poids faibles et vice-versa (voir la figure ci-dessous) et les tableaux suivants.
Figure n° 13 : Les différents registres à décalage de la famille 68000
RR.8 D1
[ N, Z, C, V = 0] Rotate Right : rotation à droite de la valeur du registre D1. Le bit de poids faible devient le bit de poids fort du résultat. Tous les autres bits sont décalés d'une position à droite.
RL.8 D2
[ N, Z, C, V = 0] Rotate Left : rotation à gauche de la valeur du registre D2. Le bit de poids fort devient le bit de poids faible du résultat. Tous les autres bits sont décalés d'une position à gauche.
SL.8 #VAL, D1 Décalage à gauche selon le nombre de position indiqué par la valeur immédiate VAL.
SR.8 #VAL, D1 Décalage à droite selon le nombre de position indiqué par la valeur immédiate VAL.
ASR.8 #VAL, D1
Décalage à droite selon le nombre de position indiqué par la valeur immédiate VAL. Les bits de poids forts réinjectés à gauche sont identiques au bit de poids fort avant le décalage (extension du bit de signe).
Instructions de saut
Les instructions de saut permettent d'effectuer des débranchements à l'intérieur des programmes. Il peut s'agir de sauts inconditionnels à une adresse donnée, de sauts conditionnels, d'appels de procédure et d'instructions de retour de procédure. Les instructions de saut conditionnel utilisent le contenu des fanions pour décider si le branchement doit avoir lieu ou pas. Le contenu courant des fanions dépend en général des résultats provenant de l'exécution de l'instruction précédente. Les mnémoniques suivantes sont définies pour le test direct des fanions du processeur 68000.