Informatique Industrielle : TP2 : Instructions et modes d’adressage en 8086...
Télécharger PDFTP Systèmes à Microprocesseur – Instructions et Modes d'Adressage en 8086
I/ Préparation théorique
A/ Rappel sur le 8086
Le 8086 est un microprocesseur 16 bits. Il ne peut pas manipuler des adresses mémoires de 20 bits (5 chiffres en hexadécimal). La solution adoptée est :
- Diviser la mémoire en segments.
- Représenter une adresse relative (offset) sur 16 bits (4 chiffres en hexadécimal) parcourant un segment.
- Utiliser une adresse composée de deux parties : un segment et un offset (exemple : 2000:350 au lieu de 20350).
Analogie : Dans un hôtel, la chambre 213 signifie l'étage 2, chambre 13.
B/ Adresses absolues
Convertir les adresses suivantes en adresses absolues :
- Adresse absolue : 3500 : AB00
- Adresse absolue : 0022 : FFFF
- Adresse absolue : 2000 : 0350
- Adresse absolue : 4055 : 3192
C/ Instructions correctes et corrections
| Instruction | Correction |
|---|---|
| MOV AX, 9 | Correcte |
| MOV 9, AX | Invalide (l'adressage immédiat ne peut pas être la destination) |
| MOV AX, BX | Correcte |
| MOV AX, [BX] | Correcte |
| MOV AX, [BX+2] | Correcte |
| PUSH AL | Correcte |
| MOV AX, N1 | Invalide (N1 n'est pas défini comme variable) |
| MOV AX, [1] | Correcte (adressage direct) |
| ROL AX, 2 | Correcte |
| CMP [1000], 2 | Correcte |
| MOV AX, TAU | Invalide (TAU n'est pas défini comme variable) |
| MOV AX, BL | Correcte |
II/ Opérations en 8086
1/ Code assembleur à saisir
MOV AX, 05h MOV BX, 15h ADD AX, BX
2/ Tableau des opérations
| Opération réalisée | Registres modifiés | Résultat | Registre du résultat |
|---|---|---|---|
| MOV AX, 05h | AX | AX = 0005h | AX |
| MOV BX, 15h | BX | BX = 0015h | BX |
| ADD AX, BX | AX, BX | AX = 001Ah (05h + 15h) | AX |
3/ Code assembleur et tableau
MOV AX, 195h MOV BX, 911h ADD AX, BX
| Instruction | Modification apportée | Explication |
|---|---|---|
| MOV AX, 195h | AX = 0195h | Chargement immédiat de AX avec 195h |
| MOV BX, 911h | BX = 0911h | Chargement immédiat de BX avec 911h |
| ADD AX, BX | AX = 0A46h (195h + 911h) | Addition des valeurs de AX et BX |
MOV AX, 195h ADD AL, 02
| Instruction | Modification apportée | Explication |
|---|---|---|
| MOV AX, 1002h | AX = 1002h | Chargement immédiat de AX avec 1002h |
| MOV BH, 02h | BH = 02h | Chargement immédiat de BH avec 02h |
| SUB AX, BX | AX = 0FFEh (1002h - 0002h) | Soustraction des valeurs de AX et BX |
| SUB AH, 03h | AH = 0FCh (10h - 03h) | Soustraction immédiate de 03h de AH |
| MUL BH | AX = 0004h (02h * 02h) | Multiplication de AL par BH, résultat stocké dans AX |
4/ Code assembleur et observation
nombre dw ? MOV AX, 04h MOV nombre, 05h MUL nombre
5/ Que représente « nombre » ?
« nombre » est une variable de 16 bits (dw) déclarée en mémoire pour stocker une valeur.
6/ Commenter le résultat
Après exécution : AX contient le produit de AL et de la valeur stockée dans « nombre » (05h).
III/ Modes d'Adressage
Les modes d'adressage en assembleur 8086 permettent de définir comment les opérandes sont accédés dans les instructions. Ils sont :
- Adressage immédiat : Chargement d'une constante dans un registre (exemple : MOV AH, 12h).
- Adressage registre : Opération entre deux registres (exemple : MOV AX, BX).
- Adressage direct : Chargement d'une variable déclarée en mémoire (exemple : MOV CH, surface).
- Adressage base : Accès à la mémoire via un registre (BX ou BP) avec un segment (DS ou SS).
- Adressage indexé : Accès à la mémoire via un registre d'index (SI ou DI) avec un segment (DS).
Exemples de modes d'adressage
| Instruction | Mode d'adressage | Résultat |
|---|---|---|
| MOV [100h], 10h | Adressage direct | Mémoire à DS:100h = 10h |
| MOV [101h], 11h | Adressage direct | Mémoire à DS:101h = 11h |
| MOV [102h], 12h | Adressage direct | Mémoire à DS:102h = 12h |
| MOV [103h], 13h | Adressage direct | Mémoire à DS:103h = 13h |
| MOV [104h], 14h | Adressage direct | Mémoire à DS:104h = 14h |
| MOV [107h], 17h | Adressage direct | Mémoire à DS:107h = 17h |
| MOV AX, 100h | Adressage immédiat | AX = 0100h |
| MOV BX, AX | Adressage registre | BX = 0100h |
| MOV CX, BX | Adressage registre | CX = 0100h |
| MOV DL, CH | Adressage registre | DL = 00h (valeur basse de CX) |
| MOV DH, [100h] | Adressage direct | DH = 10h (valeur stockée à DS:100h) |
| MOV CX, [102h] | Adressage direct | CX = 0120h (valeur stockée à DS:102h) |
| MOV BX, 103h | Adressage immédiat | BX = 0103h |
| MOV BP, 103h | Adressage immédiat | BP = 0103h |
| MOV DL, [BX] | Adressage base (via BX) | DL = valeur à DS:103h |
| MOV DL, [BP] | Adressage base (via BP) | DL = valeur à SS:103h |
| MOV DH, [BX]+4 | Adressage base avec offset | DH = valeur à DS:107h (103h + 4) |
| MOV DH, [BP]+4 | Adressage base avec offset | DH = valeur à SS:107h (103h + 4) |
| MOV SI, 4 | Adressage immédiat | SI = 0004h |
| HLT | Arrêt du processeur | Arrêt du programme |
Partie BC : Code Assembleur
MOV AX, 55h MOV BX, 88h MOV DX, AX MOV CX, BX ADD BL, AL MUL BL, AL ; Utiliser MUL AX, BL pour multiplier AX par BL
FAQ
1/ Qu'est-ce qu'un offset en 8086 ?
Un offset est une adresse relative à l'intérieur d'un segment mémoire de 16 bits. Il permet de localiser une donnée dans un segment.
2/ Pourquoi utiliser des segments en 8086 ?
Le 8086 utilise des segments pour gérer une mémoire plus grande que 16 bits, en combinant un segment et un offset pour former une adresse de 20 bits.
3/ Quels registres sont utilisés pour l'adressage base ?
Les registres BX et BP sont utilisés pour l'adressage base, respectivement avec les segments DS et SS.