Vous êtes sur la page 1sur 4

Chapitre V

La fonction de transfert et modes d’adressage


1 Introduction

Une instruction est composée de deux champs :


- Code opération qui indique au processeur quelle instruction réaliser.
- Le champ opérande qui contient la donnée, ou la référence à une donnée en mémoire (son adresse)
Champ code opération Champ code opérande
MOV AX, BX

2 La fonction de transfert

Mnémonique : MOV (to MOVE)


Syntaxe : MOV destination, source
Opération effectuée : Déplacer des données d’une source vers une destination
Flags modifiés : N'affecte pas les indicateurs.

La destination étant un registre ou une case mémoire, la source peut être une valeur immédiate, le contenu d’un
registre ou d’une case mémoire.
Remarque : le microprocesseur 8086 n’autorise pas les transferts de mémoire vers mémoire (pour ce faire, il faut
passer par un registre intermédiaire).

3 Exemples

1) MOV AX,BX
Charge le contenu du registre BX dans le registre AX. Dans ce cas, le transfert se fait de registre à registre.
Le mode d’adressage est l’adressage par registre.
2) MOV AL,12H
Charge le registre AL avec la valeur immédiate 12H. La donnée est fournie immédiatement avec l’instruction.
 Adressage immédiat
3) MOV BL,[1200H]
Transfère le contenu de la case mémoire d’adresse logique (DS :1200H) vers le registre BL. L’instruction comporte
l’adresse de la case mémoire où se trouve la donnée.
Adressage direct

Remarque : L’adresse effective représente l’offset de la case mémoire dans le segment de données (segment dont
l’adresse est contenue dans le registre DS) : segment par défaut.

32
On peut changer le segment lors d’un adressage direct en ajoutant un préfixe de segment, exemple :

4) MOV BL,[ES :1200H]


Transfère le contenu de la case mémoire d’adresse logique (ES :1200H) vers le registre BL.
 On parle alors de forçage de segment.

Remarque : dans le cas de l’adressage immédiat de la mémoire, il faut indiquer le format de la donnée : octet ou mot (2
octets) car le microprocesseur 8086 peut manipuler des données sur 8 bits ou 16 bits. Pour cela, on doit utiliser un
spécificateur de format :

5) MOV byte ptr [1100H],65H


Transfère la valeur 65H (sur 1 octet) dans la case mémoire d’adresse logique(DS :1100H);
 Adressage immédiat
6) MOV wordptr [1100H],65H
Transfère la valeur 0065H (sur 2 octets) dans les cases mémoires d’adresses logiques respectives (DS :1100H) et
(DS :1101H).
 Adressage immédiat

Remarque : les microprocesseurs Intel rangent l’octet de poids faible d’une donnée sur plusieurs octets à l’adresse la
plus basse (format Little Endian).

Adressage basé : l’offset est contenu dans un registre de base BX ou BP.

7) MOV AL,[BX]
Transfère la donnée contenu dans la case mémoire d’adresse logique (DS :BX) vers le registre AL.
Le segment associé par défaut au registre BX est le segment de données : on dit que l’adressage est basé sur DS;
8) MOV AL,[BP]
Transfère la donnée contenu dans la case mémoire d’adresse logique (SS :BP) vers le registre AL.
Le segment par défaut associé au registre de base BP est le segment de pile. Dans ce cas, l’adressage est basé
sur SS.

33
9) MOV AL,[SI]
Transfère la donnée contenu dans la case mémoire d’adresse logique (DS :SI) vers le registre AL
Adressage indexé : semblable à l’adressage basé, sauf que l’offset est contenu dans un registre d’index SI ou DI,
associés par défaut au segment de données.

10) MOV [DI],BX


Transfère le contenu du registre BX (sur 2 octets) dans les cases mémoires d’adresses logiques respectives (DS :DI)
et (DS :DI+1).
Adressage indexé

Remarque: une valeur constante peut éventuellement être ajoutée aux registres de base ou d’index pour obtenir
l’offset.

11) MOV [SI+100H],AX

qui peut aussi s’écrire

MOV [SI][100H],AX

ou encore

MOV 100H[SI],AX

12) MOV AH,[BX+SI+100H]


Transfère la donnée contenu dans la case mémoire d’adresse logique (DS :BX+SI+100H) vers le registre AH.
Adressage basé et indexé : l’offset est obtenu en faisant la somme d’un registre de base, d’un registre d’index et
d’une valeur constante.

4 Remarques

1. Attention: différent de (MOV AL, BX); BX  AL (erreur!!  taille des registres)


2. MOV [DI], AH (copie un octet) et MOV [SI], AX (copie un mot avec convention little Endian)
3. 3. MOV AL, [SI][DI]+12 ou MOV AL, [BX][BP]+12; illégales!!!!!
4. on peut écrire MOV AL,[BP+5] ou MOV AL,5[BP]
5. MOV [DI], [SI] interdit ! ! !
6. Le CS n'est jamais utilisé comme registre destination.
7. Il est strictement interdit de transférer le contenu d'une case mémoire vers une autre case mémoire comme
suit
MOV Val1, Val2
Pour remédier à se problème on va effectuer cette opération sur deux étapes :
MOV AL, Val2
MOV Val1, AL

34
8. On n'a pas le droit aussi de transférer un registre segment vers un autre registre segment sans passer par un autre
registre :
MOV DS, ES
On va passer comme la première instruction :
MOV AX, ES
MOV DS, DS
9. MOV AL, CX ; erreur, les registres n’ont pas la même taille
10. MOV AL, 2345h ; erreur, la donnée et le registre AL n’ont pas la même taille
11. MOV CS, 3D15h ; erreur, les données ne peuvent être déplacées aux registres segments
Solution:
- MOV AX, 3D15h
- MOV CS, AX
12. Écrasement du segment par défaut

Instruction Segment utilisé Segment par default


MOV AX, CS:[BP] CS:BP SS:BP

MOV DX, SS:[SI] SS:SI DS:SI

MOV AX, DS:[BP] DS:BP SS:BP


MOV CX, ES:[BX]+12 ES:BX+12 DS:BX+12
MOV SS:[DI]+32, AX SS:DI+32 DS:DI+32

5 Mode d’adressage

Les différents modes d’adressage du microprocesseur Intel 8086 sont :

Mode d’adressage Format opérande Registre Segment

Registre Registre registre aucun


Accès rapide Immédiat donnée Aucun
Direct déplacement DS
indirect relatif à une [BX+déplacement] DS
base [BP+déplacement] SS
Mémoire [déplacement +SI] DS
indirect indexé
[déplacement +DI] DS
Accès long [déplacement+BX+SI] DS
[déplacement+BX+DI] DS
indirect basé indexé
[déplacement +BP+SI] SS
[déplacement +BP+DI] SS

35

Vous aimerez peut-être aussi