La programmation en assembleur du
microprocesseur 8086
Les instructions peuvent être classées en
groupes
• instructions de transfert de données ;
• instructions arithmétiques ;
• instructions logiques ;
• instructions de branchement ...
Les instructions de transfert
• Elles permettent de déplacer des données
d’une source vers une destination :
– registre vers mémoire ;
– registre vers registre ;
– mémoire vers registre.
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).
MOV destination,source
• Syntaxe : MOV destination,source
Il existe différentes façons de spécifier
l’adresse d’une case mémoire dans une
instruction : ce sont les modes d’adressage.
Exemples de modes d’adressage simples
• • mov ax,bx : charge le contenu du registre
BX dans le registre AX. Dans ce cas, le
transfert se fait de registre à registre :
adressage par registre ;
• mov al,12H : charge le registre AL avec la
valeur 12H. La donnée est fournie
immédiatement avec l’instruction : adressage
immédiat.
• mov bl,[1200H] : transfère le contenu de la
case mémoire d’adresse effective (offset) 1200H
vers le registre BL. L’instruction comporte
l’adresse de la case mémoire où se trouve la
donnée : adressage direct.
• 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.
• On peut changer le segment lors d’un
adressage direct en ajoutant un préfixe de
segment, exemple : mov bl,es :[1200H]. 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 :
– mov byte ptr [1100H],65H : transfère la valeur 65H
(sur 1 octet) dans la case mémoire d’offset 1100H ;
– mov word ptr [1100H],65H : transfère la valeur
0065H (sur 2 octets) dans les cases mémoire d’offset 1100H
et 1101H.
Modes d’adressage évolués
• adressage basé : l’offset est contenu dans un registre de
base BX ou BP.
Exemples :
mov al,[bx] : transfère la donnée dont l’offset est
contenu dans le registre de base 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 ;
mov al,[bp] : 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.
adressage basé
• 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.
Exemples :
mov al,[si] : charge le registre AL avec le
contenu de la case mémoire dont
l’offset est contenu dans SI ;
• mov [di],bx : charge les cases mémoire d’offset DI et DI
+ 1 avec le contenu du registre BX.
• Remarque : une valeur constante peut éventuellement être
ajoutée aux registres de base ou d’index pour obtenir l’offset.
• Exemple :
mov [si+100H],ax
qui peut aussi s’´ecrire
mov [si][100H],ax
ou encore
mov 100H[si],ax