Académique Documents
Professionnel Documents
Culture Documents
L’adressage inhérent est utilisé par les instructions qui agissent sur les
registres internes du CPU et non sur la mémoire. Il existe deux types de mode
d’adressage inhérent sur le 6809 :
1- Adressage inhérent simple
Le code opération contient toute l’information nécessaire à l’exécution de
l’instruction. Ces instructions codées sur un octet sont : ABX, ASLA, ASLB, ASRA,
ASRB, CLRA, CLRB, COMA, COMB, DAA, DECA, DECB, INCA, INCB, LSLA, LSLB,
LSRA, LSRB, NEGA, NEGB, ROLA, ROLB, RORA, RORB, RTI, RTS, SEX, SWI,
SYNC, TSTA, TSTB. L’utilisation de SWI2 et SWI3 nécessite chacune deux octets.
Exemple :
ABX addition de l’accumulateur B à l’index X
CPU Mémoire
7 6 5 4 3 2 1 0
CCR
3A Adr
aa
D bb
xx xx + bb
X
Y
S
U
PC Adr
Adr +1
DPR
CPU
Mémoire
7 6 5 4 3 2 1 0
CCR
1F Adr
34 Adr +1
D Adr +2
X
Y
S
U
PC Adr
Adr +2
DPR
SSSS-4
2-3-
X X X X’ X’
Y aa SSSS-4
S S S S S
bb SSSS-3
U xx SSSS-2
PC Adr
Adr +2 x’x’ SSSS-1
DPR SSSS
Attente d’interruption :
Le premier octet est associé à l’instruction CWAY, le second sert à masquer ou
à valider les interruptions.
Exemple :
CWAY #$FF attente d’interruption NMI, IRQ et FIRQ sont masquées
Exemple :
ARRET EQU $3000
BPL ARRET
L’étiquette ARRET correspond à l’adresse $3000. L’instruction BPL ARRET doit se
trouver impérativement entre $2F7F ($2F7F + $2 + $7F = $3000) et $307E ($3047E
+ $2 - $80 = $3000).
Dans ce cas, BPL fait un test sur le bit N du registre de code condition, le
branchement a lieu si N=0 ( résultat de l’opération précédente positif)
1- Déplacement nul
Dans ce mode, le registre pointeur sélectionné contient l’adresse effective des
données devant être utilisées par l’instruction. Ce mode est le mode indexé le plus
rapide. Il existe deux types d’instruction :
1-1- Instruction sur deux octets
Le code opératoire est suivi du post-octet présentant les options pour
l’instruction en cours (tableau I).
Exemple :
LDA ,X chargement de A avec la valeur dont l’adresse est le contenu de l’index X.
Post-octet $85 :
b7 = 0 b4 = 0 indexé direct.
b6.b5 = 0.0 utilisation de l’index X.
b3.b2.b1.b0 =0.1.0.1 le déplacement = contenu accumulateur B (en complément
à deux).
4-2- Déplacement sur +/- 15 bits accumulateur D
Exemple :
LEAY D,X chargement dans l’index Y de l’adresse donnée par la somme D+X.
Post-octet $8B :
b7 = 0 b4 = 0 indexé direct.
b6.b5 = 0.0 utilisation de l’index X.
b3.b2.b1.b0 =0.1.1.1 le déplacement = contenu accumulateur D=(A:B) (en
complément à deux).
5- Base = compteur programme
Les paragraphes précédentes nous ont permis d’aborder les différents modes
d’adressage indexé utilisant X, Y, S et U comme base. L’utilisation de compteur
ordinal comme base d’indexation impose des restrictions sur les types de
déplacements. Seuls les déplacements constants codés sur 8 ou 16 bits (en complément
à deux) peuvent être utilisés.
5-1- Déplacement sur +/- 7 bits
L’adresse effective est égale au compteur programme courant plus un
déplacement codé sur 8 bits. L’instruction est codé sur 3 octets, deux octets sont
réservés à l’instruction(code + post-octet), le dernier octet contient le déplacement.
Exemple :
LDA $F0Pc chargement de l’accumulateur A avec le contenu mémoire dont
l’adresse est la valeur de PC + $ F0.
Post-octet = $8C :
b7 = 0 b4 = 0 indexé direct.
b6.b5 indifférent.
b3.b2.b1.b0 = 1.1.0.0 le déplacement sur 8 bits (en complément à deux).
Post-octet = $8D :
b7 = 0 b4 = 0 indexé direct.
b6.b5 indifférent.
b3.b2.b1.b0 = 1.1.0.1 le déplacement sur 16 bits (en complément à deux).
Étiquette Localisée:
Dans ce cas, la syntaxe assembleur n’utilise pas un déplacement mais une
étiquette localisée située à +/-128 octets de l’instruction suivante (déplacement sur 8
bits) ou n’importe où sur l’espace mémoire du microprocesseur (déplacement sur 16
bits). Comme précédemment l’adresse effective est égale au compteur programme plus
un déplacement codé sur 8 ou 16 bits. L’instruction est codée sur trois ou quatre
octets.
La syntaxe assembleur contient le mnémonique de l’instruction, le nom de
l’étiquette localisée plus la base. L’assembleur calcule la valeur du déplacement en
fonction de la position de l’étiquette.
Exemple :
LEAX ETIQ, PCR chargement du registre d’index X avec l’adresse effective qui est
donnée par la position de l’étiquette par rapport au compteur programme courant.
On prend Adr = $2000
ETIQ = $2015 xxxx = 0011
Post-octet = $8D :
b7 = 0 b4 = 0 indexé direct.
b6.b5 indifférent.
b3.b2.b1.b0 = 1.1.0.1 le déplacement sur +/-15 bits (en complément à deux).
VIII- Adressage indexé indirect
Le mode d’adressage indexé présente l’avantage de pouvoir travailler en
indirection.
Dans ce cas on accède à l’adresse effective en transitant par une adresse
intermédiaire.
On peut donc écrire :
Adresse effective = contenu mémoire dont l’adresse de base est la somme de
l’index + le déplacement.
Tous les modes d’adressage indexé peuvent travailler en indirection sauf les
modes auto-incrémentation/décrémentation par un (ce qui est normal car on ne gère
ici que des octets) et le mode déplacement constant codé sur 5 bits.
La syntaxe assembleur utilisée pour définir l’indirection est la même que celle
de l’adressage étendu : « [ ] ».
Les instructions sont codées sur deux octets, le premier définit le code
opératoire (identique à l’index simple), le second le type de déplacement, le type de la
base et l’indirection (tableau I).
1- Déplacement nul
Exemple :
LDA [ ,X] chargement de A avec le contenu mémoire dont l’adresse est le
contenu de (X, X+1).
Post-octet =$94:
b7 = 1 b4 = 1 mode indexé indirect.
b6.b5 = 0.0 index X.
b3.b2.b1.b0 = 0.1.0.0 déplacement nul.
2- Auto- incrémentation / décrémentation de l'index
Le mode indexé indirect travaille seulement en
auto-incrémentation/décrémentation par deux, ce qui est normal car seul ce mode
permet de gérer des cases.
Exemple :
ADDA [ ,U++] addition de l’accumulateur A et du contenu mémoire dont l’adresse
se trouve pointée par U, U+1, le résultat est dans A.
Post-octet =$D1:
b7 = 1 b4 = 1 mode indexé indirect.
b6.b5 = 1.0 index U.
b3.b2.b1.b0 = 0.0.0.1 post-auto-incrémentation de 2.
3- Avec déplacement constant
Les déplacements constants sont codés sur 8 bits ou 16 bits (en complément à
deux). L’indirection n’est pas possible pour un déplacement codé sur 5 bits.
Exemple :
Post-octet =$99:
b7 = 1 b4 = 1 mode indexé indirect.
b6.b5 = 0.0 index X.
b3.b2.b1.b0 = 1.0.0.1 déplacement constant sur +/- 15 bits.
4- Déplacement accumulateur
Comme dans l’adressage indexé simple, le déplacement est contenu dans les
accumulateurs A, B ou D (en complément à deux).
Exemple :
LDU [D, Y] chargement de U avec le contenu dont l’adresse mémoire est pointée
par le contenu de Y + celui de D.
Post-octet =$BB:
b7 = 1 b4 = 1 mode indexé indirect.
b6.b5 = 0.1 index Y.
b3.b2.b1.b0 = 1.0.1.1 déplacement accumulateur D =(A :B) (en complément à
deux).
5- Base = compteur programme
Post-octet = $9D:
b7 = 1 b4 = 1 mode indexé indirect.
b6.b5 = indifférents.
b3.b2.b1.b0 = 1.1.0.1 déplacement codé sur +/-15 bits.
Comme pour l’adressage indexé direct, on peut utiliser dans ce mode non pas un
déplacement mais une étiquette localisée, pour ce qui est de la syntaxe assembleur.
Exemple :
LDA [TABLE, PCR] chargement de A avec la valeur dont l’adresse est pointée par
TABLE.
Post-octet = $9D:
b7 = 1 b4 = 1 mode indexé indirect.
b6.b5 = indifférents.
b3.b2.b1.b0 = 1.1.0.1 déplacement codé sur +/-15 bits.