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

 

Image non trouvée !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

Image non trouvée !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é.

Image non trouvée !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...

Image non trouvé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.

Image non trouvée !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.