Sous-routines

publicité
CONTENU DU COURS
B. CONCEPTS
LOGICIELS
A. MISE EN
CONTEXTE
(PROGRAMMATION
EN ASSEMBLEUR ET
EN
Université du Québec
École de technologie supérieure
C)
C. CONCEPTS
MATÉRIELS
(COMPOSANTS D’UN
MICROCONTRÔLEUR)
GPA770: Microélectronique appliquée
Éric Granger
B.1b-1
Sommaire de la Section B.1
B.1 Langage assembleur et programmation
structurée:
1) Processus d’assemblage
2) Directives de compilation
3) Modes d’adressage
4) Jeu d’instructions
5) Boucles
6) Piles
7) Sous-routines: appel et passage de paramètres
8) Sous-routines utilitaires du D-BUG12
9) Programmation structurée
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-2
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)
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-3
B.1(5) Boucles
Étapes pour réaliser une boucle while ou for:
1. initialiser les conditions liées à l’expression de la
boucle (compteurs, etc.)
2. évaluer l’expression de la boucle (e.g., comparer la
valeur du compteur avec une limite)
3. sortir de la boucle si l’expression est fausse
4. effectuer les calculs répétitifs spécifiés
5. réviser les conditions liées à l’expression de la
boucle (e.g., incrémenter le compteur)
6. retourner à l’étape 2
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-4
B.1(5) Boucles
Étapes pour réaliser une boucle do-while:
1. initialiser les conditions liées à l’expression de la
boucle (compteurs, etc.)
2. Effectuer les calculs répétitifs spécifiés
3. réviser les conditions liées à l’expression de la
boucle (e.g., incrémenter le compteur)
4. évaluer l’expression de la boucle (e.g., comparer
la valeur du compteur avec une limite)
5. sortir de la boucle si l’expression est fausse
6. retourner à l’étape 2
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-5
B.1(5) Boucles
Exemple: calculer la somme de 10 nombres
étiquette
CHECK:
STOP:
op-code
opérant(s)
commentaires
LDAB
LDX
LDAA
CMPA
BEQ
ADDB
INX
INCA
BRA
STAB
#$00
#$800
#$00
#$0A
STOP
0,X
; remise à 0 de B
; initialise l’index IX
; initialise compteur de boucles
; condition: (A) = $0A?
; si oui, sortir de la boucle
; effectuer une somme: B+(IX)
; incrémenter l’index IX
; incrémenter le compteur
; prochaine itération de boucle
; stocker B dans variable SUM
Université du Québec
École de technologie supérieure
CHECK
SUM
GPA770: Microélectronique appliquée
Éric Granger
B.1b-6
Sommaire de la Section B.1
B.1 Langage assembleur et programmation
structurée:
1) Processus d’assemblage
2) Directives de compilation
3) Modes d’adressage
4) Jeu d’instructions
5) Boucles
6) Piles
7) Sous-routines: appel et passage de paramètres
8) Sous-routines utilitaires du D-BUG12
9) Programmation structurée
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-7
B.1(6) Piles
déf.: structure FILO en mémoire RAM qui est
réservée pour stocker des variables temporaires
Utilité:
1. programmeur: permet le stockage temporaire des
registres du CPU lors de l’exécution d’un programme
2. 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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-8
B.1(6) Piles
Structure de données First-In, Last-Out (FILO):
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-9
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-10
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-11
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
1. SP – 1 → SP
2. 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
1. SP – 2 → SP
2. (A:B), (IXH:IXL) ou (IYH:IYL) → (mém(SP): mém(SP+1))
les instructions PSHx ne modifient pas le CCR
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-12
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
1. mém(SP) → A, B ou CCR
2. 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
1. (mém(SP): mém(SP+1)) → (A:B), (IXH:IXL) ou (IYH:IYL)
2. SP + 2 → SP
Attention, l’instruction PULC modifie le CCR
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-13
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-14
Sommaire de la Section B.1
B.1 Langage assembleur et programmation
structurée:
1) Processus d’assemblage
2) Directives de compilation
3) Modes d’adressage
4) Jeu d’instructions
5) Boucles
6) Piles
7) Sous-routines: appel et passage de paramètres
8) Sous-routines utilitaires du D-BUG12
9) Programmation structurée
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-15
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 fonction en 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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-16
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)
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-17
B.1(7) Sous-routines
Étapes d’un appel:
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-18
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-19
B.1(7) Sous-routines
Passage de paramètres:
Programme
principal, passe
des paramètres
Sous-routine A
Programme
principal peut
recevoir un
paramètre
Université du Québec
École de technologie supérieure
Sous routine A
reçoit des
paramètres
...
Action 1
Action 2
Action 3
....
peut retourner des
paramètres
RTS
N.B. les bits
d’état du CCR
sont modifiés.
GPA770: Microélectronique appliquée
Éric Granger
B.1b-20
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-21
B.1(7) Sous-routines
Exemple: passage par valeur
étiquette
op-code
RAMStart
$01
$01
; début varibles
NUM_ONE:
NUM_TWO:
ORG
DS.B
DS.B
ORG
LDS
MOVB
MOVB
.
.
LDAA
LDAB
BSR
STAA
STAB
BRA
ROMStart
#$1000
#$23,NUM_ONE
#$45,NUM_TWO
; début programme
; initialise le SP
Début:
FIN:
Université du Québec
École de technologie supérieure
opérant(s)
NUM_ONE
NUM_TWO
SWAP
NUM_ONE
NUM_TWO
FIN
commentaires
; brancher vers sous-routine
GPA770: Microélectronique appliquée
Éric Granger
B.1b-22
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-23
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-24
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:
FIN:
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
BRA
FIN
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-25
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
DONE:
RTS
Université du Québec
École de technologie supérieure
COPY
; retour de sous-routine
GPA770: Microélectronique appliquée
Éric Granger
B.1b-26
Sommaire de la Section B.1
B.1 Langage assembleur et programmation
structurée:
1) Processus d’assemblage
2) Directives de compilation
3) Modes d’adressage
4) Jeu d’instructions
5) Boucles
6) Piles
7) Sous-routines: appel et passage de paramètres
8) Sous-routines utilitaires du D-BUG12
9) Programmation structurée
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-27
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
B.1b-28
B.1(8) Sous-routines D-BUG12
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-29
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.
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-30
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:
1. les paramètres doivent être placés dans D et sur la pile.
2. l’adresse de vecteur de la sous-routine doit être chargé
dans IX ou IY.
3. invoquer la sous-routine avec l’instruction JSR
4. ajuster le SP avec les instructions PULX ou LEAS
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-31
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
JSR
$FE16
0,X
; adresse de sous-routine
; appel la sous-routine
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-32
Sommaire de la Section B.1
B.1 Langage assembleur et programmation
structurée:
1) Processus d’assemblage
2) Directives de compilation
3) Modes d’adressage
4) Jeu d’instructions
5) Boucles
6) Piles
7) Sous-routines: appel et passage de paramètres
8) Sous-routines utilitaires du D-BUG12
9) Programmation structurée
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-33
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-34
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:
1. concevoir selon la technique ‘diviser pour régner’
 diviser un programme en petites parties
 combiner les parties pour résoudre le problème
