Informatique Industrielle : TP1 : Premiers pas en Assembleur 8086
Télécharger PDFTP Premiers Pas en Assembleur 8086
I – Préparation théorique
I-1 / Valeurs des données
TP DW 8086
TP = TP (valeur hexadécimale 8086)
TP DB 5 dup ("Assembleur 8086")
TP = Assembleur 8086 (chaîne de caractères répétée 5 fois)
Nombre DD ?
Nombre = Erreur : la directive DD n'existe pas en 8086
Matrice DW 12, 54, 30
Matrice = 12, 54, 30 (valeurs hexadécimales en mémoire)
Matrice DB 5 DUP (0, 1)
Matrice = 0, 1, 0, 1, 0 (répétition de 5 octets 0 et 1)
Cinq EQU 5*6
Cinq = 30 (valeur calculée)
Six EQU Cinq*2
Six = 60 (valeur calculée)
Douze EQU Cinq + Six
Douze = 90 (valeur calculée)
Douze = Matrice DW 7 DUP (?)
Matrice = 7 emplacements réservés (non initialisés)
Chaine DB ‘Ceci est un message'
Chaine = Ceci est un message (chaîne de caractères en mémoire)
Cinq = 30 (valeur hexadécimale)
Six = Douze (référence à la constante Douze)
I-2 / Analyse d'un programme Assembleur
a- Les différentes parties d'un programme Assembleur 8086 sont :
- La section de données (DATA)
- La section de code (CODE)
- Les directives (pseudo-instructions)
- Les instructions (opérations exécutables)
b- Le rôle de la première partie est généralement de :
- Déclarer les variables et réservations de mémoire
- Définir les constantes avec EQU
- Préparer les données nécessaires au programme
c- Classification des directives et instructions :
Directives :
- DW
- DB
- DUP
- ENDS
Mnémoniques (Instructions) :
- MOV
- INC
- JNE
- CMP
- HLT
Autre :
- AX
- AL
- AH
- DL
- début
- encore
II – Premiers pas en programmation
II – 1 / L’instruction MOV
L’instruction MOV (Move) permet de transférer des données entre :
- Deux registres
- Un registre et une mémoire
- Une mémoire et un registre
- Un registre et une valeur immédiate
- Une mémoire et une valeur immédiate
Exemples :
- MOV AX, BX : Transfère le contenu de BX vers AX.
- MOV BL, [1200H] : Transfère la valeur à l’adresse mémoire 1200H vers BL.
- MOV [1200H], AL : Transfère la valeur de AL vers l’adresse mémoire 1200H.
- MOV AL, 12H : Charge AL avec la valeur immédiate 12H.
- MOV [1200H], 12H : Charge l’adresse mémoire 1200H avec la valeur immédiate 12H.
II – 2 / Débuter avec Emu8086
1. Ouvrir l’émulateur Emu8086.
2. Créer un nouveau document via New puis choisir empty workspace.
3. Saisir le code Assembleur suivant :
MOV AL, 10H
MOV AH, 09H
HLT
4. Emuler le code via Emulate puis exécuter via Run.
5. Après exécution, observer les registres :
- AL = 10H (16 en décimal)
- AH = 09H (9 en décimal)
6. Utiliser Reload puis Single Step pour suivre l’exécution instruction par instruction.
7. Le rôle de Single Step :
- Exécute le programme instruction par instruction
- Permet d’observer les modifications des registres et de la mémoire à chaque étape
II – 3 / Manipulation des registres et de la mémoire
1. Saisir puis exécuter le code :
MOV AX, 05H
MOV [100H], AX
HLT
2. Après exécution :
- Registres : AX = 05H (5 en décimal)
- Mémoire : [100H] = 05H (5 en décimal)
3. Taper 100 dans la zone adresse mémoire et observer :
- Adresse 0100H : Valeur Hexadécimale = 05H, Décimale = 5, ASCII = non applicable (valeur numérique)
4. Saisir et exécuter les codes suivants :
MOV AH, 05H
MOV [100H], AH
HLT
MOV AX, 55H
MOV [100H], AX
HLT
MOV AX, 55
MOV [100H], AX
HLT
MOV AL, 55H
MOV AH, 36H
MOV [100H], AL
MOV [104H], AH
HLT
5. Résultats :
Registres modifiés :
- AX
- AH
- AL
Cases mémoire modifiées :
- [100H]
- [104H]
Tableau des valeurs :
Code | Adresse mémoire | Valeur hexadécimale | Valeur décimale
MOV AH, 05H MOV [100H], AH | 100H | 05H | 5
MOV AX, 55H MOV [100H], AX | 100H | 55H | 85
MOV AX, 55 MOV [100H], AX | 100H | 55H | 85
MOV AL, 55H MOV AH, 36H MOV [100H], AL MOV [104H], AH | 100H | 55H | 85
| 104H | 36H | 54
6. Saisir et exécuter les codes suivants :
MOV AX, 55H
MOV [100H], AX
MOV BX, 100H
MOV CX, [BX]
HLT
MOV [100H], 36H
MOV [104H], 52H
MOV [106H], 69H
MOV BX, 100H
MOV CX, [BX]
MOV DX, [BX+4]
MOV AX, [BX]+6
HLT
7. Résultats :
Registres modifiés :
- AX
- BX
- CX
- DX
Cases mémoire modifiées :
- [100H]
- [104H]
- [106H]
Tableau des instructions :
Instruction | Description
MOV AX, 55H | Charge AX avec la valeur hexadécimale 55H
MOV [100H], AX | Stocke la valeur de AX à l’adresse mémoire 100H
MOV BX, 100H | Charge BX avec l’adresse mémoire 100H
MOV CX, [BX] | Charge CX avec la valeur à l’adresse pointée par BX (100H)
HLT | Arrête l’exécution du programme
MOV [100H], 36H | Stocke la valeur hexadécimale 36H à l’adresse 100H
MOV [104H], 52H | Stocke la valeur hexadécimale 52H à l’adresse 104H
MOV [106H], 69H | Stocke la valeur hexadécimale 69H à l’adresse 106H
MOV CX, [BX] | Charge CX avec la valeur à l’adresse 100H (36H)
MOV DX, [BX+4] | Charge DX avec la valeur à l’adresse 104H (52H)
MOV AX, [BX]+6 | Charge AX avec la valeur à l’adresse 106H (69H), puis incrémente BX de 6
Conclusion
L’assembleur 8086 permet de manipuler directement les registres et la mémoire du processeur. L’instruction MOV est essentielle pour le transfert de données entre ces éléments. L’émulateur Emu8086 facilite la compréhension de ces opérations en visualisant les modifications en temps réel.
FAQ
Quelle est la différence entre AX et AH en Assembleur 8086 ?
AX est un registre de 16 bits, tandis que AH est sa moitié supérieure (8 bits). MOV AX, 55H charge les deux octets, alors que MOV AH, 05H charge uniquement la moitié supérieure.
Pourquoi l’adresse 0100H contient-elle plusieurs valeurs après exécution ?
L’adresse 0100H est celle où le programme est stocké en mémoire. Les valeurs observées correspondent aux instructions exécutées et non aux données manipulées.
Que signifie l’instruction HLT ?
HLT signifie Halt (Arrêt). Elle stoppe l’exécution du programme et place le processeur en mode d’attente.