Chapitre 2 Etude du Microprocesseur 68000
Brochage du 68000
II.1 Microprocesseur 68000 II.1.1 Registres internes: Tous les registres sont sur 32 bits excepté le registre d’état SR; sur 16 bits.
� Registres de donnÊes: Manipulables sous 8 bits (.b), 16 bits (.w) et 32 bits (.l)
- Registre des adresses: Manipulables uniquement sous 16 bits (.w) et 32 bits (.l)
- Registre A7 (USP: User Stack Pointer ou SSP: Supervisor Stack Pointer): Il est utilisé comme pointeur de pile utilisateur ou superviseur. - Compteur de programme PC (Program Counter): Il est sur 32 bits mais l’adresse est sur 24 bits. - Registre d’état SR (Status Register): Il est divisé en 2 octets: octet système et octet utilisateur (CCR:Codes Condition Register). Le registre complet est accessible en mode superviseur. En mode utilisateur, l’accès est autorisé uniquement sur l’octet de poids faible; l’octet utilisateur (CCR).
• • • • • • • •
S : indicateur du mode superviseur T : indicateur du mode trace I2I1I0 : niveau du masque d’interruption X : bit d’extension N: bit de négativité Z: bit de résultat nul V: bit de dépassement arithmétique C: bit de génération de retenue
Remarques: • Les mémoires des données sont sur 8 bits. • Elles sont séparées en 2 blocs d’adresses paires (M0) et impaires (M1.) • L’adresse des mots et des mots longs est l’adresse de leur octet de poids forts. • L’adresse des mots et des mots longs doit être une adresse paire.
II.1.2 Jeu d’instructions: a- Définition: Le jeu d’instruction regroupe l’ensemble des opérations élémentaires que le CPU32 pourrait exécuter. Les instructions sont classées en quatre groupes (Norme IEEE): Transfert des données pour charger ou sauvegarder en mémoire, effectuer des transferts de registre à registre, etc… Opérations arithmétiques: addition, soustraction, division, multiplication… Opérations logiques: ET, OU, NON, NAND, comparaison, test … Contrôle de séquence: branchement, test …
b‐ Format et codage de l’instruction: ¾ Format de l’instruction: [< étiquette >] < mnémonique > [. < format >] [[< source >, ] [< destination >]] Exemples: MOVE.L #$BE53FA94,D3 ADD.W #$C5A2,D3 ¾Codage de l’instruction: Chaque instruction est toujours codée sur un nombre entier d’octets afin de faciliter son décodage par le processeur. Une instruction est composée de deux champs: 9 Le code instruction (code opératoire), qui indique au processeur quelle instruction à réaliser. 9Le champ opérande qui contient la donnée, ou la référence à une donnée en mémoire (son adresse). Exemples: MOVE.L #$BE53FA94,D3 263C BE53 FA94 ADD.W #$C5A2,D3 D643 C5A2
II.1.3 Modes d’adressage: a- Définition: Le mode d’adressage définit la manière dont le CPU32 va accéder à l’opérande; c’est la méthode de composer l’adresse effective (a.e.). Cette dernière est: • dans l’instruction, • ou dans un registre d’adresse, • ou en mémoire b‐ Modes d’adressage: Conventions d’écriture: <expr> : une expression (valeur) quelconque Dn : un registre de données de numéro n (quelconque) An : un registre d’adresse de numéro n (quelconque) Rn : un registre de données ou d’adresse quelconque
- Adressage immédiat: Syntaxe assembleur : #<expr> Adresse effective : a.e = (pas d’adresse) Ex : MOVE.L #$BEF439AD, D1 - Adressage Direct Registre de Données (DRD): Syntaxe assembleur : Dn Adresse effective : a.e = Dn Ex : CLR.B D3 - Adressage Direct Registre d’adresse (DRA): Syntaxe assembleur : An Adresse effective : a.e = An Ex : MOVE.W A1,D4 - Adressage absolu: Syntaxe assembleur : <expr> Adresse effective : a.e = valeur de <expr> Ex : CLR.W $803200
- Adressage indirect: Syntaxe assembleur : (An) Adresse effective : a.e = contenu de An Ex : ADD.W (A2),D1 - Adressage indirect avec post-incrémentation: Syntaxe assembleur : (An)+ ⎧1 si .B Adresse effective : a.e = contenu de An ⎪ Après l’exécution, le contenu de An devient (An)+T où T = ⎨2 si .W ⎪4 si .L ⎩ Ex :
CLR.W (A5)+
- Adressage indirect avec pré-décrémentation: Syntaxe assembleur : -(An) Avant l’exécution, le contenu de An devient (An)+T où
⎧1 si .B ⎪ T = ⎨2 si .W ⎪4 si .L ⎩
Adresse effective : a.e = contenu de An (après modification) Ex : CLR.B -(A4)
- Adressage indirect avec déplacement (sur 16 bits): Syntaxe assembleur : <expr>(An) Adresse effective : a.e = contenu de An + valeur de <expr> Ex : CLR.B -8(A0) ou CLR.B $FFF8(A0) - Adressage indirect avec déplacement (sur 8 bits) et index: Syntaxe assembleur : <expr>(An,Dn) Adresse effective : a.e = contenu de An + contenu de Dn+ valeur de <expr> Ex: MOVE.W $20(A2,D3) - Adressage relatif par rapport au compteur de programme (PC): Ce mode d’adressage regroupe deux types: ¤ compteur de programme avec déplacement, ¤ compteur de programme avec déplacement et index. La valeur contenu dans le PC est utilisée pour calculer l’adresse effective de traitement de l’instruction sachant que la valeur de PC est égale l’adresse courante plus 2
- Adressage implicite: L’adresse effective se trouve implicitement dans l’instruction et elle fait référence à: 9compteur de programme (JMP, BRA) 9 pointeur de pile utilisateur (MOVE USP,An; MOVE An,USP) 9pointeur de pile superviseur (TRAP, DIV) 9Registre d’état (RTI, RTE, STOP,…) II.2 Programme: II.2.1 Introduction: L’entrée à l’assembleur est un fichier contenant des instructions, des directives d’assembleur et des commentaires. Chaque ligne du fichier peut avoir jusqu’à 256 caractères. Toutefois, il est recommandé qu’elle soit 80 caractères pour s’assurer qu’elle n’excède pas 132 caractères de longue. II.2.2 Format d’une ligne d’assembleur: Etiquette Opération Opérande, Opérande
Commentaire
Exemple: Loop MOVE.B
(A0)+,(A1)+
exemple de ligne d’assembleur
¾Champ d’étiquette: Ce champ commence au début de la colonne. Une étiquette est une adresse dans le programme; elle se compose de lettres et de nombres. ¾Champ d’opération: Ce champ spécifie l’instruction à assembler ou la directive à performer ou exécuter durant l’assemblage. Il ne commence jamais de la première colonne. ¾Champ des opérandes: Ce champ peut être ou ne peut pas être exigé, ça dépend de l’instruction ou de la directive utilisée. S’il existe, les opérandes doivent être séparés par des virgules. ¾Champ du commentaire: Ce champ vient toujours après le champ des opérandes séparé par un espace ou après un astérisque ‘ * ‘ .
II.2.3 Structure d’un programme: Saisie d’un programme, en langage assembleur, doit suivre la structure suivante: Directives d’assemblage Déclaration des variables Programme principal Sous-programmes Programmes d’interruption Déclarations des constantes
II.2.4 Traitement d'un programme en langage d'assemblage
Exemple 1: ******************************** Directives ******************************************************** include 68332.def ******************* Définition d’une constante *************************************************** Pile EQU $804000 ******************* Début du programme principal ********************************************** ORG $802000 Programme va être exécuté à l’adresse $802000 LEA $803000,A0 MOVE.L #$80468A,(A0) MOVE.L (A0),D0 ADD.L Pile,D0 JMP $400 Retour vers le moniteur ******************* Fin du programme principal************************************************** END
Exemple 2: Faire un programme en assembleur du 68332 qui fait l’addition de deux nombres en 16 bits se trouvant respectivement aux adresses adra=$803000 et adrb=$803002. Le résultat sera dans le registre D1. Exemple 3: Faire un programme qui calcule l’expression logique suivante:
d = a b + ca + b c Où a, b, c et d sont des nombres non-signés de 8 bits se trouvant respectivement en: Ma=$803030, Mb=$803031, Mc=$803032 et Md=$803033 Exemple 4: Faire un programme qui calcule l’expression algébrique suivante: ⎡ 3A C = ⎢ ⎣
+ 14B 15
⎤ ⎥ ⎦
Où A, B et C sont des nombres signés de 16 bits se trouvant respectivement dans MA=$803040, MB=$803042, MC=$803044.
II.2. 3 Notion de la pile: La pile est une portion de mémoire dont l’adresse se trouve dans A7 et permet la sauvegarde des données. L’écriture dans la pile est un empilement et la lecture est un dépilement. On distingue deux types de pile: II.3.5.1 La pile FIFO (First In First Out): Dans laquelle la première information empilée est la première dépilée; on l’appelle « File d’attente ».
II.3.5.2 La pile LIFO (First In First Out): Dans laquelle la dernière information empilée est la première dépilée. Puisqu’on empile par le haut et qu’on la vide par le haut; cette pile a été surnommée « pile à empilement ».
Ce dernier processus est utilisé en 68332, lors de traitement d’un sous-programme, d’une exception ou interruption.
II.3.5.3 Utilisation de la pile en sous-programme: Un sous-programme est un programme dont on attribue une étiquette et qui termine par une instruction de retour. Il est exécuté au moment où un programme principal l’appelle par une instruction JSR ou BSR. Ainsi et pour que le programme principal ne se perde pas; il utilise une pile LIFO pour sauvegarder principalement le PC et éventuellement les contenus des registres utilisés en commun par le sous-programme. En fait, l’opération concernant les registres est effectuée par l’utilisateur et l’autre est automatique. A la fin du sous-programme, le contexte est récupéré pour continuer l’exécution du programme principal. Exemple 1: Sous-programme de calcul du carré d’un nombre entier se trouvant dans le registre D0 et le résultat va être en D2.
00802000 00802006 0080200C 00802010 00802016 0080201C 00802020 00802020 00802022 00802024 00802026 00802028 0080202A 0080202C 0080202E
2E7C 00804000 223C 5B9AFED8 303C 0400 4EB9 00802020 23C2 00803000 4E72 2700 2F01 4281 3200 C2C0 2401 221F 4E75
1 MOVEA.L 2 MOVE.L 3 MOVE 4 JSR 5 MOVE.L 6 STOP 7 CARRE 8 MOVE.L 9 CLR.L 10 MOVE.W 11 MULU 12 MOVE.L 13 MOVE.L 14 RTS 15 END
#$804000,A7 #$5B9AFED8,D1 #$400,D0 CARRE D2,$803000 #$2700 D1,-(A7) D1 D0,D1 D0,D1 D1,D2 (A7)+,D1
Etat de la pile pendant l’exécution du sous‐programme
Exemple 2: Une chaîne de caractères se trouve en mémoire à l’adresse $803040 et terminé par le caractère ‘NUL’; faire un programme en assembleur 68332 qui permet d’insérer après chaque caractère ‘A’ le caractère ‘*’. ***************** Déclaration *********************** Adchaine EQU $803040
**************** Début du programme principal ******* ORG $802000 LEA Adchaine,A0 LOOP TST.B (A0) BEQ FIN CMPI.B #'A',(A0)+ BNE LOOP JSR inser BRA LOOP FIN STOP #$2700 ; jmp $400
************Premier sous‐programme ****************** inser CLR.L D0 MOVEA.L A0,A1 NEXT TST.B (A1)+ BEQ finchaine ADDQ.B #1,D0 BRA NEXT finchaine JSR deplacer MOVE.B #'*',(A0)+ RTS ***********Deuxième sous‐programme ****************** deplacer ADDQ.B #1,D0 suite MOVE.B ‐(A1),(A0,D0) DBRA D0,suite RTS ********** Exemple d'application ******************** ORG Adchaine DC.B 'Algérie vA en Avant',00 END
II.3. 6 Les exceptions: II.3.6.1 Définition: On appelle exception ou TRAP, un déroutement du programme qui correspond: à l’exécution d’interruption (interruption externe ou matérielle); à l’exécution d’instruction TRAP (interruption interne ou logicielle); à l’exécution de conditions spéciales (ex: division par zéro, erreur adresse…); A chaque exception est associé un numéro de vecteur qui donne l’adresse du vecteur associé en le multipliant par 4. II.3.6.2 Les vecteurs d’exception: Les vecteurs d’exception sont des positions mémoire dans lesquelles le CPU32 recherche l’adresse d’un sous-programme qui traite l’exception. II.3.6.3 Traitement d’une exception: Le traitement d’une exception se déroule en 4 étapes avec des variantes selon son origine: 1. Copie temporaire du registre d’état dans un registre interne, mettre le bit S=1 (les exceptions sont traitées en mode superviseur) et T0=T1=0 (inhibant le mode trace). 2. Obtention du numéro de vecteur et détermination de l’adresse du vecteur d’exception.
3. Sauvegarde du contexte actuel du processeur dans la pile superviseur, trois mots sont sauvegardés. 16 bits
SSP pendant l’exception Æ
SR PC(haut) PC(bas)
SSP avant l’exception Æ
adr‐6 adr‐4 adr‐2 adr
4- Recherche de l’adresse de début du programme d’exception dans la table des vecteurs.
II.3.6.4 Les interruptions: ¾ La CPU32 traite les interruptions comme un type d’exception asynchrone. En conséquence, il leur affecte sept niveaux de priorité d’interruption, sept vecteurs d’interruption automatiques et 192 vecteurs d’interruption assignables. Toutes les interruptions avec des priorités inférieures à sept peuvent être masquées par le champ de priorité d’interruption (PI) dans le registre d’état. ¾ Il y a sept signaux de demande d’interruption ( IRQ [7 d’interruption des signaux correspond à une PI.
: 1]
). Chaque demande
¾ Le niveau 7 a la plus haute priorité, il est non-masquable et est sensible au front du signal. ¾Les niveaux 1 à 6 sont masquables et sont sensible à l’état 0 ou 1 du signal. ¾ Le niveau 0 indique qu’aucune demande d’interruption n’est en cours.
Une demande d’interruption est validée après au moins deux périodes consécutives d’horloge. Une validation de demande ne cause pas immédiatement le traitement de l’interruption mais elle est laissée en suspens. Les demandes en suspens sont traitées à la fin d’une instruction ou quand le traitement d’une exception de haute priorité est terminé. II.3.6.5 Traitement d’interruption: Si la priorité de l’interruption en attente est supérieure à celle en cours, la séquence de traitement de cette interruption est comme suit: 9 copie du registre d’état; 9 mise de S à 1; 9 mise de T0 et T1 à 0; 9 le masque du registre d’état est mis au niveau de l’interruption prise en compte; 9 le processeur recherche le numéro du vecteur, entre dans le cycle de reconnaissance d’interruption, affiche le niveau de l’interruption ADDR[3:1] et met les lignes de code fonction FC[2:0]=%111. Deux cas se présentent:
• La vectorisation automatique: Une logique externe demande une vectorisation automatique par envoi du signal AVEC vers le processeur. Ce dernier génère alors le numéro du vecteur de manière interne en fonction du niveau de l’interruption. • La vectorisation non automatique: Une logique externe fournit le numéro du vecteur, le place sur le bus de données et termine son transfert en affirmant DSACK . Dans les deux cas, si une logique externe délivre une erreur bus ( BERR est affirmé), cela signifie que l’interruption est parasite; la CPU32 générera alors le numéro du vecteur de l’interruption parasite. 9 Ensuite, viennent les sauvegardes du PC et de SR dans la pile superviseur. 9 Enfin, on effectue la lecture du vecteur qui est placé dans le PC. C’est l’adresse du sous-programme de traitement de l’interruption.