Les différents modes d'adressage
Comme pour de nombreux assembleurs, le 68000 possède différents modes d'adressage: 14 types d'adressage en tout qui peuvent être regroupés sous 6 modes:
Adressage immédiat
L'opérande représente dans ce cas une donnée et devra commencer par un # dans le premier argument de l'instruction assembleur.
Adressage immédiat simple
Dans ce cas, l'opérande peut avoir une taille d'un mot, ou d'un mot long et sera codé en binaire après le code de l'instruction.
SUB.W #456, D0
ADD.L #$F824AB45,D1
Lors d'un transfert d'une
donnée sur une taille d'un mot vers un registre d'adresse, cette donnée
sera convertie sur 32 bits, c'est donc tout le registre sur un mot long qui
sera affecté.
Adressage immédiat rapide
Dans cette variante, la donnée est codée directement dans l'instruction sur 3 bits. Elle ne pourra donc être comprise qu'entre 0 et 7. sauf pour l'instruction move ou la donnée pourra être codée sur 8 bits. L'instruction devra être suivie de Q pour quick.
Evidemment, le nombre de cycles dans ce cas sera plus petit que précédemment, car il y aura moins de choses à traiter !
ADDQ.L #2,A0
MOVEQ #128,D0
Adressage absolu
Il s'agit ici d'indiquer après l'instruction l'adresse qui sera visée par l'opération que vous voulez effectuer.
Adressage absolu court
Il s'agit d'adresse d'une largeur de 16 bits (un mot). L'adresse sera automatiquement convertie en 32 bits (long) de la manière suivante:
Si le nombre est signé (bit de poid fort positionné), alors l'adresse sera complétée par $FFFF, sinon complétée par $0000
Par exemple:
$FF00 deviendra $FFFFFF00
Dans ce cas, vous ne
pouvez accéder qu'à 64Ko de la mémoire.
Adressage absolu long
Vous indiquez l'adresse complète (mot long, bien que l'adressage soit en fait limité à 24 bits donc 16 Mo).
Adressage direct de registre
L'opérande source est un registre de données/d'adresse ou d'état.
SUB.W D0,D1
MOVE.L A0, D2
AND SR
Adressage indirect de registre
Dans ce cas, l'adresse n'est pas donnée directement, c'est un registre qui pointe dessus (donc le registre a comme valeur l'adresse visée).
Adressage indirect simple
L'adresse de l'opérande est positionnée dans le registre d'adresse. Pour indiquer que c'est l'adresse pointée par le registre, il faudra utiliser les parenthèses:
MOVE.W (A0), D0 qui signifie que A0 pointe sur une adresse, la donnée en word présente à cette adresse sera recopiée dans le registre de données D0.
Adressage indirect post-incrémenté
Même chose que l'adressage indirect simple, mais suite à cette opération, le contenu du registre d'adresse sera incrémenté de 1 si le format est un Byte, de 2 si word, de 4 si long.
MOVE.W (A0)+, D0 signifie que A0 pointe sur une adresse, la donnée en word présente à cette adresse sera recopiée dans le registre de données D0. Le contenu du registre A0 est alors incrémenté de 2 (car .W), donc A0 pointe maintenant vers adresse + 2.
Adressage indirect prédécrémenté
Même chose que l'adressage indirect simple, mais avant de faire cette opération, le contenu du registre d'adresse sera décrémenté de 1 si le format est un Byte, de 2 si word, de 4 si long.
MOVE.W D0,-(A0) signifie que A0 pointe sur une adresse. A0 est alors décrémenté de 2 (car .W), Puis cette nouvelle adresse ainsi calculée recevra la valeur du registre de données D0.
Adressage indirect avec déplacement
Même chose que l'adressage indirect simple, mais cette fois-ci, A0 pointe vers une adresse + déplacement (codé sur 16 bits et étendu sur 32) précisé.
La valeur du déplacement
ne va pas modifier la valeur de A0 !
MOVE.B 16(A0), D0 signifie que A0 pointe sur une adresse, la donnée en word présente à adresse + déplacement sera recopiée dans le registre de données D0.
Adressage indirect indexé avec déplacement
Même chose que l'adressage indirect avec déplacement, mais s'ajoute à cela un registre de données qui servira d'index de déplacement à partir de l'adresse visée...
La valeur du registre
de données servant d'index et le déplacement ne va pas modifier
la valeur de A0 !
MOVE.W $10(A0,D1.L), D0
Adressage relatif au compteur d'instructions (PC)
L'adresse effective est fonction d'un déplacement (toujours sur 16 bits) et du compteur d'instructions PC.
Le code sera relogeable
dans ce cas.
Adressage relatif
Ajout du déplacement au PC (pour les branchements, le déplacement pourra être sur 8 bits)
MOVE.B $10(PC), D0
Adressage indexé
Identique à Adressage relatif auquel s'ajoute un registre de données servant d'index.
MOVE.B $10(PC, D1.W), D0
Adressage implicite
L'opérande est indiquée de façon implicite dans l'instruction
MOVE SR,D3 sera codé sur 16 bits.