original
2. réfléchir à l’organisation des données en mémoire
 outil: carte de mémoire
3. réfléchir à la façon de traiter les données
 outil: diagramme de flots de données
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-35
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-36
B.1(9) Programmation structurée
Exemple − écrire un bon rapport technique:
1. préparer un sommaire pour donner une bonne vue
d’ensemble (dès le début)
2. écrire le rapport un paragraphe/section à la fois
Conception structurée:
on peut diviser un programme en parties (i.e., sousroutines) ‘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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-37
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
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-38
B.1(9) Programmation structurée
Symboles primaires d’un diagramme de flots de
données:
Flux
Fin
Début
Séquence d’actions
Université du Québec
École de technologie supérieure
Décision
GPA770: Microélectronique appliquée
Éric Granger
B.1b-39
B.1(9) Programmation structurée
Structures fondamentales dans un programme:
1. 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.
2. ‘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
3. ‘do-while’:
répète son traitement aussi longtemps qu’une
condition ne soit satisfaite
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-40
B.1(9) Programmation structurée
Exemple: structure de flot de données ‘if-then’
#10
#5
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-41
B.1(9) Programmation structurée
Exemple: structure de flot de données ‘if-then-else’
#10
#5
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-42
B.1(9) Programmation structurée
Exemple: structure de flot de données ‘do-while’
1,X+
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
B.1b-43
B.1(9) Programmation structurée
Exemple: structure de flot de données ‘while’
L2:
Université du Québec
École de technologie supérieure
GPA770: Microélectronique appliquée
Éric Granger
#LEN
L2
L3
1,X+
B.1b-44
Téléchargement