Envoyer un e-mail à Collection ThomsonCollection Thomson
EditoForum 2002Liens
Nanoreseau
Docs
Logiciels
Matériel
Imprimer le documentLes cours d'assembleur de Prehis-To
Retour à la liste

Initiation à l’assembleur 6809

Cours n°7

Décalages

Les instructions de décalage portent sur les registres A, B et tout registre mémoire. Le programmeur y a recours entre autres:

  • Arithmétiquement, la multiplication et la division par 2, 4, 8, 16, 32, 64, 128, 256, etc... donc par une puissance de 2.
  • Graphiquement, le décalage d'un ou plusieurs segments d'un bit vers la droite ou la gauche (scrolling).
ASLA    Décale le registre 8 bits A d'un bit vers la gauche
ASLB    Décale le registre 8 bits B d'un bit vers la gauche
ASL     Décale le registre mémoire 8 bits d'un bit vers la gauche

Ces trois instructions ne récupèrent pas de bit entrant. Le registre est décalé vers la gauche et le bit 0 est positionné à 0.

LDA    #$18    < Charge le registre A avec la valeur $18
ASLA           < A prend alors la valeur $18*2 soit $30
LSLA    Décale le registre 8 bits A d'un bit vers la gauche
LSLB    Décale le registre 8 bits B d'un bit vers la gauche
LSL     Décale le registre mémoire 8 bits d'un bit vers la gauche

Ces trois instructions ont respectivement le même effet que ASLA, ASLB et ASL.

ASRA    Décale le registre 8 bits A d'un bit vers la droite
ASRB    Décale le registre 8 bits B d'un bit vers la droite
ASR     Décale le registre mémoire 8 bits d'un bit vers la droite

Ces trois instructions récupèrent l'état du bit 7 comme bit entrant. Le registre est décalé vers la droite et le bit 7 est positionné selon l'état du bit 7 précédant le décalage

LDA   #$08     < Charge le registre A avec la valeur $08
ASRA           < A prend alors la valeur $08/2 soit 4
...
LDA   #$84     < Charge le registre A avec la valeur $84
ASRA           < A prend alors la valeur $84/2 soit $42 plus
                              $80 puisque le bit 7 était à 1 avant le
                              décalage soit A=$C2
LSRA    Décale le registre 8 bits A d'un bit vers la droite
LSRB    Décale le registre 8 bits B d'un bit vers la droite
LSR     Décale le registre mémoire 8 bits d'un bit vers la droite

Ces trois instructions ne récupèrent pas de bit entrant. Le registre est décalé vers la droite et le bit 7 est positionné à 0.

LDA   #$20     < Charge le registre A avec la valeur $20
LSRA           < A prend alors la valeur $20/2 soit $10
ROLA    Décale le registre 8 bits A d'un bit vers la gauche avec retenue
ROLB    Décale le registre 8 bits B d'un bit vers la gauche avec retenue
ROL     Décale le registre mémoire 8 bits d'un bit vers la gauche avec retenue

Ces trois instructions récupèrent l'état du flag C de CC comme bit entrant. Le registre est décalé d'un bit vers la gauche et le bit 0 est positionné selon l'état du flag C de CC.

LDA  #$50      < Charge le registre A avec la valeur $50
LDB  #$C0      < Charge le registre B avec la valeur $C0
ASLB           < Décalage de B ; bit sortant = 1 donc C=1
ROLA           < A prend alors la valeur $50*2 + la retenue consécutive au décalage de A soit $A1
RORA    Décale le registre 8 bits A d'un bit vers la droite avec retenue
RORB    Décale le registre 8 bits B d'un bit vers la droite avec retenue
ROR     Décale le registre mémoire 8 bits d'un bit vers la droite avec retenue

Ces trois instructions récupèrent l'état du flag C de CC comme bit entrant. Le registre est décalé d'un bit vers la droite et le bit 7 est positionné selon l'état du flag C de CC.

LDA  #$11      < Charge le registre A avec la valeur $11
LDB  #$10      < Charge le registre B avec la valeur $10
LSRA           < Décalage de A ; bit sortant = 1 donc C=1
RORB           < B prend alors la valeur $10/2 + la retenue
                              consécutive au décalage de A soit $88

Pour toutes ces instructions, le flag C de CC est chargé selon l'état du bit sortant.

Un petit programme pour faire scroller l'écran du moniteur. Ce programme fait non seulement scroller l'écran horizontalement mais aussi verticalement de telle façon que les segments sortant du haut de l'écran sont récupérés en bas. Une astuce que nous permet l'instruction ADCB vue dans le cours précédent.

Dans la première colonne, le champ étiquette. Dans la deuxième, le programme pour les TO. Dans la troisième, à titre d'information, le programme pour MO. Et dans la quatrième colonne, le commentaire du programme. Pour l'adaptation des programmes TO sur MO, vous devez savoir que les routines moniteur sont sous interruptions logicielles (donc appelées par un SWI + un numéro d'interruption), que l'écran se trouve à une place différente du TO et que l'instruction d'arrêt du programme est STOP et non SWI:

DEBUT  | LDB    $E7C3       |                   | |
       | ORB    #$01        |                   | | Passe en RAMA
       | STB    $E7C3       | CALL   $06        | |
* Boucle sur scroll en attendant inkey
NEXT   | BSR    SCROLL      | BSR    SCROLL      | Déplace l'écran
       | JSR    $E806       | CALL   $0A         | Test clavier
       | CMPB   #$20        | CMPB   #$20        | | Si pas barre
       | BNE    NEXT        | BNE    NEXT        | | espace, boucle
       | SWI                | STOP               | Sortie programme
* Décalage de l'écran
SCROLL | LDX    #$4000+8000 | LDX    #$0000+8000 | Ptr sur écran
       | LDY    #7999       | LDY    #7999       | Taille écran
       | CLRB               | CLRB               | Efface valeur der seg
       | ASL    ,-X         | ASL    ,-X         | Décale premier
SCROL0 | ROL    ,-X         | ROL    ,-X         | Décale suivant + C
       | LEAY   -1,Y        | LEAY   -1,Y        | | Pour tous les
       | BNE    SCROL0      | BNE    SCROL0      | | segments
       | ADCB   $4000+7999  | ADCB   $0000+7999  | Ajoute retenue
       | STB    $4000+7999  | STB    $0000+7999  | Ajourne dern segment
       | RTS                | RTS                | Retour s\programme
       |                    |                    |
       | END                | END                | Fin du programme
Site
Plus
Forums
Code
Créations

*Site en favoris
*Page en favoris
*Site en démarrage
*Page en démarrage


Haut de page

Collection Thomson 2015 © Ghislain Fournier & François Mouret