
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