L'ASSEMBLEUR DU 68HC11
Mode d'adressage
Le CPU exécute à tout instant une instruction associée à une opérande.
Opérande : Donnée intervenant lors d'une opération arithmétique
Le mode d'adressage c'est le moyen donné au CPU pour trouver le lieu exact où se trouve l'opérande.
La capacité d'adressage du CPU est celle du PC ( 16 bits ) c'est à dire 216¨= 65536 adresses soit en héxadécimal de $0000 à $FFFF.
Les divers type de mode d'adressage sont décrits ci dessous
ADRESSAGE IMMEDIAT [#]
L'opérande située immédiatement aprèe l'instruction
Adresse |
Données |
Syntaxe |
$00AB |
86 |
LDAA #$4A |
$00AC |
4A |
|
Dans cet exemple l'accumulateur A est chargé avec la donnée située immédiatement après l'instruction LDAA, le résultat de cette instruction est : A <- $4A
ADRESSAGE ETENDU [> ou pas de symbole]
La donnée est située à l'adresse indiquée après l'instruction
Adresse |
Données |
Syntaxe |
$00AB |
86 |
LDAA $A23C |
$00AC |
A2 |
|
$00AD |
3C |
|
Adresse |
Données |
$A23C |
5B |
Dans cet exemple l'accumulateur A est chargé avec la donnée située à l'adresse indiquée après l'instruction LDAA, le résultat de cette instruction est : A <- $5B
ADRESSAGE DIRECT[>]
L'opérande est située à l'adresse don't la partie basse est indiquée après l'instruction, la partie haute étant sous entendue et égale à $00
Adresse |
Données |
Syntaxe |
$00AB |
96 |
LDAA $A7 |
$00AC |
A7 |
|
Adresse |
Données |
$00A7 |
4F |
Dans cet exemple l'accumulateur A est chargé avec la donnée située à l'adresse don't la partie basse est indiquée après l'instruction LDAA, le résultat de cet instruction est : A <- $4F
ADRESSAGE INHERENT ou IMPLICITE
L'instruction se suffit à elle même
Adresse |
Données |
Syntaxe |
$00AE |
55 |
COMB |
Accumulateur B |
82 |
Dans cet exemple l'accumulateur B contient $82 est après instruction, la donnée sera complémentée à 1, le résultat de cette instruction est: B <- $7D
ADRESSAGE INDEXE
La Donnée est située à l'adresse correspondant à la somme du registre utilisée et de la valeur numérique.
Adresse |
Données |
Syntaxe |
$00AB |
EC |
LDAA $10,X |
$00AC |
10 |
|
Registre X |
$1000 |
Adresse |
Données |
$1010 |
$AE |
Dans cet exemple l'accumulateur A est chargé par
la Donnée située à l'adresse :
$1010 = X
+ $10 ( avec X = $1000 ) A <- $AE
ADRESSAGE RELATIF
La Donnée est située à l'adresse
correspondant à l'étiquette donnée.
Lors de l'écriture
du programme assembleur, on ne mettra que des noms d'étîquettes
à 8 lettres maximum, celui-ci se chargera defaire le calcul du déplacement.
[enfait ce déplacement correspond à 1'@ de l'instruction suivante
additionné du déplacement 1
Adresse |
Données |
Syntaxe |
$002F |
26 |
BNE TEMPO1 |
$0030 |
11 |
Valeur de déplacement |
$0031 |
|
Pour aller à TEMPO1 |
TEMPOI LDY #$02A3 @ $0042 18CE 0042
Dans cet exemple si le résultat de la dernière instruction n'est pas nul ( Branch if Not Equal « to Zero » ), le compteur de Programme ( PC ) sautera à l'adresse TENPO1.
Remarque concernant l'adressage relatif :
La valeur du déplacement étant un nombre
signé codé sur un octet,. le bit de signe étant le
bit de poids fort la valeur du nombre est donc codée sur 7 bits ce
qui donne un déplacement compris entre -128 et +127 octets.
L'étiquette est un nom que l'on place dans le programme source afin
que l'assembleur ait des points de repères pour calculer les déplacements.
ADRESSAGE SPECIAL
Manipulation de Bit
ESSAIO BCLR
PORTB,X,%00 1 1 000
1 * Mise à 0 de PB5, PB4 et PBO
Adresse de la Donnée (Direct ou Indexé) + octet position
bit (masque)
ESSAII BSET
$IC,%l 1 10 0100 *Mise
à 1 de Bit7, 6, 5, 2 de la dame à 1'@ $001C
Adresse opérande
(Direct ou Indexé) + octet position bit (masque)
Branchement sur test de Bit d'une variable ( donnée )
TESTI BRCLR
ADCTL,X,%1000 0000,TEMPO
* Le programme fait un saut
à l'étiquette TEMPO2 si le bit 7 du registre ADCTL (indexé
grâce à X ) vaut 0
,4dresse opérande (Direct ou
Indexé) + octet position bit (masque) + déplacement
TEST2 BRSET
$3C,%00110000,TEMP02 *Le
programme fait un saut à l'étiquetteTEMPO2
si les bits
5 et 4 valent 1. La donnée se trouve à l'adresse $003C.
Adresse opérande (Direct ou Indexé) +octet position bit (masque)
+ déplacement
Jeu d'instructions
Bientôt disponible
Directive
d'assemblage
Elle n'ont aucune influence sur le programme proprement dit mais elles orientent le processus d'assemblage.
Processus d'assemblage : Passage du programme texte en programme binaire compréhensible par le 68HC11
Directive ORG
$@ Indique le début ( origine ) du programme ou de la
localisation de variables
Directive EQU Equivalence:
Associe un nom à une donnée ou une adresse.
EX :
REGBAS EQU $1000
PORTC EQU $03
Directive FDB,FDD,FCC
Forin Constant Byte, Double
Byte, Character.
Allocation et mise en place d'octets dans une zone
précise en mémoire.
Ex:
PUBIL. FCC
« VIVE » ici PUBL
correspond à une chaîne de caractères qui est situé
en mémoire.
Directive RMB Reserve Memory Byte: Réserver un Octet en Mémoire.
EX:
CAPT RMB 2 2 octets alloués pour une variable appelé CAPT dont on ne connaît pas la valeur
Constitution
d'un programme assembleur
TITRE
Fonctionnalité du Programme ( rôle
)
Registres concernés Variables
d'entrées sorties a Opérations effectuées.
Définition
des étiquettes « symboles » utilisées
****
EQU ****
ORG
$@ Origine
RAM si l'on veut affecter des variables de traitement
****
RMB $****
****
FDB $**** Emplacement
des variables de travail
****
Programme ****
ORG
$@ Origine
du programme
Initialisation des variables et périphériques.
Instruction assembleur ou programme à proprement parler
Initialisation des différents vecteurs d'interruptions