Section courante

A propos

Section administrative du site

Accès mémoire avec 8088 et 8086

A l'origine, pour les microprocesseurs 8088 et 8086, pour accéder à la mémoire, nous pouvions utiliser ces quatre registres : BX, SI, DI, BP. En combinant ces registres dans des symboles [], nous pouvions obtenir différents emplacements de mémoire.

Ces combinaisons sont prises en charge (modes d'adressage) :

[BX + SI]
[BX + DI]
[BP + SI]
[BP + DI]
[SI]
[DI]
d16 (déplacement de variable seulement)
[BX]
[BX + SI + d8]
[BX + DI + d8]
[BP + SI + d8]
[BP + DI + d8]
[SI + d8]
[DI + d8]
[BP + d8]
[BX + d8]
[BX + SI + d16]
[BX + DI + d16]
[BP + SI + d16]
[BP + DI + d16]
[SI + d16]
[DI + d16]
[BP + d16]
[BX + d16]

Sachant que les paramètres suivantes ont la signification suivante :

Nom Description
d8 Ce paramètre permet d'indiquer le reste pour un déplacement immédiat signé 8 bits (par exemple : 22, 55h, -1).
d16 Ce paramètre permet d'indiquer le reste pour un déplacement immédiat signé 16 bits (par exemple : 300, 5517h, -259).

Le déplacement peut être une valeur immédiate ou un déplacement d'une variable, voire les deux. S'il existe plusieurs valeurs, l'assembleur évalue toutes les valeurs et calcule une seule valeur immédiate. Le déplacement peut être à l'intérieur ou à l'extérieur des symboles [], l'assembleur génère le même code machine dans les deux sens. Le déplacement est une valeur signée, il peut donc être à la fois positif ou négatif. En général, le compilateur s'occupe de la différence entre d8 et d16 et génère le code machine requis.

Par exemple, supposons que les registres DS = 100, BX = 30, SI = 70. Le mode d'adressage suivant :

[BX + SI] + 25

Est calculé par le microprocesseur à cette adresse physique :

100 x 16 + 30 + 70 + 25 = 1725

Par défaut, le registre de segment DS est utilisé pour tous les modes sauf ceux avec registre BP, pour ces SS le registre de segment est utilisé. Il existe un moyen simple de se souvenir de toutes ces combinaisons possibles en utilisant ce tableau :

Toutes les combinaisons valides peuvent être formées en ne prenant qu'un seul élément de chaque colonne ou en sautant la colonne en n'en prenant rien. Les registres BX et BP ne vont jamais ensemble. Ni les registres SI ni DI ne le font. Exemples de modes d'adressage valides :

[BX + 5]
[BX + SI]
[DI + BX - 4]

La valeur dans le registre de segment (CS, DS, SS, ES) est appelée un segment, et la valeur dans le registre à usage général (BX, SI, DI, BP) est appelée un déplacement. Lorsque DS contient la valeur 1234h et le registre SI la valeur 7890h, il peut également être enregistré sous la forme 1234:7890. L'adresse physique sera 1234h x 10h + 7890h = 19BD0h. Si zéro est ajouté à un nombre décimal, il est multiplié par 10, cependant 10h = 16, donc si zéro est ajouté à une valeur hexadécimale, il est multiplié par 16, par exemple :

7h = 7
70h = 112

Pour pouvoir dire au compilateur le type de données, les préfixes suivant doivent être utilisés :

Préfixe Description
byte ptr Ce préfixe permet d'indiquer un octet.
word ptr Ce préfixe permet d'indiquer un mot (deux octets).

Par exemple :

byte ptr [BX] ; Accès à un octet
word ptr [BX] ; Accès à un mot

Certain assembleur support également les préfixes suivants :

Préfixe Description
b. Ce préfixe permet d'indiquer un octet.
w. Ce préfixe permet d'indiquer un mot (deux octets).

dans certains cas, l'assembleur peut calculer le type de données automatiquement.

Instruction MOV

L'instruction MOV permet d'effectuer des accès mémoire selon les règles suivantes :

L'instruction MOV supporte les types d'opérandes suivantes :

MOV REG, mémoire
MOV mémoire, REG
MOV REG, REG
MOV mémoire, immédiate
MOV REG, immédiate

Les paramètres ont les significations suivantes :

Nom Description
REG Indique l'un des registres suivants : AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP
mémoire Exemple : [BX], [BX+SI+7], variable
immédiate Exemple : 5, -24, 3Fh, 10001101b

pour les registres de segment, seuls ces types de MOV sont pris en charge :

MOV SREG, mémoire
MOV mémoire, SREG
MOV REG, SREG
MOV SREG, REG

Les paramètres ont les significations suivantes :

Nom Description
SREG DS, ES, SS, et seulement comme deuxième opérande : CS.
REG Indique l'un des registres suivants : AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
mémoire [BX], [BX+SI+7], variable

L'instruction MOV ne peut pas être utilisée pour définir la valeur des registres CS et IP.

Exemple

Voici un court programme qui montrant l'utilisation de l'instruction MOV :

  1. ORG 100h           ; Cette directive est requise pour un programme .com simple à 1 segment.
  2. MOV AX, 0B800h     ; Définit AX sur la valeur hexadécimale de B800h.
  3. MOV DS, AX         ; Copie la valeur de AX dans DS.
  4. MOV CL, 'A'        ; Mettre CL au code ASCII de 'A', il est 41h.
  5. MOV CH, 11011111b  ; Définir CH sur une valeur binaire.
  6. MOV BX, 15Eh       ; Définir BX sur 15Eh.
  7. MOV [BX], CX       ; Copier le contenu de CX dans la mémoire à B800:015E
  8. RET                ; Retourne au système d'exploitation.


Dernière mise à jour : Lundi, le 10 mai 2021