440 likes | 555 Views
CONTENU DU COURS. Sommaire de la Section B.1. B.1 Langage assembleur et programmation structurée: Processus d’assemblage Directives de compilation Modes d’adressage Jeu d’instructions Boucles Piles Sous-routines: appel et passage de paramètres Sous-routines utilitaires du D-BUG12
E N D
CONTENU DU COURS GPA770: Microélectronique appliquée Éric Granger
Sommaire de la Section B.1 B.1Langage assembleur et programmation structurée: • Processus d’assemblage • Directives de compilation • Modes d’adressage • Jeu d’instructions • Boucles • Piles • Sous-routines: appel et passage de paramètres • Sous-routines utilitaires du D-BUG12 • Programmation structurée GPA770: Microélectronique appliquée Éric Granger
B.1(5) Boucles • déf.: structure logicielle qui permet de réaliser le contrôle de flots (i.e., itérations) dans un programme • équivalence en langage C: • for(expression){calculs répétitifs} • While(expression){calculs répétitifs} • do{calculs répétitifs} while(expression) • Utilité de la boucle: • remplace une série de calculs répétitifs par un programme (code machine) compact • mais nécessite des calculs supplémentaires (e.g., compteur, tests d’arrêt) GPA770: Microélectronique appliquée Éric Granger
B.1(5) Boucles • Étapes pour réaliser une boucle while ou for: • initialiser les conditions liées à l’expression de la boucle (compteurs, etc.) • évaluer l’expression de la boucle (e.g., comparer la valeur du compteur avec une limite) • sortir de la boucle si l’expression est fausse • effectuer les calculs répétitifs spécifiés • réviser les conditions liées à l’expression de la boucle (e.g., incrémenter le compteur) • retourner à l’étape 2 GPA770: Microélectronique appliquée Éric Granger
B.1(5) Boucles • Étapes pour réaliser une boucle do-while: • initialiser les conditions liées à l’expression de la boucle (compteurs, etc.) • effectuer les calculs répétitifs spécifiés • réviser les conditions liées à l’expression de la boucle (e.g., incrémenter le compteur) • évaluer l’expression de la boucle (e.g., comparer la valeur du compteur avec une limite) • sortir de la boucle si l’expression est fausse • retourner à l’étape 2 GPA770: Microélectronique appliquée Éric Granger
B.1(5) Boucles • Exemple: calculer la somme de 10 nombres étiquette op-code opérant(s) commentaires LDAB #$00 ; remise à 0 de B LDX #$800 ; initialise l’index IX LDAA #$00 ; initialise compteur de boucles CHECK: CMPA #$0A ; condition: (A) = $OA? BEQ STOP ; si oui, sortir de la boucle ADDB 0,X ; effectuer une somme: B+(IX) INX ; incrémenter l’index IX INCA ; incrémenter le compteur BRA CHECK ; prochaine itération de boucle STOP: STAB SUM ; stocker B dans variable SUM GPA770: Microélectronique appliquée Éric Granger
Sommaire de la Section B.1 B.1Langage assembleur et programmation structurée: • Processus d’assemblage • Directives de compilation • Modes d’adressage • Jeu d’instructions • Boucles • Piles • Sous-routines: appel et passage de paramètres • Sous-routines utilitaires du D-BUG12 • Programmation structurée GPA770: Microélectronique appliquée Éric Granger
B.1(6) Piles • déf.: structure FILO en mémoire RAM qui est réservée pour stocker des variables temporaires • Utilité: • programmeur: permet le stockage temporaire des registres du CPU lors de l’exécution d’un programme • CPU: permet de gérer l’exécution de sous-routines et RSI • SP − pointeur de pile à 16-bits: • contient l’adresse mémoire du sommet de la pile • mécanisme qui contrôle l’accès à la pile • sommet de la pile ≡adresse mémoire correspondant au dernier élément placé/repéré sur la pile GPA770: Microélectronique appliquée Éric Granger
B.1(6) Piles • Structure de données First-In, Last-Out (FILO): GPA770: Microélectronique appliquée Éric Granger
B.1(6) Piles • Opérations pour la gestion d’une pile: • PUSH– des données sont placées au sommet: • avant qu’un octet de données soit placé au sommet, le contenu de SP est décrémenté de 1: SP = SP – 1 • PULL– des données sont pris du sommet: • après qu’un octet soit repéré du sommet, le contenu de SP est incrémenté de 1: SP = SP + 1 GPA770: Microélectronique appliquée Éric Granger
B.1(6) Piles • Initialisation d’une pile: • le programmeur déclare l’emplacement initial du SP • on déclare comme (adresse max + 1) dans la plus grande plage de RAM: • MC9S12C32 en labo–prendre l’adresse $1000 (car 2 koctets de RAM: $0800 - $0FFF) • Exemple: étiquette op-code opérant(s) commentaires STACKTOP EQU $1000; directive .... .... .... LDS #STACKTOP; initialise le SP au début GPA770: Microélectronique appliquée Éric Granger
B.1(6) Piles • PUSH− placer le contenu de registres CPU au sommet de la pile • PSHA, PSHB et PSHC: instructions pour placer le contenue de A, B, et CCR dans 1 octet au sommet de la pile • SP – 1 → SP • A, B ou CCR → mém(SP) • PSHD, PSHY et PSHX: instructions pour placer le contenue de D, IX, et IY dans 2 octets au sommet de la pile • SP – 2 → SP • (A:B), (IXH:IXL) ou (IYH:IYL) → (mém(SP): mém(SP+1)) • les instructions PSHxne modifient pas le CCR GPA770: Microélectronique appliquée Éric Granger
B.1(6) Piles • PULL− repérer le contenu au sommet de la pile dans des registres CPU • PULA, PULB et PULC: instructions pour prendre 1 octet du sommet de la pile, et le charger dans A, B et CCR • mém(SP) → A, B ou CCR • SP + 1 → SP • PULD, PULY et PULX: instructions pour prendre 2 octets du sommet de la pile, et les charger dans D, IX et IY • (mém(SP): mém(SP+1)) → (A:B), (IXH:IXL) ou (IYH:IYL) • SP + 2 → SP • Attention, l’instruction PULC modifie le CCR GPA770: Microélectronique appliquée Éric Granger
B.1(6) Piles • Exemple: décrire la fonction de ce code? étiquette op-code opérant(s) commentaires LDS #$1000 ; initialise SP LDAA #$12 ; valeur 8 bits → A LDAB #$A1 ; valeur 8 bits → B PSHA ; A → octet de pile PSHB ; B → octet de pile PULA ; octet de pile → A PULB ; octet de pile → B GPA770: Microélectronique appliquée Éric Granger
Sommaire de la Section B.1 B.1Langage assembleur et programmation structurée: • Processus d’assemblage • Directives de compilation • Modes d’adressage • Jeu d’instructions • Boucles • Piles • Sous-routines: appel et passage de paramètres • Sous-routines utilitaires du D-BUG12 • Programmation structurée GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines • déf.: un module indépendant et séparé du programme principal, qui est conçu pour effectuer une tâche spécifique • équivalent à une fonctionen langage C • Utilité de la sous-routine: • réutilisation: on conçoit un programme générique une fois, et on peut l’appeler dans un programme quelconque • lisibilité: permet de remplacer une tâche répétitive par un appel de sous-routine • ressources: donne un code plus compacte, mais nécessite des calculs supplémentaires GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines • Caractéristiques d’une bonne sous-routine: • conservation de l’état du CPU: • elle devrait conserver (restaurer) les registres pertinents du CPU lors de l’appel (le retour) • portabilité et indépendance des données et du code: • elle devrait être générique et indépendante du programme principal (et d’autres programmes) • elle devrait éviter les adresses mémoire spécifiques, et les modes DIR et EXT (utilisation de variables locales) GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines • Étapes d’un appel: GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines • Instructions pour appeler une sous-routine: • BSR: stocker le PC et brancher à une sous-routine • brancher vers l’adresse indiquée par une valeur de décalage • décalage entre -128 et 127 adresses (nombre signé de 8 bits) • utilise normalement une étiquette, plutôt qu’une valeur numérique • JSR: stocker le PC et aller à une sous-routine • permet d’aller à une adresse quelconque de la mémoire avec tous les modes d’adressage • plus lent, consomme plus de mémoire • Instruction pour retourner d’une sous-routine • RTS: retourner d’une sous-routine et restaurer le PC • récupérer l’adresse de retour de la sous-routine de la pile GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines Passage de paramètres: GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines • Techniques pour passage de paramètres: • Technique 1 – passage par valeur: utilise les accumulateurs (A et B) et les indexes (IX et IY) pour transmettre la valeurs des paramètres • appel– la sous-routine accède à une copie des valeurs originales dans A, B, IX ou IY • retour– la sous-routine peut retourner des valeurs au programme principal dans les mêmes registres • Avantages et inconvénients: • commun et simple • mais, petit nombre et dimensions de valeurs qu’on peut passer (6 octets max.) • besoin de coordination entre programme principal et sous-routine pour éviter l’écrasement aux registres GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines Exemple: passage par valeur étiquette op-code opérant(s) commentaires ROMStart: EQU $4000 ; début ROM RAMStart: EQU $0800 ; début RAM ORG RAMStart NUM_ONE: DC.B $23 ; début constantes NUM_TWO: DC.B $3F ORG ROMStart ; début programme Début: LDS #$1000 ; initialise le SP LDAA NUM_ONE LDAB NUM_TWO BSR SWAP ; brancher vers sous-routine STAA NUM_ONE STAB NUM_TWO FIN: BRA FIN GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines • sous-routine SWAP: étiquette op-code opérant(s) commentaires SWAP: PSHA ; stocke A → octet de pile PSHB ; stocke B → octet de pile PULA ; restaure octet de pile → A PULB ; restaure octet de pile → B RTS ; retour de sous-routine GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines • Techniques pour passage de paramètres: • Technique 2 – passage par référence: fournit les adresses mémoire qui contiennent les valeurs des paramètres • appel– la sous-routine accède à ces valeurs à partir de leurs adresses mémoire • retour– la sous-routine peut retourner des valeurs dans des adresses référencées pendant l’exécution • Avantages et inconvénients: • peut passer un grand nombre de valeurs (bon pour des listes) • pratique si on veut modifier les valeurs originales pendant l’exécution • peut corrompre la mémoire GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines • Exemple: passage par référence • étiquette op-code opérant(s) commentaires ORG $800 FIRST: DS.B 10 ; source SECOND: DS.B 10 ; destination ORG $4000 ; début constantes NUM_DATA: DC.B $0A ; nombre de bytes à copier ; début programme Début: LDS #$1000 ; initialise le SP LDAA NUM_DATA ; $0A → A LDX #FIRST ; source: $800 → IX LDY #SECOND ; destination: $80A→ IY JSR COPY ; saute vers la sous-routine FIN: BRA FIN GPA770: Microélectronique appliquée Éric Granger
B.1(7) Sous-routines • sous-routine COPY: étiquette op-code opérant(s) commentaires ;PASSAGE PAR VALEUR COPY: CMPA #$00 ; vérifier la condition d’arrêt BEQ DONE ; si A = $00, DONE ;PASSAGE PAR RÉFÉRENCE LDAB 1,X+ ; charger de source, post incré. STAB 1,Y+ ; stocker en destin., post incré. DECA BRA COPY DONE: RTS; retour de sous-routine GPA770: Microélectronique appliquée Éric Granger
Sommaire de la Section B.1 B.1Langage assembleur et programmation structurée: • Processus d’assemblage • Directives de compilation • Modes d’adressage • Jeu d’instructions • Boucles • Piles • Sous-routines: appel et passage de paramètres • Sous-routines utilitaires du D-BUG12 • Programmation structurée GPA770: Microélectronique appliquée Éric Granger
B.1(8) Sous-routines D-BUG12 • D-BUG12: programme analyse/déverminage du 68HC12 • réside dans la mémoire ROM en permanence • consiste de sous-routines. • Sous-routines: • manipuler et visualiser la mémoire et les registres du CPU • exécuter et déverminer le programme • afficher un message ou le contenu mémoire à l’écran • écrire des données en mémoire • initialiser l’adresse d’une RSI GPA770: Microélectronique appliquée
B.1(8) Sous-routines D-BUG12 GPA770: Microélectronique appliquée Éric Granger
B.1(8) Sous-routines D-BUG12 • Sous-routines utilitaires communes: • getchar: retourne un caractère tapé au clavier dans le registre B. • putchar: transmet le caractère contenu dans le registre B au terminal. • out2hex: traduit l’octet hexadécimal de l’argument en code ASCII et le transmet au terminal. • out4hex: traduit deux octets hexadécimaux en code ASCII et les transmet au terminal. • printf: transmet un phrase débutant à l’adresse de l’argument jusqu’à la rencontre du caractère terminateur hexadécimal $00. GPA770: Microélectronique appliquée Éric Granger
B.1(8) Sous-routines D-BUG12 • Passage de paramètres aux routines utilitaires de D-BUG12 : sous-routine(1, 2, 3, ..., n) • on traite les paramètres comme des valeurs à 16 ou 8 bits • le 68HC12 utilise le registre D pour le premier paramètre et la pile pour les autres • Étapes principales: • les paramètres doivent être placés dans D et sur la pile. • l’adresse de vecteur de la sous-routine doit être chargé dans IX ou IY. • invoquer la sous-routine avec l’instruction JSR • ajuster le SP avec les instructions PULX ou LEAS GPA770: Microélectronique appliquée Éric Granger
B.1(8) Sous-routines D-BUG12 • Exemple: Utilisez l’utilitaire sous-routine out2hex() pour afficher 45 sur l’écran d’ordinateur • doit stocker $0045 (conversion de 8 à 16 bits) dans (D) avant d’exécuter la sous-routine étiquette op-code opérant(s) commentaires LDD #$0045 ;valeur à afficher LDX $FE16 ; adresse de sous-routine JSR 0,X ; appel la sous-routine GPA770: Microélectronique appliquée Éric Granger
Sommaire de la Section B.1 B.1Langage assembleur et programmation structurée: • Processus d’assemblage • Directives de compilation • Modes d’adressage • Jeu d’instructions • Boucles • Piles • Sous-routines: appel et passage de paramètres • Sous-routines utilitaires du D-BUG12 • Programmation structurée GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Objectifs d’un programmeur: • contraintes de performance pour obtenir un code efficace: • écrire le programme le plus compact − minimiser la l’espace mémoire consommé • écrire le programme le plus rapide − minimiser le nombre le cycle machines ou temps d’exécution • style de programmation: • écrire un programme qui est facile à comprendre, avec commentaires, etc. • écrire un programme qui est flexible et facile à modifier. • rencontrer l’échéancier du projet GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Conception structurée: • objectif: outils pour transformer les besoins d’un système en plan pour réaliser le système • bien comprendre les besoins... • Conseils pour la conception de programmes: • concevoir selon la technique ‘diviser pour régner’ • diviser un programme en petites parties • combiner les parties pour résoudre le problème original • réfléchir à l’organisation des données en mémoire • outil: carte de mémoire • réfléchir à la façon de traiter les données • outil: diagramme de flots de données GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Technique ‘diviser pour régner’: • diviser une tâche complexe en petites sous-tâches, résoudre les sous-tâches, et combiner pour résoudre la tâche originale • conception de haut-à-bas, mise en oeuvre bas-à-haut • avantages de cette technique: • permet de se concentrer sur chaque sous-tâche séparément, plutôt que d’aborder une tâche complexe d’un coup • plus facile de tester et d’évaluer chaque sous-tâche de façon individuelle GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Exemple − écrire un bon rapport technique: • préparer un sommaire pour donner une bonne vue d’ensemble (dès le début) • écrire le rapport un paragraphe/section à la fois • Conception structurée: • on peut diviser un programme en parties (i.e., sous-routines) ‘simples’ et les combiner, pour ensuite concevoir un programme complexe • pseudo-code: décrit la fonction de haut-niveau de chaque partie simple • diagramme de flots de données: pour définir la relation fonctionnelle entre les parties simples GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Diagramme de flots de données: • outil graphique pour: • visualiser le traitement des données, la relation entre les parties fonctionnelles, etc. • documenter le flux du programme • construit en connectant des symboles primaires avec des arcs dirigés (flèches) • symboles primaires: représentent les actions prises sur les données • arcs dirigés: indique la progression dans le programme GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Symboles primaires d’un diagramme de flots de données: Flux Fin Début Séquence d’actions Décision GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Structures fondamentales dans un programme: • séquence: • effectue une tâche après l’autre en séquence • groupe d’instructions qui s’exécutent un après l’autre. • ‘if-then-else’: • effectue un décision entre deux ou plusieurs options • permet de tester une condition, pour décider du groupe d’instructions à effectuer • ‘do-while’: • répète son traitement aussi longtemps qu’une condition ne soit satisfaite GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Exemple: structure de flot de données ‘if-then’ GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Exemple: structure de flot de données ‘if-then-else’ GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Exemple: structure de flot de données ‘do-while’ GPA770: Microélectronique appliquée Éric Granger
B.1(9) Programmation structurée • Exemple: structure de flot de données ‘while’ GPA770: Microélectronique appliquée Éric Granger