TP 3 : Programmation en assembleur: Adressage indexé et

publicité
IUT GEII Rouen
TP II2
PARTIE A : ADRESSAGE INDEXE
On fera avant l'instruction une lecture du Port T (PTT), suivie d'un test: si la valeur est
différente de '3', alors, au lieu d'incrémenter, on va décrémenter. Il faudra également
s'assurer que l'index pointe toujours sur une valeur dans la table, et au besoin le
réinitialiser (voir algorigramme partiel ci-dessous)
On souhaite avoir un programme qui affiche les motifs suivants sur les 8 dels connectées
sur le Port B du processeur.
Attention, la réinitialisation ne sera pas la même selon qu'on incrémente ou qu'on
décrémente !
TP 3 : Programmation en assembleur:
Adressage indexé et décalage de bits
*.......
.......*
**......
......**
***.....
.....***
****....
....****
('*': DEL allumée)
('.': DEL éteinte)
PTT = 3 ?
N
O
Décrémenter l'index
Incrémenter l'index
N
Ces motifs seront stockés dans une table de 8 valeurs avec la directive assembleur DC :
;-----------------------------------; zone de données
org
$2000
TABLE DC.B
%01111111, %11111110,%00111111,%11111100
DC.B
%00011111, (etc)
;------------------------------------
Index sorti de
la table ?
O
N
Réinitialiser l'index
Ces lignes vont stocker dans la mémoire à l'adresse 'TABLE' les 8 valeurs
correspondants aux motifs désirés.
Index sorti de
la table ?
O
Réinitialiser l'index
PARTIE B : DECALAGE ET ROTATIONS DE BITS
Il existe 3 types d'instructions de ce type:
A1) Saisir la table ci-dessus dans un nouveau fichier, et enregistrez-le dans
"z:\tp_ii2" avec le nom "tp3_a1.asm". Assemblez-le, téléchargez-le dans le
processeur, et vérifier avec NoIce que les valeurs sont correctement placées en
mémoire.
A2) En vous inspirant de l'exemple de lecture dans une table en utilisant l'adressage
indexé (TD n°2), écrire un programme qui va envoyer ces valeurs sur les 8 dels, puis qui
s'arrête. Vous le testerez en pas à pas, puis en temps réel, après avoir inséré un appel à
un sous-programme 'TEMPO' après chaque affichage.
- Les décalages logiques (Logical Shift)
- Les décalages arithmétiques (Arithmetic Shift)
A3) Modifier le programme de façon à ce que le cycle se répète à l'infini.
A4) Enregistrer le programme avec le nom "tp3_a4.asm", et le modifier: en cas
d'appui sur le bouton poussoir, la table devra être lue dans l'ordre inverse.
2005 / 2006
TP n°3
- Page 1 / 2 -
IUT GEII Rouen
TP II2
A la différence du précédent, le signe est conservé (bit de poids fort) lors d'un
décalage à droite.
- Les rotations (sur 9 bits)
Assemblez-le, téléchargez le dans la RAM avec NoIce, et étudiez l'évolution de
l'accumulateur A lors de l'exécution en pas à pas.
B2) Ecrire un programme qui allume la del câblée sur PB0 (les autres éteintes), et qui
va décaler la del allumée à chaque appui sur un des boutons poussoirs. Une fois "arrivé"
en PB7, ignorer les appuis et maintenir la del allumée.
Il est recommandé d'appliquer l'algorigramme ci-dessous. Ajouter des appels à un sous
programme de temporisation pour éviter les rebonds après chaque détection d'un
mouvement du BP (appui ou relâchement).
Application principale des décalages: multiplication / division entière par 2
Comme on travaille en base 2, un décalage dans un sens ou dans l'autre va
augmenter/diminuer la puissance de 2 correspondant au rang du bit
- Penser à commenter son programme !
Exemple: soit l'entier 24 (= $18 = %0001 1000 )
• décalage à gauche:
0011 0000 = $30 = 48 = 24 x 2
• décalage à droite:
0000 1100 = $0c = 12 = 24 / 2
DEBUT
- Chaque instruction va décaler d'un bit
N
- Chacune de ces instructions peut s'appliquer sur les accumulateurs A et B, ou sur une
case mémoire. Par exemple, pour les décalages logiques à gauche, on aura :
• Décalage de l'accumulateur A :
LSLA
• Décalage de l'accumulateur B :
LSLB
• Décalage d'une case mémoire :
LSL ADRESSE
O
O
CLC (CLear Carry) :
SEC (SEt Carry) :
Décaler
N
C←0
C←1
Del au bout ?
N
Gestion du bit "Carry"
• Pour positionner le bit "Carry":
BP appuyé ?
BP relaché ?
O
• Pour tester le bit "Carry"
B3) Enregistrer le fichier sous le nom "tp3_b3.asm", et le modifier: le sens du
décalage doit s'inverser une fois arrivé au bout. Proposer un algorigramme modifié.
BCC (Branch if Carry Clear) : Se branche à l'étiquette indiquée si C = 0
BCS (Branch if Carry Set) : Se branche à l'étiquette indiquée si C = 1
B4) A partir des programmes précédents, écrire un programme nommé "tp3_b4.asm"
qui va décaler à gauche ou a droite, selon le BP enfoncé (S2 ou S3).
Travail à effectuer
B1) Créez un nouveau fichier, et l'enregistrer avec le nom "tp3_b1.asm". Tapez les
lignes suivantes :
ici
org
ldaa
asla
bra
2005 / 2006
- Si aucun BP n'est enfoncé, l'affichage doit être figé
- Penser à inclure les conditions d'arrêt si arrivé en bout d'afficheur.
$1000
#$18
ici
TP n°3
- Page 2 / 2 -
Téléchargement