IUT GEII Rouen TP II2
2005 / 2006 TP n°3 - Page 1 / 2 -
TP 3 : Programmation en assembleur:
Adressage indexé et décalage de bits
PARTIE A : ADRESSAGE INDEXE
On souhaite avoir un programme qui affiche les motifs suivants sur les 8 dels connectées
sur le Port B du processeur.
*.......
.......* ('*': DEL allumée)
**...... ('.': DEL éteinte)
......**
***.....
.....***
****....
....****
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)
;------------------------------------
Ces lignes vont stocker dans la mémoire à l'adresse 'TABLE' les 8 valeurs
correspondants aux motifs désirés.
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.
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.
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)
Attention, la réinitialisation ne sera pas la même selon qu'on incrémente ou qu'on
décrémente !
O
PTT = 3 ?
Incrémenter l'index
Index sorti de
la table ?
O
N
Décrémenter l'index
O
Index sorti de
la table ?
N
Réinitialiser l'index Réinitialiser l'index
N
PARTIE B : DECALAGE ET ROTATIONS DE BITS
Il existe 3 types d'instructions de ce type:
- Les décalages logiques (
Logical Shift
)
- Les décalages arithmétiques (
Arithmetic Shift
)
IUT GEII Rouen TP II2
2005 / 2006 TP n°3 - Page 2 / 2 -
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)
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
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
- Chaque instruction va décaler d'un bit
- 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
Gestion du bit "Carry"
Pour positionner le bit "Carry": CLC (
CLear Carry
) : C 0
SEC (
SEt Carry
) : C 1
Pour tester le bit "Carry"
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
Travail à effectuer
B1) Créez un nouveau fichier, et l'enregistrer avec le nom "tp3_b1.asm". Tapez les
lignes suivantes :
org $1000
ldaa #$18
ici asla
bra ici
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).
- Penser à commenter son programme !
BP appuyé ?
O
DEBUT
Del au bout ?
Décaler
BP relaché ?
N
O
O
N
N
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é.
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).
- Si aucun BP n'est enfoncé, l'affichage doit être figé
- Penser à inclure les conditions d'arrêt si arrivé en bout d'afficheur.
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !