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