19/03/2009 Architecture des systèmes à processeurs – IUT GEII (ISI‐II2) ‐2 Christophe BLANC www.christophe‐blanc.info IUT de Montluçon Département Génie Electrique et Informatique Industrielle Architecture des systèmes à processeurs MODÈLE È DE PROGRAMMATION D’UN ’ PROCESSEUR I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 2 1 19/03/2009 Codage d’une instruction M32C87 Renesas MOV.size:G Source, Destination C 9 8 B 1 1 0 0 1 0 0 1 1 0 0 0 1 0 1 1 MOV.W:G R2, R0 ; Transférer contenu de R2 dans R0 Exécution d’un programme élémentaire (notation symbolique) Adresse $FE0304 Étiquette AdDeb $FE0306 $FE0307 $FE030A Programme Source Assembleur Opération Opérande Commentaire ADD.W MOV.W MOV.W JMP R1, R0 R0, R1 R0, ‐2[SP] AdDeb Zone mémoire réservée Zone mémoire réservée aux instructions ; R0 <‐ R0 + R1 ; R1 <‐ R0 ; ‐2(SP) <‐ D0 ; PC <‐ AdDeb Mnémoniques à la place d d de données binaires é bi i I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 4 2 19/03/2009 Exécution du programme Instruction : ADD.W R1, R0 PC FE0304 Rechercher Instruction RI PC FE0306 FE0304 $FE0304 ADD.W $FE0306 MOV.W R0 0013 $FE0307 MOV.W R1 0022 $FE030A JMP.B ADD.W R1, R0 R1, R0 R0, R1 R0, ‐2[SP] AdDeb +2 ADD Exécuter Instruction RI Mémoire réservée aux instructions D0 0013 0035 D1 0022 $000700 $000702 Mémoire réservée aux données I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 5 Exécution du programme Instruction : MOV.W R0, R1 PC FFE0306 0306 Rechercher Instruction RI PC Mémoire réservée aux instructions FE0306 FE0307 $FE0304 ADD.W $FE0306 MOV.W R0 0035 $FE0307 MOV.W R1 0022 $FE030A JMP.B R1, R0 R0, R1 R0, ‐2[SP] AdDeb +1 $000700 Exécuter Instruction RI MOV.W R0, R1 D0 0035 D1 0035 0022 $000702 Mémoire réservée aux données I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 6 3 19/03/2009 Exécution du programme Instruction : MOV.W R0, -2[SP] PC FE0307 Rechercher Instruction RI PC Mémoire réservée aux instructions FE030A FE0307 $FE0304 ADD.W $FE0306 MOV.W R0 0035 $FE0307 MOV.W R1 0035 $FE030A JMP.B +3 $000700 Exécuter Instruction RI MOV.W R0,‐2[SP] R1, R0 R0, R1 R0,‐2[SP] AdDeb R0 35 R1 35 35 00 SP‐> $000702 Mémoire réservée aux données I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 7 Exécution du programme Instruction : JMP.B AdDeb PC FFE030A 030A Rechercher Instruction RI PC FE030C FE030A FE0304 Exécuter Instruction RI Mémoire réservée aux instructions JMP.B AdDeb $FE0304 ADD.W $FE0306 MOV.W R0 0035 $FE0307 MOV.W R1 0035 $FE030A JMP.B R1, R0 R0, R1 R0, ‐2[SP] AdDeb +2 $000700 R0 0035 R1 0035 3 5 00 $000702 Mémoire réservée aux données I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 8 4 19/03/2009 Types de Données • Le µ P traite des données binaires non typées – C ’est le programmeur qui définit le type des données p g q yp manipulées par : • le choix des instructions, • la logique de l ’algorithme. • Les instructions traitent les données suivantes : – Entiers signés sur 8, 16, ou 32 bits – Entiers non signés sur 8, 16, ou 32 bits – String – Nombres exprimés en virgule flottante (réels) I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 9 Data Arrangement Data Arrangement in Register 5 19/03/2009 Data Arrangement Data Arrangement in Memory Data Arrangement Data Arrangement in Memory 6 19/03/2009 Étapes de développement d ’un projet industriel • Cahier des charges à respecter impérativement – Document contractuel entre le concepteur et son client • Dossier logiciel – Analyse fonctionnelle – Découpage en modules – Communication entre les modules • Codage des programmes prenant en compte : Codage des programmes prenant en compte : – Les contraintes techniques – Les spécifications du client – Les compétences et les habitudes du personnel – Les disponibilités en outils de développement I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 13 État de l’art Avec pour objectif : minimiser les coûts • Séries faibles • Minimiser les coûts de développement – Codage en langage évolué • C, C++, Java, Visual Basic, … • Environ 95 % du code • Parties critiques – Codage en assembleur • TTemps de réponse minimum d é i i – Taille du code minimum • Accès aux entrées sorties • Grandes séries • Minimiser le coût – des composants d t – de fabrication • Taille mémoire – Inférieure aux seuils justifiés par des aspects économiques – Codage langage C en général • Employé au maximum Ch i d ffi • Choix de structures efficaces – Codage en assembleur • Taille en dessous des seuils • Temps de réponse critiques I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 14 7 19/03/2009 Programmation modulaire • Communication entre modules codés en langage évolué Module Module L.E. Communication Module Module L.E. Par la Pile LIFO Communication entre modules codés en langage assembleur Module L.Asm. Communication Module L.Asm. Registre du µ P Communication entre modules codés en : Langage assembleur Langage évolué Module L.E. I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 15 Communication Par la Pile LIFO Module L.Asm. Mécanismes d’appel et de retour de sous programme • Pour tous les langages de programmation – Assembleurs, évolués (C, Basic, .), objets (C++, Java, .) – Un programme : suite d ’appels de sous programmes Description macroscopique Description détaillée • ••••• • ••••• • Instr. Avant Appel • Instr. d ’Appel • Instr. Après Appel • ••••• Problèmes à résoudre Se brancher à l ’adresse de début du sous programme Î Ménager l ’avenir en mémorisant l ’adresse de retour Î Permettre l ’imbrication de sous programmes Î Début Sous Prg. ••••• ••••• ••••• ••••• Fin Sous Prg. ••••• I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 16 8 19/03/2009 Pile LIFO (Last In, First Out) • Description – Zone mémoire dont le contenu est géré par : • Un pointeur de pile (stack pointer) ‐ registre d’adresse spécifique • Deux primitives : – Empiler (Objet) – Dépiler (Objet) • Hypothèses théoriques – Instruction codée sur une seule ligne mémoire – Largeur de la mémoire (nombre de bits en sortie) identique à la taille du Largeur de la mémoire (nombre de bits en sortie) identique à la taille du compteur ordinal (PC) – Notation symbolique I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 17 Mécanisme d ’appel/Retour d ’un sous programme • Algorithme É Étiquette AdAppel AdD bS P AdDebSousPrg AdFinSousPrg Instruction • ••••• • ••••• • AppelSousPrg • ••••• • ••••• • ••••• • ••••• • ••••• • ••••• • FinSousPrg • ••••• • ••••• I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 18 9 19/03/2009 Instruction d’appel de sous programme Avant exécution PC Après exécution +1 AdAppel PC AdDebSousPrg AdAppel + 1 n‐1 n‐1 SP n SP AdAppel + 1 n+1 Mémoire vive n n+1 Mémoire vive Fonction réalisée Pil Pile Début LIFO • PC <— PC + 1 • SP <— SP ‐ 1 Prè‐décrémentation • (SP) <— PC • PC <— AdDebSousPrg Fin I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 19 Instruction de retour de sous programme Avant exécution PC Après exécution +1 AdFinSousPrg PC AdFinSousPrg+1 AdAppel + 1 n‐1 SP AdAppel + 1 AdAppel + 1 n n+1 Mémoire vive n‐1 SP Fonction réalisée Début • PC <— PC + 1 • PC <— (SP) n n+1 Mémoire vive Zone mémoire à ne Z é i à plus exploiter Post‐incrémentation • SP <— SP + 1 Fin I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 20 10 19/03/2009 Commentaires supplémentaires Mémoire Réservée à la Pile • Développement complet d’une application – Définir une zone de mémoire vive réservée à la pile – Initialiser le pointeur de pile en conséquence SP Développement d’une application à partir d ’un noyau déjà existant AdDebPile DébutSP1 Imbrication de sous programmes p g SP <— SpInit Zone mémoire vive réservée pour la pile déjà définie En conséquence, ne pas initialiser le pointeur de pile La structure de la pile LIFO permet cette imbrication Les principes doivent être adaptés aux caractéristiques de chaque microprocesseur • AppelSP1 • AppelSP11 DébutSP11 FinSP11 • AppelSP11 • AppelSP1 FinSP1 I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 21 Application Processeur M32C87 Mémoire Mots de 8 bits • Bus de donnée : 16 bits • Bus d B d ’adresse : 24 bits ’ d 24 bit Poids faibles – Convention Renesas Poids forts • Poids faibles en premier – Adresse paire • Poids forts en second – Adresse impaire Adresses croissantes Programme Source Assembleur Étiquette Opération DEBUT JSR ••••••• AdDebSsPrg NOP RTS Opérande AdDebSsPrg •••••• I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 22 11 19/03/2009 Codage des instructions (programme objet) JSR AdDebSsPrg Code instruction Code Opération Jump to Subroutine 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 Code Opérande NOP No Operation 7 6 5 4 3 2 1 0 1 1 0 1 1 1 1 0 Code instruction Code instruction RTS Return from Subroutine Code instruction 7 6 5 4 3 2 1 0 0 1 1 1 0 1 0 1 Hexadécimal C F 0 2 0 0 Hexadécimall D E Hexadécimal F D I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 23 Etat de la pile pendant l’exécution du programme Mémoire organisée en mots de 16 bits Adresses JSR AdDebSsPrg NOP RTS CF 00 …… …… …… DF …… DS …… …… …… DE …… …… FE0304 FE0306 FE0308 FE030A FE0410 FE0412 FE0414 Avant exécution de JSR Avant exécution de JSR Après exécution Après exécution PC 00 FE 03 04 00 FE 04 10 SP SP 07 03 FE 00 …… …… Avant exécution de RTS Après exécution PC 00 FE 04 12 00 FE 03 07 A7 Pile LIFO zz zz 000710 yy yy 000712 …… …… 000714 07 03 00710 FE 00 00712 …… …… 00714 SP 07 03 FE 00 …… …… zz zz 000710 yy yy 000712 … … 000714 I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 24 12 19/03/2009 Empilement et dépilement d’objets Solution • Objectifs – Décomposer une application en modules • Sous programme en langage assembleur équivalent à une procédure en langage évolué • Passage des paramètres par registres internes – Variables locales au module • Utilisation des registres internes (plus rapides) • Ne doivent pas interférer avec le programme appelant Sauvegarder le contenu des registres utilisés (variables locales) au début du sous programme Restituer le contenu des registres avant l’instruction de retour de sous programme Sauvegarder le contenu des registres qui servent de variables locales Paramètres en entrée (In) Paramètres en sortie (Out) Sous Programme Paramètres ( registres internes utilisés comme variables locales) transformés (In/Out) Restituer le contenu des registres I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 25 Empilement d’objets Hypothèse : taille objet = taille mémoire Avant exécution Objet Après exécution Contenu Objet Objet Contenu Objet n‐1 n‐1 SP n SP Contenu Objet n+1 Mémoire vive n n+1 Fonction réalisée Début Mémoire vive Pil Pile LIFO • SP <— SP ‐ 1 • (SP) <— Contenu Objet Fin Prè‐décrémentation I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 26 13 19/03/2009 Dépilement d’objet Même hypothèse Avant exécution Après exécution ? ? ? ? ? Objet Objet Contenu Objet n‐1 SP Contenu Objet n‐1 Contenu Objet n SP n+1 Mémoire vive n n+1 Mémoire vive Fonction réalisée Début Zone mémoire à ne Z é i à plus exploiter • Objet <— (SP) • SP <— SP + 1 Post‐incrémentation Fin I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 27 Application : réaliser un sous programme utilitaire • Objectif – Mise en œuvre facile • Méthode Méth d – Décrire l’action réalisée – Définir clairement l’interface de communication – Sauvegarder et restituer le contexte dans le sous programme utilitaire • Si impératifs de rapidité – Ne pas sauvegarder systématiquement les registres utilisés – Noter les registres détruits Algorithme général Début • Sauvegarder le contexte • Algorithme spécifique • ……… • ……… • ……… • Restituer le contexte Fin Registres utilisés dans l ’algorithme spécifique I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 28 14 19/03/2009 Mode d’adressage : adress register relative (registre d’adresse) MOV.L R3R1, [A0] Registre d ’adresse • Notation : R3R1 (( Ai )) A0 Case mémoire pointée par Ai FE 22 88 99 F E 04 0 0 99 88 $FE0400 22 1 1 $FE0402 Adresses toujours comptées en octets (8 bits) MOV.W #1FABh, [A1] A1 11 16 Bits ,[ ] MOV.B #50h, [A0] 05 0 0 AB 1F $FE0500 0 0 FE 0 0 400 A6 16 Bits $FE0502 50 16 Bits $FE0400 Adresse $2001 $FE0402 I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 29 Mode d’adressage : adress register relative (Stack Pointer) Registre SP MOVE.size R1, ‐n [SP] • Notation : ‐n [SP] Fonction réalisée : R1 9 8 7 6 SP 0 0 0 0 4 0 07 0 0 14 [SP‐n] <— Opérande n Fonction de la size de l ’opérande Î Î Î • B B • W • L n = 1 (Byte n 1 (Byte ‐ 1 octet) 1 octet) n = 2 (Word ‐ 2 octets) n = 4 (Long Word ‐ 4 octets) 76 98 $00712 $00714 $00716 16 Bits I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 30 15 19/03/2009 Mode d’adressage : adress register relative (Stack Pointer) MOVE.W 2[SP] , R3 Registre pointeur de pile • Notation : n[ SP ] SP 0 0 07 14 76 Fonction réalisée : 98 $00712 $00714 Opérande <— [SP+n] A B C D $00716 n Fonction de la taille de l ’opérande Î Î Î • B B • W • L n = 1 (Byte n 1 (Byte ‐ 1 octet) 1 octet) n = 2 (Word ‐ 2 octets) n = 4 (Long Word ‐ 4 octets) 16 Bits R3 A 2 3B C4 5 D I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 31 Registe d’état (FLG – Flag Register) Indicateurs modifiés après : Une instruction arithmétique Une instruction MOV Conséquence : Sauvegarder FLG en premier sur la pile : PUSHC FLG I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 32 16 19/03/2009 Application Sous Programme utilitaire Sauvegarder le contexte Cahier des charges PUSHC FLG Sous programme Sous programme SR SS Etat de la pile Avant Après Exécution Instruction UU Aucun contenu de registre modifié ! CCR SP Remarque MOVE.W L ’algorithme spécifique à la fonction réalisée utilise le registre R1 SP UU SSP 76 98 UU SS SS R1,-2(SP) R1 98 76 SP UU SS Restituer le contexte MOV.W -2[SP],R1 POPC FLG I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 33 Source L.E Source L.E Compiler Compiler Source L. Asm Source L. Asm Assembler Assembler Objet relogeable Objet relogeable Adresse xxxx ? Codes Instructions 0101110010101110 ……… 1100011000010100 0001110001101011 … Etiquette Opération Opérande Conv MOV.B #45h,R0l ……… ADD.B #$10,R1l ……… RTS void main (void) { int Cpt = 0 ; …… cin>> NbGroupes; …. } Mémoire du système à microprocesseur Interfaces d’entrées sorties Optimiser le code si nécessaire Chaîne de développement de logiciel Impératifs de rapidité Source L. Asm Source L. Asm Assembler Assembler Objet relogeable Objet relogeable Editer les liens Objet Exécutable b é bl Charger le code et mettre au point Adresse A8B6 Fixée Codes Instructions 0101110010101110 ……… 1100011000010100 ……… 0001110001101011 … L. E. Langage évolué (C, C++, …) L. Asm Langage assembleur 17 19/03/2009 Fonction assurée par chaque programme de la chaîne de développement • Un compilateur transforme un programme source écrit en langage évolué (ASCII) en source assembleur (ASCII) du microprocesseur cible microprocesseur cible Programme relogeable Programme translatable – Optimisation possible du langage assembleur généré par le compilateur Code objet Code objet Déplacer le programme dans la mémoire Déplacer le programme dans la mémoire • Un assembleur transforme le source assembleur en objet relogeable – Langage binaire dont les adresses peuvent être recalculées • L ’éditeur de liens lie tous les modules relogeables (modules créés par le programmeur bibliothèques) pour créer programmeur, bibliothèques) pour créer l ’objet exécutable – Langage binaire chargeable dans la mémoire du microprocesseur cible – Création de la table des symboles Editeur de liens Code objet modifié Code objet identique I.U.T. Montluçon — Département Génie Electrique et Informatique Industrielle — 35 18