Notions d’assembleur
- 2 -
Message$:
db 'Menu de la routine 2',0
Les pseudo-opérations et directives de compilation
Le compilateur comprends plusieurs pseudo-opérations. Une pseudo-op ne se traduit pas en une
instruction machine, mais est comprise par le compilateur qui effectue l'action correspondante.
par exemple:
Douze EQ $12 ; Définit le nom "Douze"
lda #Douze ; Le compilateur remplacera "Douze" par $12 automatiquement
On peut réserver et initialiser une zone mémoire pour y déclarer du texte, des entier ou des flotants:
par exemple:
DB 'je peux afficher ce texte a l''écran' ; une chaine de texte
DB 0,$12 ; deux octets
DW $ffff ; un mot 16 bits
FLOAT 175.12 ; un flottant 32 bits
DOUBLE 175.2 ; un flottant 64 bits
On peut réserver et initialiser beaucoup d'espace en mémoire:
BLKB 32,0 ; on réserve 32 octets mis à zéro
BLKW 32,$FF ; on réserve 32 mots (64 octets), initialisés à 255.
Il existe d'autres pseudo-opérations et directives de compilation. Si vous en avez besoin, reportez vous à
la documentation de l'assembleur 6809.
Modes d'adressage
Le mode d'adressage est spécifié par des caractères # ou []
par exemple:
si en mémoire on a la valeur $33 à l'adresse $12 et la valeur $ff à l'adresse $33 alors
lda #$12 ; immédiat: A <- $12 charge la constante dans le registre A
lda $12 ; direct: A <- $33 charge dans A le contenu à l'adresse $12
lda [$12] ; indirect: A <- $ff charge dans A le contenu à l'adresse
; pointée par le contenu à l'adresse $12
lda ,X ; indexé: charge dans A le contenu à l'adresse pointée par
; le registre X
lda ,X+ ; post-incrémentation: idem, ensuite X est incrémenté de 1
lda ,X++ ; idem, ensuite X est incrémenté de 2
lda , X- ; on peut aussi décrémenter X de 1 ou 2...
lda #5,X ; charge dans A le contenu de la RAM a l'adresse pointée
; par le registre X augmentée de 5
; L'offset doit tenir soit sur 5, 8 ou 16 bits
lda [$5],X ; on peut faire des combinaisons...
Les registres
Il y a 2 registres A et B 8 bits pour travailler, qui peuvent être combinés et utilisés comme un registre 16
bits appelé D.
Il y a deux registres spéciaux 8 bits CC et DP. CC contient les drapeaux d'exécution (résultats de l'UAL,
et drapeaux d'interruption). DP (?).
Il y a aussi 2 registres d'index 16 bits, X et Y, et 2 registres de pile 16 bits U et S. On peut utiliser X et Y a
volonté, mais il ne faut pas modifier U ou S directement, car ils servent à gérer les piles.
Registres 8 bits:
A accumulateur A
B accumulateur B
CC registre de codes conditions (drapeaux de l'UAL)
DP (?)
Registres 16 bits:
D = A (poids forts de D), B (poids faible de D)
X registre d'index (lda ,X)
Y registre d'index (lda ,Y)
U pointeur de pile utilisateur (pulu/pshu)
S pointeur de pile système (puls/pshs)
Les instructions de base
Voici une liste (non exhaustive) des instructions disponibles. Par convention on note R pour un registre a
définir. Par exemple, si on parle de ldR où R peut être A, B ou D, alors il y a 3 instructions, lda, ldb et ldd.
Lorsqu'on écrit NN, cela représente le paramètre de l'instruction utilisé pour faire l'adressage mémoire.
Par exemple si on écrit "ldR NN", on peut en fait utiliser l'instruction "lda #$12".
ldR NN
stR NN
charge/stocke une valeur dans le registre R
(où R est A,B,D,X,Y,U,S au choix)
addR adcR andR aslR asrR bitR clrR