Informatique Industrielle : TD 2 Microprocesseur 8086 + Registres + Adressages
Télécharger PDFExercices sur les Instructions Assembleur avec le Microprocesseur 8086
Exercice 1 : Rôle des instructions et contenu des registres/mémoires
1. mov AL,2 : Charge la valeur décimale 2 dans le registre AL.
2. mov AL,[25] : Charge dans AL la valeur stockée à l'adresse mémoire 25h (hexadécimale).
3. mov [B4F],AX : Stocke la valeur du registre AX à l'adresse mémoire B4Fh.
4. mov AX,[B4F] : Charge dans AX la valeur stockée à l'adresse mémoire B4Fh.
5. mov AL,[DI] : Charge dans AL la valeur stockée à l'adresse mémoire pointée par le registre DI (adresse physique = DS:DI).
6. mov BP,05 : Charge la valeur décimale 5 dans le registre BP.
7. mov [BP],05 : Stocke la valeur décimale 5 à l'adresse mémoire pointée par BP (adresse physique = SS:BP).
8. mov AL,DS:[BX] : Charge dans AL la valeur stockée à l'adresse mémoire DS:BX.
9. mov AL,DS:[DI] : Charge dans AL la valeur stockée à l'adresse mémoire DS:DI.
10. mov DS:[DI],AL : Stocke la valeur du registre AL à l'adresse mémoire DS:DI.
11. mov AL,SS:[DI] : Charge dans AL la valeur stockée à l'adresse mémoire SS:DI.
Exercice 2 : Contenu des registres BL, BH et BX après l'instruction
Après l'exécution de mov BX,D74EH :
- BL = 4Eh
- BH = D7h
- BX = D74Eh
Exercice 3 : Contenu de la destination
1. Avec mov [SI],AX et SI=2000h, AX=B5C7h :
La mémoire à l'adresse 2000h contient B5C7h.
2. Avec mov BX,[DI] et DI=4044h, choisir un contenu mémoire (exemple : 1234h) :
BX = 1234h (valeur stockée à l'adresse 4044h).
Exercice 4 : Tracé du programme et affichage de la RAM
1. Tracé du programme :
Initialisation :
- BX = 4000h
- AX = 2233h
Exécution :
- Mémoire à 4000h : 2233h
- Mémoire à 4002h : 4455h
- Mémoire à 4004h : 66h
- Mémoire à 4005h : 77h
Exercice 5 : Adresses physiques et contenus mémoire
1. Calcul des adresses physiques et contenus mémoire (avec DS=0B9Ch, SS=0C40h, CS=0B99h) :
a. mov [SI],AL : Adresse physique = DS:SI = 0B9C0h + 0021h = 0B9E1h (contenu : valeur de AL).
b. mov [SI+1],AH : Adresse physique = DS:SI + 1 = 0B9E2h (contenu : valeur de AH).
c. mov [SI],AX : Adresse physique = DS:SI = 0B9E1h (contenu : AX = 56EFh).
d. mov [SI],AX : Adresse physique = DS:SI = 0B9E1h (contenu : AX = 56EFh).
e. mov [DI+100],CS : Adresse physique = DS:DI + 100h = 0B9C0h + 2042h + 100h = 0B9C0h + 2142h = 0DAC2h (contenu : CS = 0B99h).
f. mov [BX],DX : Adresse physique = DS:BX = 0B9C0h + 100Ch = 0B9C0h + 100Ch = 0C9CCh (contenu : DX = 002Eh).
g. mov [BP+150h],AX : Adresse physique = SS:BP + 150h = 0C400h + 5400h + 150h = 0C400h + 5550h = 0D950h (contenu : AX = 56EFh).
h. mov [BP][DI+75h],BX : Adresse physique = SS:BP + (DS:DI + 75h) = 0C400h + 5400h + (0B9C0h + 2042h + 75h) = 0C400h + 5400h + 0D9B7h = 0C400h + 0D9B7h (contenu : BX = 100Ch).
Exercice 6 : Tracé du programme avec gestion de la pile
Tracé du programme avec SP initial quelconque (exemple : SP = 2000h) :
- push ax : SP = 1FFEh, mémoire à 1FFEh = 2233h
- push ax : SP = 1FFCh, mémoire à 1FFCh = 4455h
- push ax : SP = 1FFAh, mémoire à 1FFAh = 6677h
- mov bp,sp : BP = 1FFAh
- mov al,[bp+3] : AL = 77h (adresse BP + 3 = 1FFEh)
- mov bx,[bp+1] : BX = 4455h (adresse BP + 1 = 1FFCh)
Exercice 7 : Locations OFFSET des données dans le segment
1. d1 DB 55H : OFFSET = 0
2. d2 DW 2560H : OFFSET = 1
3. m1 DW 02 : OFFSET = 3
4. m2 DB "Tel : 25607080" : OFFSET = 5 (chaîne de 12 octets)
5. r1 DD 0A23B4D7FH, 12CDH : OFFSET = 17 (32 bits pour 0A23B4D7FH), OFFSET = 1B (16 bits pour 12CDH)
6. r2 DQ 23B4D7F012345576H, 01102007H : OFFSET = 1D (64 bits pour 23B4D7F012345576H), OFFSET = 21 (64 bits pour 01102007H)
7. r3 DT 45698732165478965321H : OFFSET = 25 (10 octets pour la date)
8. Tab1 DB 6 DUP (253) : OFFSET = 2B (6 octets)
9. Tab2 DW 12 DUP (?) : OFFSET = 31 (24 octets)
Exercice 8 : Contenu du registre CL et mode d'adressage
1. Après mov cl,var[bx,si+1] avec BX=3, SI=2 :
CL = 32h (valeur de var[3,2+1] = var[3,3] = 32h).
2. Le mode d'adressage utilisé est adressage basé avec index et décalage.
Exercice 9 : Échange de deux cases mémoire en mots
1. Définition dans le segment de données :
DONNEE SEGMENT
A DW ?
B DW ?
DONNEE ENDS
2. Programme pour échanger A et B :
MOV AX, A
MOV BX, B
MOV A, BX
MOV B, AX
Exercice 10 : Valeurs de AX et CX après exécution
1. Après le programme MOV AX,0 / MOV CX,5 / LOOP Boucle :
AX = 5, CX = 0.
2. Après le programme MOV CX,5 / LOOP Debut :
CX = 0 (car LOOP décrémente CX jusqu'à 0).
Exercice 11 : Tracé du programme et valeurs des indicateurs CF et OF
1. Après mov al,64h / mov bl,2 / mul bl :
- AL = 64h * 2 = 94h (résultat de la multiplication)
- AH = 0 (car 64h * 2 ne dépasse pas 8 bits)
- CF = 0 (pas de débordement)
- OF = 0 (pas de débordement en 8 bits)
2. Après mov al,64h / mov cl,3 / mul cl :
- AL = 64h * 3 = 12Ch (résultat de la multiplication)
- AH = 0 (car 64h * 3 ne dépasse pas 8 bits)
- CF = 0 (pas de débordement)
- OF = 0 (pas de débordement en 8 bits)
FAQ
1. Qu'est-ce que l'adressage basé avec index et décalage ?
C'est un mode d'adressage où l'adresse est calculée comme la somme d'un registre de base (BX, BP, SI, DI), d'un registre d'index et d'un décalage (valeur immédiate). Exemple : var[bx,si+1].
2. Comment tracer un programme en assembleur ?
Pour tracer un programme, il faut suivre l'état des registres et de la mémoire à chaque instruction. Noter les valeurs avant et après chaque opération.
3. Que signifie SS:BP dans l'adressage mémoire ?
SS est le segment de pile, et BP est le registre pointant une adresse dans ce segment. SS:BP donne l'adresse physique en mémoire de pile.