Chapitre 1 Introduction Langage d'assemblage Architecture générale Circuits de contrôle Registres (CP, RI, etc) UAL Mémoire Bus d adresses Bus de données 1
Le 68000 (Motorola) ~68000 composants (transistors) (Intel Core i5 > 1 milliard de transistor) Processeur CISC (1979) Grand jeu d'instructions; opérandes dans les registres et/ou en mémoire 14 modes d'adressage, taille d'instruction varie selon le mode Registres de données et d'adresses, séparés. Adresses sur 24bits 16M octets adressables Données sur 16bits 64 broches ALU de 16bits 18 registres 2 modes: superviseur et utilisateur. 1 seul registre Le 68000: les registres 8 registres de données D7..D0 7 registres d adresse A6..A0 3 registres spéciaux PC (compteur ordinal 32 bits) SR (registre d'état 16 bits, l'octet de poids faible est appelé CCR: Condition Code Register) USP (pointeur de pile utilisateur 32 bits) (A7) SSP (pointeur de pile superviseur 32 bits) (A7) 2
Le 68000: les registres (2) Utilisation du 68000 Mac 512-K Sega Megadrive Texas instr TI-92 Atari ST Calcul des règles de pilotage A320 3
Les CPUs vendues Catégories de puce Embarqués 4 bits 2000 Embarqués 8 bits 4700 Embarqués 16 bits Embarqués 32 bits Unités vendues (millions*) 700 400 DSP 600 En 2004: 14 milliards de processeurs pour l embarqué (microprocesseur, microcontrôleur, DSP, etc.) 260 millions de processeurs PC. Moins de 2% (5%) des processeurs vendu sont pour les PC, 98% (95%) pour l embarqué Prix moyen d un processeur 6$ (2004) alors qu un processeur PC coute 300$. Le marché du processeur PC est de très faible volume mais très lucratif Desktop 32/64 bits 150 *(vielle source: D. Tannenhouse (directeur de recherche Intel) RTSS 99, 12/99. Les CPU utilisées dans l embarqué Famille 32 bits ARM 151 Motorola 68K 94 MIPS 57 Hitachi SuperH 33 x86 29 PowerPC 10 Intel i960 8 SPARC 3 AMD 29K 2 Unités vendues (millions*) *source: T. R Halfhill. Embedded market Breaks New Ground Microprocessor Report Jan 2000 4
Quelques instructions (exemples Motorola 68000) Copie de données (MOVE) Opérations arithmétiques (ADD, SUB, MULS, DIVS) Branchements inconditionnels (BRA) Branchements conditionnels (BEQ) Introduction Adresses et constantes Exemple d'adresse: 124 Exemple de constante: #124 Introduction 5
Exemple MOVE MOVE.L 124, 132 Mettre dans la case numéro 132 une valeur identique à celle qui se trouve dans la case numéro 124. Introduction Exemple MOVE MOVE.L 124, 132 Copier à l'adresse 132 la valeur se trouvant à l'adresse 124 adresse @ Introduction 6
Exemple MOVE MOVE.L #124, 132 Mettre la valeur 124 dans la case numéro 132 (ayant pour adresse 132) Introduction Exemple ADD ADD.L #124, 132 Aller chercher la valeur se trouvant trouvant à l'@ 132 Ajouter 124 à cette valeur Ranger le résultat à l'@ 132 Introduction 7
Exemple BRA SUITE: ADD.L #1,132 ; instruction 1 BRA SUITE ; instruction 2 ADD.L #1,132 ; instruction 3 L'instruction 3 n'est pas exécutée Introduction Noter la présentation du programme. Utiliser les tabulations pour aligner. Exemple BEQ SUITE: MOVE.L #2,120 ; instruction 1 SUB.L #2,120 ; instruction 2 BEQ SUITE ; instruction 3 ADD.L #1,132 ; instruction 4 L'instruction 4 n'est pas exécutée Introduction BEQ: Branchement si égal 0 (si la valeur précédemment produite vaut 0) 8
Exemple BEQ SUITE: MOVE.L #3,120 ; instruction 1 SUB.L #2,120 ; instruction 2 BEQ SUITE ; instruction 3 ADD.L #1,132 ; instruction 4 L'instruction 4 est exécutée Introduction Un ";" indique un commentaire jusqu'à la fin de la ligne Exemple de programme DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 SUB.L #1,D1 BNE BCLE Introduction RTS 9
Exemple de programme Introduction DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 SUB.L BNE RTS #1,D1 BCLE On définit toutes les variables dans une zone DATA Les variables apparaissent généralement au début du programme. Exemple de programme Introduction DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 SUB.L BNE RTS #1,D1 BCLE Définition d'une variable de type entier (long) 32 bits (int) La valeur d'initialisation est ici exprimée en décimal 10
Exemple de programme Introduction DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 SUB.L BNE RTS #1,D1 BCLE Définition d'une variable de type (Byte) octet (8 bits) (char) La valeur d'initialisation est ici exprimée en hexadécimal ($) Exemple de programme Introduction DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 SUB.L BNE RTS #1,D1 BCLE Définition d'un tableau de 12 octets (char []) 11
Exemple de programme Introduction DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 SUB.L BNE RTS #1,D1 BCLE Les instructions suivent généralement les données dans une zone CODE Exemple de programme DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 Introduction SUB.L BNE RTS #1,D1 BCLE L'instruction MOVE permet de copier une donnée. 12
Exemple de programme DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 Introduction SUB.L BNE RTS #1,D1 BCLE Un MOVE permet de copier des valeurs 8, 16 ou 32 bits (Byte, Word, Long). Un suffixe précise le cas choisi. Exemple de programme DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 Introduction SUB.L BNE RTS #1,D1 BCLE Les instructions arithmétiques (ADD, SUB, ) ont seulement deux paramètres. 13
Exemple de programme DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 Introduction SUB.L BNE RTS #1,D1 BCLE Un # indique qu'il s'agit d'une constante Exemple de programme DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 Introduction SUB.L BNE RTS #1,D1 BCLE Le SUB précédent a produit une valeur qui a été rangée dans le registre D1. Si cette valeur est non nulle (BNE), on va poursuivre l'exécution à l'étiquette BCLE 14
Exemple de programme DATA X: DC.L 5 Y: DC.B $A TAB: DS.B 12 CODE MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 Introduction SUB.L BNE RTS #1,D1 BCLE L'instruction RTS marque la fin du programme principal. Cette instruction permet aussi de marquer la fin d'une fonction. Exemple de fonction DATA X: DC.L 5 Y: DC.B $A CODE JSR FONCT1 RTS FONCT1: MOVE.L X,D1 MOVE.B Y,D0 BCLE: ADD.L D0,D0 SUB.L #1,D1 Introduction BNE BCLE RTS Ce nouveau programme est équivalent au précédent. Le programme principal commence juste après l'instruction CODE. On y appelle une fonction FONCT1 15
REPRESENTATION DE L INFORMATION Codage des entiers et flottants Entiers: Signe + Valeur absolue Complément à 1 Complément à 2 Flottant: Mantisse ± 1.xxxxx 2exp 0 10000110 01100100010000000000000 sgn exposant mantisse 23 bits Base 10: 1.78125 *10 2 16
Caractères Code ASCII (8 bits) American Standard Code for Information Interchange 'A' : 0100 0001 'B' : 0100 0010 'a' : 0110 0001 'b' : 0110 0010 Un code est attribué à chaque caractère Représentation de l'information Caractères Code ASCII standard bit n 7 à 0 Code ASCII étendu (non standard) "é" en ASCII français : $7B "é" en ASCII PC : $82 "é" en ASCII Macintosh : $8E "é" en ASCII Unix : $E9 Représentation de l'information 17
Caractères Représentation de l'information LE Code ASCII Caractères Représentation de l'information UN code ASCII étendu 18
Caractères Ne jamais introduire un code ASCII dans un programme Utiliser directement le caractère MOVE.B # 'A', 120 MOVE.B # 65, 120 Représentation de l'information GESTION DES DONNÉES 19
Structuration de la mémoire Les octets peuvent être regroupés 1 octet (valeur 8 bits, octet) 2 octets (valeur 16 bits, mot) 4 octets (valeur 32 bits, mot long) 3.1 La Mémoire Accès à la mémoire MOVE.B : accès valeur 8 bits MOVE.W : accès valeur 16 bits MOVE.L : accès valeur 32 bits 3.1 La Mémoire 20
Adresse des mots 3.1 La Mémoire L'adresse d'un mot (ou mot long) est l'adresse de l'octet qui a la plus faible valeur Exemple: n 0 n 1 n 2 n 3 n 4 adresse n 5 du mot? n 6 n 7 Quelle est l'adresse d'un mot (long) si : l'adresse du mot (long) suivant est $1010 l'adresse du mot (long) précédent est $1010 il est le dernier mot (long) d'un bloc de 16 octets commençant à l'adresse $1000 3.1 La Mémoire 21
Stockage des valeurs dans la mémoire Little Endian et Big Endian Ces termes proviennent d'un roman satyrique écrit au 18e siècle par Jonathan Swift: les voyages de Gulliver. Le monde se divisait en deux groupes: Ceux qui mangeaient les œufs en commençant par le gros bout (big end) Ceux qui mangeaient les œufs en commençant par le petit bout (little end) 3.1 La Mémoire Stockage des valeurs dans la mémoire Little Endian et Big Endian Ces termes proviennent d'un roman satyrique écrit au 18e siècle par Jonathan Swift: les voyages de Gulliver. Le monde se divisait en deux groupes: Ceux qui mangeaient les œufs en commençant par le gros bout Ceux qui mangeaient les œufs en commençant par le petit bout 3.1 La Mémoire 22
Stockage des valeurs dans la mémoire Sur certains processeurs (Motorola, RISC, ) on utilise le mode «big-endian». On commence par ranger le gros bout ("big end", poids forts ) en mémoire à l'adresse la plus faible. Sur d'autres processeurs (Pentium, ) on utilise le mode «little-endian». On commence par ranger le petit bout ("little-end", poids faibles) en mémoire à l'adresse la plus faible 3.1 La Mémoire Avantages "big-endian" "littleendian" Le mode «big-endian» est plus logique pour l'utilisateur. En «little-endian» on trouve les poids faibles aux adresses les plus faibles Ce mode est plus logique pour le processeur. Exemple: $89ABCDEF 3.1 La Mémoire 23
Exercices «big-endian» (cas Motorola) Valeur 16 bits $AB2F à l'adresse $1000 Valeur 32 bits $FE125DA1 à l'@ $1002 Valeur 32 bits $C3 à l'@ $1001 Valeur 8 bits $12 à l'@$1000 3.1 La Mémoire Schéma (Motorola 68000) 8 registres de données Unité de calcul 8 registres d'adresses Reg SR Registre PC 3.2 Le processeur 24
Unité de calcul Addition, Soustraction Multiplication, Division Négation Et, Ou, Ou exclusif Non... 3.2 Le processeur Registres Mémoire interne du processeur Le processeur dispose de quelques mots longs de mémoire pour ranger les résultats des calculs intermédiaires 16 mots longs 32 bits 3.2 Le processeur 25
Registres de données (D0, D1,, D7) 8 registres 32 bits Peuvent être vus comme des registres 8, 16 ou 32 bits. Les zones modifiables sont: bits 0..7 bits 0..15 (opération.b) (opération.w) 3.2 Le processeur bits 0..31 (opération.l) Exercice registre de données MOVE.L #$AABBCCDD,D3 MOVE.B #$99,D3 MOVE.W #$88,D3 Trouver la valeur de D3 Les bits 8..31 ou les bits 16..31 peuvent rester inchangés 3.2 Le processeur 26
Registres d'adresses (A0, A1,.., A7) 8 registres 32 bits Ils sont toujours utilisés comme des registres 32 bits (une adresse s'exprime toujours sur 32 bits) Les opérations de type MOVE.B sont interdites 3.2 Le processeur Le registre compteur ordinal (PC) Contient l'adresse de l'instruction courante Ce registre est automatiquement incrémenté après l'exécution d'une instruction (exécution séquentielle) Certaines instructions provoquent des modifications de PC (BRA) 3.2 Le processeur 27
Le registre statut (SR) Status Register Décrit le mode de fonctionnement et l'état du processeur 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 kt 0 S 0 0 I2I1I00 0 0 X N Z V C Octet superviseur Octet utilisateur 3.2 Le processeur CCR Octet utilisateur SR (CCR) C (retenue, carry) V (dépassement, overflow) Z (zéro) N (négatif) X (extension) Renseigne sur l'état du processeur après l'exécution d'une instruction arithmétique ou logique 3.2 Le processeur 28
Exercice CCR MOVE.B #$FF,D2 ADD.B #1,D2 MOVE.B #127,D2 ADD.B #1,D2 Trouver la valeur de N, Z, V, C 3.2 Le processeur Exercice CCR MOVE.B #$FF,D2 ADD.B #1,D2 MOVE.B #127,D2 ADD.B #1,D2 N = 1 Z = 0 V = 0 C = 0 3.2 Le processeur 29
Exercice CCR MOVE.B #$FF,D2 ADD.B #1,D2 MOVE.B #127,D2 ADD.B #1,D2 N = 0 Z = 1 V = 0 C = 1 3.2 Le processeur Exercice CCR MOVE.B #$FF,D2 ADD.B #1,D2 MOVE.B #127,D2 ADD.B #1,D2 N = 0 Z = 0 V = 0 C = 0 3.2 Le processeur 30
Exercice CCR MOVE.B #$FF,D2 ADD.B #1,D2 MOVE.B #127,D2 ADD.B #1,D2 N = 1 Z = 0 V = 1 C = 0 3.2 Le processeur Les instructions de branchement BEQ (branchement si = 0) EQual BNE (branchement si!= 0) Not Equal BGT (branchement si > 0) Greater Than BGE (branchement si >=0) Greater or Equal BLT (branchement si < 0) Less Than BLE (branchement si <= 0) Less or Equal 3.2 Le processeur 31
Solution exercices BEQ : Z BNE : BGT : BGE : BLT : BLE : Z N. V. Z + N. V. Z N. V + N. V N. V + N. V Z + N. V + N. V 3.2 Le processeur MODES D ADRESSAGE 32
Catégories Adressage registre direct Adressage registre indirect Adressage absolu Adressage immédiat Adresse relatif à PC Adressage implicite Modes d'adressage Adressage direct registre de données Notation: Dn Taille: B, W, L Exemple: MOVE.L D2,D3 Transfert du contenu de D2 vers D3 Modes d'adressage 33
Adressage direct registre d'adresse Notation: An Taille: L Exemple: MOVE.L A2,A3 Transfert du contenu de A2 vers A3. Ne pas utiliser les tailles B et W Modes d'adressage Adressage registre indirect Notation: (An) Taille: B, W, L Exemple: MOVE.L (A1),D3 Copie du contenu de la mémoire à l adresse A1 vers D3 Modes d'adressage 34
Adressage registre indirect Comment initialiser An? DATA TAB: DS.B 10 CODE LEA Modes d'adressage TAB,A2 ; copie de la valeur de TAB ;dans le registre d adresse A2 ;(Load Effective Address) MOVE.B #2,(A2);placer l octet de valeur 2 à ;l adresse pointée par A2 et ;donc le premier octet du tableau RTS Adressage registre indirect avec post-incrémentation Notation: (An)+ Taille: B, W, L Exemple: MOVE.L (A1)+,D3 Adressage indirect en utilisant la valeur de An puis incrémentation de An de 1 si.b de 2 si.w de 4 si.l Modes d'adressage 35
Adressage registre indirect avec pré-décrémentation Notation: -(An) Taille: B, W, L Exemple: MOVE.L -(A1),D3 Décrémentation de An puis adressage indirect en utilisant la nouvelle valeur de An de 1 si.b de 2 si.w de 4 si.l Modes d'adressage Adressage registre indirect avec déplacement Notation: d(an) Taille: B, W, L Exemple: MOVE.L 4(A1),D3 Adressage indirect en utilisant l'adresse (An + d) Le registre An n'est pas modifié Modes d'adressage 36
Adressage absolu long Notation: adresse Taille: B, W, L Exemple: MOVE.L 4,D3 Écrire le contenu de la mémoire à l adresse 4 dans le registre D3 L'adresse 32 bits est spécifiée en décimal ou en hexadécimal On évite les adresses 16 bits (absolu court) Modes d'adressage Adressage relatif à PC Notation: d(pc) Taille: Exemple: BRA 2(PC) BRA suite suite: La valeur contenue dans PC est utilisée pour calculer l'adresse effective Ne pas utiliser cette forme.utiliser les étiquettes (cas BRA) Modes d'adressage 37
Adressage immédiat Notation: #valeur Taille: B, W, L Exemple: MOVE.L #2,D4 Mettre la valeur 2 dans le registre D4 Modes d'adressage INSTRUCTIONS ET DONNÉES 38
Structure d'un programme Zones de données (DATA) Zones d'instructions (CODE) Exemple: DATA ; définition des données CODE ; définition des instructions Instructions et données Définition des données DC.B initialisation d'un octet ou d'une chaîne DC.W initialisation d'un mot DC.L initialisation d'un mot long DS.B réservation d'un tableau d'octets DS.W réservation d'un tableau de mots DS.L réservation d'un tableau de mots longs Données 39
Instruction DC (Define Constant) Données Permet d'effectuer des réservations de mémoire avec initialisation (octet, mot, mot-long ou chaîne) Exemples: DC.B 4 DC.B DC.W 5 DC.L 8 "AB" Instruction DC (Define Constant) Données Permet d'effectuer des réservations de mémoire avec initialisation (octet, mot, mot-long ou chaîne) Exemples: DC.B 4 DC.B DC.W 5 DC.L 8 "AB" n 0 4 n 1 'A' n 2 'B' n 3 0 n 4 0 n 5 5 n 6 0 n 7 0 n 8 0 n 9 8 40
Instruction DS (Define Storage) Données Permet d'effectuer des réservations de mémoire sans initialisation (tableaux d'octets, de mots, ou de mots longs) Exemples: DS.B 4 DS.W 5 DS.L 6 Problème de l'accès aux données Pour accéder à une donnée il faut son adresse Les étiquettes permettent de définir des repères dans les zones de données. Elles sont utilisables en tant qu'adresses. Données Les étiquettes permettent aussi de définir des repères dans les zones d'instructions 41
Liste des instructions principales MOVE, LEA CMP, BEQ, BNE, BGT, BGE, BLT, BLE BRA, JMP ADD, SUB, MULS, DIVS, NEG AND, OR, EOR, NOT LSL, LSR, ASL, ASR, ROL, ROR JSR, RTS Instructions Instruction MOVE Syntaxe: MOVE <ea1>,<ea2> Rôle: copier la donnée se trouvant à l'adresse spécifiée par <ea1> à l'adresse spécifiée par <ea2> Notes <ea1>: An interdit en mode.b Notes <ea2>: #valeur et d(pc) interdits Exemple: Instructions MOVE.W #3,(A2)+ 42
Instruction LEA (forme simplifiée) Instructions Syntaxe: LEA étiquette,an Rôle: permet d'obtenir une adresse dans un registre d'adresse (par exemple l'adresse correspondant à une étiquette) Exemple: LEA X1,A3 MOVE.L (A3),D0 Problème de l'accès aux données (exercice 1) Instructions DATA X1: DC.L 3 DC.L 4 CODE ; comment accéder au ; deuxième mot long? RTS 43
Problème de l'accès aux données (exercice 2) Instructions DATA X1: DC.W 3 DC.L 4 DC.L 5 CODE ; comment accéder au ; deuxième mot long? RTS Problème de l'accès aux données (exercice 3) Instructions DATA X1: DS.L 2 DC.L 4 DC.L 5 CODE ; comment accéder au ; troisième mot long? RTS 44
Instruction CMP Instructions Syntaxe: CMP <ea1>,<ea2> Rôle: calcul de <ea2> - <ea1> sans modifier <ea2> Indicateurs: N, Z, V et C modifiés Formes possibles: CMP <ea1>,dn CMP <ea1>,an CMP #data,<ea2> Instruction BRA Syntaxe: BRA étiquette Rôle: désigne la prochaine instruction qui sera exécutée Indicateurs: non modifiés Exemple: BRA SUITE ADD.L #1,D0 SUITE: ADD.L #1,D1 Instructions 45
Instruction Bxx (BEQ, BNE, BGT, BGE, BLT, BLE) Instructions Syntaxe: Bxx étiquette Rôle: branchement conditionnel Indicateurs: non modifiés Exemple: MOVE.L #1,D1 CMP.L #1,D1 BEQ SUITE ADD.L #1,D3 SUITE: ADD.L #1,D4 ADD non exécuté INSTRUCTIONS ARITHMÉTIQUES 46
Liste des instructions ADD (ADDA, ADDI, ADDQ, ADDX) Address, Immediate, Quick, X(carry) SUB (SUBA, SUBI, SUBQ, SUBX) MULS (MULU) Unsigned DIVS (DIVU) NEG (NEGX) Instructions arithmétiques Addition (ADD) Syntaxe: ADD <ea1>,<ea2> Rôle: calcul de <ea1> + <ea2> et rangement du résultat à <ea2> Formes possibles: ADD <ea1>,dn ADD Dn,<ea2> ADD <ea1>,an ADD #data,<ea2> Instructions arithmétiques 47
Soustraction (SUB) Syntaxe: SUB <ea1>,<ea2> Rôle: calcul de <ea2> - <ea1> et rangement du résultat à <ea2> Formes possibles: SUB <ea1>,dn SUB Dn,<ea2> SUB <ea1>,an SUB #data,<ea2> Instructions arithmétiques Multiplication signée (MULS) Syntaxe: MULS <ea1>,dn Rôle: multiplication <ea1> (16 bits) par Dn (16 bits) et rangement du résultat dans Dn (32 bits) Exercice: multiplier D2 par X avec X défini de la façon suivante: DATA X: DC.W 3 Instructions arithmétiques 48
Multiplication signée (MULS) DATA X: DC.W 3 CODE MOVE.W #2,D2 LEA X,A1 MULS(A1), D2 ;ou MULS X, D2 résultat 6 RTS Division signée (DIVS) Syntaxe: DIVS <ea1>,dn Rôle: division de Dn (32bits) par <ea1> (16 bits). Rangement du quotient dans les bits 0 à 15 de Dn. Rangement du reste dans les bits 16 à 31 de Dn Exercice: diviser D0 par 2, mettre le quotient dans D1, mettre le reste dans D2 Instructions arithmétiques 49
Division signée (DIVS) DATA X: DC.W 2 CODE MOVE.L #7,D0 ; 7/2 LEA X,A1 DIVS(A1), D0 MOVE.W D0, D1 MOVE.L D0, 2(A1) MOVE.W 2(A1), D2 Négation (NEG) Syntaxe: NEG <ea> Rôle: calcul de 0 - <ea> et rangement du résultat à <ea> Exemple: NEG D3 Instructions arithmétiques 50
INSTRUCTIONS LOGIQUES Liste des instructions AND (ANDI) OR (ORI) EOR (EORI) NOT NEG (NEGX) LSL, LSR, ASL, ASR, ROR, ROL (ROXL, ROXR) Instructions logiques et décalages 51
ET logique (AND) Syntaxe: AND <ea1>,<ea2> Rôle: calcul de <ea1> & <ea2> (bit à bit) et rangement du résultat dans <ea2> Formes possibles: Instructions logiques AND <ea1>,dn AND Dn,<ea2> AND #data,<ea2> OU logique (OR) Syntaxe: OR <ea1>,<ea2> Rôle: calcul de <ea1> <ea2> (bit à bit) et rangement du résultat dans <ea2> Formes possibles: Instructions logiques OR <ea1>,dn OR Dn,<ea2> OR #data,<ea2> 52
OU exclusif (EOR) Syntaxe: EOR <ea1>,<ea2> Rôle: calcul de <ea1> xor <ea2> (bit à bit) et rangement du résultat dans <ea2> Formes possibles: EOR Dn,<ea2> EOR #data,<ea2> Instructions logiques Inversion bit à bit (NOT) Syntaxe: NOT <ea> Rôle: calcul de ~<ea> et rangement du résultat à <ea> Exemple: NOT.L D2 Instructions logiques 53
Exercices Mettre à 0 les bits 8 à 31 de D2 sans changer les autres bits Mettre le bit n 5 de D2 à 0 sans changer les autres bits Mettre le bit n 5 de D2 à 1 sans changer les autres bits Extraire le quotient d'une division sous forme 32 bits signée Instructions logiques Décalage arithmétique vers la droite (ASR) Syntaxe: ASR <ea1>,<ea2> Rôle: calcul de <ea2> >> <ea1> et rangement du résultat à <ea2> (on décale <ea2> de <ea1> positions vers la droite en gardant le bit de signe inchangé) Formes possibles: ASR Dm,Dn Instructions logiques ASR #data,dn ; 1 <=data <= 8 ASR <ea> ; décalage d 1 bit 54
Décalage arithmétique vers la gauche (ASL) Syntaxe: ASL <ea1>,<ea2> Rôle: calcul de <ea2> << <ea1> et rangement du résultat à <ea2> (on décale <ea2> de <ea1> positions vers la gauche en remplaçant par 0 les bits décalés) Formes possibles: Instructions logiques ASL Dm,Dn ASL #data,dn ; 1 <=data <= 8 ASL <ea> ; décalage d 1 bit Schémas ASR, ASL ASL C X 0 ASR C X Instructions de décalage 55
Décalages logiques (LSR et LSL) Syntaxe: LSx <ea1>,<ea2> Rôle: décalage de <ea2> de <ea1> positions. Les bits décalés sont remplacés par 0. Formes possibles: LSx Dm,Dn LSx <ea> Instructions logiques LSx #data,dn ; 1 <=data <= 8 Schémas LSR, LSL LSL C X 0 LSR 0 C X Instructions de décalage 56
Rotations (ROR et ROL) Syntaxe: ROx <ea1>,<ea2> Rôle: décalage de <ea2> de <ea1> positions. Les bits forts poids sont échangés avec les bits faibles poids Formes possibles: ROx Dm,Dn ROx <ea> Instructions logiques ROx #data,dn ; 1 <=data <= 8 Schémas ROR, ROL ROL C ROR C Instructions de décalage 57
Exercices Extraire le quotient et le reste d'une division Instructions logiques 58