Plan du cours
Chapitre 1. Introduction à l’archi. des ordi.
Chapitre 2. Unités fonctionnelles
Chapitre 4. Présentation du μp 8086 et environnement Emu8086.
Chapitre 5. Jeu d’instruction du μp 8086
Chapitre 5. Modes d’adressage
Chapitre 6. Variables et sauts
Chapitre 7. Procédures et interruptions
Chapitre 8. Application: accès aux entrées sorties
89
Chapitre 5 . Modes d’adressage
Dans ce chapitre
I. Adressage immédiat et par registre
II. Adressage direct
III. Adressage indirect
IV. Taille de la donnée mémoire
90
1
I. Adressage immédiat et
par registre
Chapitre 5. Modes d’adressage
I. Adressage immédiat et par registre
Présentation
Soit le programme:
MOV AX, 200h Adressage immédiat
MOV BX, 10101100b Adressage immédiat
ADD AX,BX Adressage registre
MUL BL Adressage registre
Jusqu'à présent, les opérandes utilisées sont:
• Registre ou valeur immédiate
• Aucun contenu mémoire
Nous allons présenter de nouveaux modes qui manipulent les
données en mémoire.
92
2
II. Adressage direct
Chapitre 5. Modes d’adressage
II. Adressage direct
Présentation
MOV AX, [243] ; Charger le contenu de la mémoire d'adresse
DS:243 dans AX
MOV [123], AX ; Charger le contenu de AX dans la mémoire
d'adresse DS:123
MOV AX, SS:[200] ; Charger le contenu de la mémoire SS:200
dans AX
▪ Utilisé lorsqu’un opérande se trouve en mémoire.
▪ L’adresse de la case mémoire RSeg:Offset est utilisée directement dans
l’instruction.
▪ L’adresse offset de l’adresse RSeg:Offset doit être placée entre [ ].
▪ Si le segment n’est pas précisé, c’est DS qui est pris par défaut.
94
3
III. Adressage indirect
1. Adressage basé
2. Cas général
Chapitre 5. Modes d’adressage
III. Adressage indirect
1. Adressage basé
MOV [BX], AX ; Charger le contenu de AX dans la mémoire
d'adresse DS:BX
MOV AX, ES:[BX] ; Charger le contenu de la mémoire ES:BX dans
AX
MOV AX, [DI] ; Charger le contenu de la mémoire d'adresse
DS:DI dans AX
MOV AX, [BP] ; Charger le contenu de la mémoire d'adresse
????? dans AX
▪ Utilisé lorsqu’un opérande se trouve en mémoire.
▪ L’offset de l’adresse se trouve dans l’un des 4 registres d’offset BX, BP, SI ou DI.
▪ L’adresse de la case mémoire est donnée par RSeg:ROff.
▪ L’adresse offset de l’adresse RSeg:ROff doit être placée entre [ ].
▪ Si le RSeg n’est pas précisé, c’est le segment par défaut qui sera utilisé selon le
tableau suivant:
96
4
Chapitre 5. Modes d’adressage
III. Adressage indirect
1. Adressage basé
MOV [BX], AX ; Charger le contenu de AX dans la mémoire
d'adresse DS:BX
MOV AX, ES:[BX] ; Charger le contenu de la mémoire ES:BX dans
AX
MOV AX, [DI] ; Charger le contenu de la mémoire d'adresse
DS:DI dans AX
MOV AX, [BP] ; Charger le contenu de la mémoire d'adresse
SS:BP dans AX
▪ Utilisé lorsqu’un opérande se trouve en mémoire.
▪ L’offset de l’adresse se trouve dans l’un des 4 registres d’offset BX, BP, SI ou DI.
▪ L’adresse de la case mémoire est donnée par RSeg:ROff.
▪ L’adresse offset de l’adresse RSeg:ROff doit être placée entre [ ].
▪ Si le RSeg n’est pas précisé, c’est le segment par défaut qui sera utilisé selon le
tableau suivant:
97
Chapitre 5. Modes d’adressage
III. Adressage indirect
2. Cas général
DS ES SS
▪ DS : Deplace ▪ ES : Deplace ▪ SS : BP + Deplace
▪ DS : BX ▪ ES : BX ▪ SS : BP + SI
▪ DS : SI ▪ ES : SI ▪ SS : BP + DI
▪ DS : DI ▪ ES : DI ▪ SS : BP + SI + Deplace
▪ DS : BX + Deplace ▪ ES : BX + Deplace ▪ SS : BP + DI + Deplace
▪ DS : SI + Deplace ▪ ES : SI + Deplace
▪ DS : DI + Deplace ▪ ES : DI + Deplace
▪ DS : BX + SI ▪ ES : BX + SI
▪ DS : BX + DI ▪ ES : BX + DI
▪ DS : BX + SI + Deplace ▪ ES : BX + SI + Deplace
▪ DS : BX + DI + Deplace ▪ ES : BX + DI + Deplace
Deplace est un nombre (+,-) d’octets qui correspond à un déplacement en mémoire.
Le segment DS est le segment par défaut => n’est pas nécessaire de l’indiquer
98
5
IV. Taille de la donnée mémoire
Chapitre 5. Modes d’adressage
IV. Taille de la donnée mémoire
1. WORD PTR , BYTE PTR
Si la donnée mémoire pointée est :
▪ Un octet, nous la faisons précéder par « BYTE PTR » ou « b. »
▪ Un mot 16 bits: nous la faisons précéder par « WORD PTR » ou « w. »
Exemple:
MOV WORD PTR [BX], AX ; Charger le contenu de AX dans la mémoire
d'adresse DS:BX de taille 16 bits
MUL ES: [DI+10] ; Multiplier ??
AL par le contenu de la mémoire ES:DI+10
de taille 8 bits
100
6
Chapitre 5. Modes d’adressage
IV. Taille de la donnée mémoire
1. WORD PTR , BYTE PTR
Si la donnée mémoire pointée est :
▪ Un octet, nous la faisons précéder par « BYTE PTR » ou « b. »
▪ Un mot 16 bits: nous la faisons précéder par « WORD PTR » ou « w. »
Exemple:
MOV WORD PTR [BX], AX ; Charger le contenu de AX dans la mémoire
d'adresse DS:BX de taille 16 bits
MUL BYTE PTR ES: [DI+10] ; Multiplier AL par le contenu de la mémoire
ES:DI+10 de taille 8 bits
MUL WORD PTR ES: [DI+10] ; Multiplier AX par le contenu de la mémoire
ES:DI+10 de taille 16 bits
101
Plan du cours
Chapitre 1. Introduction à l’archi. des ordi.
Chapitre 2. Unités fonctionnelles
Chapitre 4. Présentation du μp 8086 et environnement Emu8086.
Chapitre 5. Jeu d’instruction du μp 8086
Chapitre 5. Modes d’adressage
Chapitre 6. Variables et sauts
Chapitre 7. Procédures et interruptions
Chapitre 8. Application: accès aux entrées sorties
102
7
Chapitre 6 . Variables et sauts
Dans ce chapitre
I. Les variables
II. Les sauts
103
I. Les variables
1. Les constantes
2. Les variables simples
3. Les variables tableaux
4. SEG, OFFSET et LEA , LDS, LES
8
Chapitre 6. Variables et sauts
I. Les variables
1. Les constantes
▪ Constantes numériques
➢ 1898 base 10
➢ 10101010b base 2
➢ 7645o base 8
➢ 0F6Ah base 16
▪ Constantes chaînes de caractères
➢ 'Cours SMI' , 'l''année'
▪ Déclarer une constante
➢ Syntaxe: nom EQU constante
➢ Exemple: MAX EQU 10
105
Chapitre 6. Variables et sauts
I. Les variables
2. Les variables simples
▪ Une variable est un emplacement mémoire utilisable dans un programme
après sa déclaration par son nom ou son adresse.
▪ Un nom correcte :
➢ Contient : chiffres, lettres et '_'
➢ Ne commencer jamais par un chiffre
➢ Ne contient aucun espace
➢ Différent des mots clé du langage
▪ Après création, le nom d’une variable désigne l’emplacement mémoire
contenant la valeur de la variable.
▪ Exemple:
MOV AX,V1 ; charger dans AX le contenu de l’adresse de la variable V1
; si V1 est l’emplacement mémoire d’offset : 0100h
; alors MOV AX,[0100h]
106
9
Chapitre 6. Variables et sauts
I. Les variables
2. Les variables simples
Création avec DB et DW
▪ Déclarer une variable c’est réserver un emplacement mémoire pour y stocker
la valeur de cette variable.
▪ Une variable peut pointer des données sur:
➢ Un octet (8 bits)=> on utilise l’instructions DB (Define Byte)
➢ Un mot (16 bits)=> on utilise l’instructions DW (Define Word)
▪ Exemples:
V1 DB 28
c1 DB 'y' ; code du caractère « y »
un_octet DB 23h ; la valeur est un octet
chaine DB 'cours info', 20, '$'
deux_octets DW 2365h ; la valeur est un mot 16 bits
mot1 DW 6789
Mot2 DW (2*6+64)/77 ;!! Constantes, pas de variables
107
Chapitre 6. Variables et sauts
I. Les variables
3. Les tableaux
▪ Comme en langage C par exemple, un tableau est une liste de variables qui
sont associées à un même nom et utilisables avec ce nom + un déplacement.
▪ Exemples de créations:
Tab_int1 DB 1, 2, 3, 4, 5 ; tableau de 5 octets
Tab_int2 DB 10 dup (2) ; tableau de 10 octets initialisés à 2
Tab_int3 DW 20 dup ( ?) ; tableau de 20 mots non initialisés
Tab_char1 DB 'I' , 'N' , 'F' , 'O' , '$' ; tableau de caractères = chaîne
Tab_char2 DB 'INFO$' ; équivalent au précédent
; $ pour marquer la fin de la chaîne
▪ Exemples d'utilisation [offset] :
Erreur car la donnée
mémoire est de taille
incompatible
108
10