Vous êtes sur la page 1sur 8

TD MIR IUT Tahoua: L’assembleur x86

Travaux dirigés

Partie I: Questions de cours

Répondre par vrai ou faux les affirmations suivantes:

a) Une instruction en cours d’exécution a plus de priorité qu’une instruction d’interruption.


b) Un assembleur est un programme qui traite les instructions d’un programme source écrit
en langage d’assemblage pour en faire un programme objet en langage machine
exécutable.
c) Les instructions dans un programme en assembleur sont, par défaut, exécutées
séquentiellement.
d) En assembleur, les structures de contrôle plus évoluées (boucles, switch,etc,…) sont
réalisées à l’aide des instructions de saut.
e) Dans le processeur 80286, le mode (d’adressage) protégé 16 bits permet l'accès à 16Mo de
mémoire et empêche aux programmes d'accéder à la mémoire des uns et des autres.
f) Les instructions d’interruption permettent au processeur de gérer simultanément plusieurs
tâches tout en évitant le risque d’interférence.
g) Une pile est une liste First-In First-Out
h) Le registre ESP contient l'adresse de la donnée qui sera retirée de la pile
i) L'instruction POP ajoute 4 à la valeur du registre ESP, puis lit le double mot en [ESP].
j) L'instruction PUSH insère un double mot sur la pile en ôtant 4 de la valeur du registre
ESP, puis en stockant le double mot en [ESP].
k) En langage assembleur, on peut accomplir plusieurs opérations arithmétiques à la fois
l) Dans le processeur 8086, tous les registres sont directement accessibles.
m) Due au fait qu’ils sont plus rapides à exécuter, les programmes écrits en assembleur sont
moins sollicités dans les applications à temps réel
n) L’accumulateur joue le rôle de mémoire vive pour l’unité arithmétique et logique
o) L'instruction RET dépile une adresse et saute à l’adresse précédente
p) L'instruction CALL effectue un saut conditionnel vers un sous-programme et empile
l'adresse de l'instruction suivante
q) Quand on appelle une procédure, le registre IP est empilé sur la pile pour savoir où revenir.
r) Une interruption est émise pour appeler une opération système ou matérielle
s) L’instruction int est utilisée pour générer une interruption logicielle. Mieux, munie de
l’opérande 21h, elle transfère le contrôle au système d’exploitation d’abord, puis au sous
programme qui exécute les opérations d’entrées/sorties.
t) Les directives sont toujours destinées au processeur, non à l'assembleur.

1
TD MIR IUT Tahoua: L’assembleur x86

Partie II: Série d’exercices

Exercice 1

Ecrire des instructions en assembleur pour évaluer l’expression arithmétique suivante, tout en
laissant le résultat dans l’accumulateur.

S = 5+ (6-2)

a) En utilisant un seul registre


b) En utilisant deux registres
c) En utilisant trois registres

Exercice 2

A) Ecrire des instructions en assembleur pour évaluer les expressions suivantes.


1) a = b+c-d
2) z = x+y+w-v+u
B) Réécrire les instructions du A) en utilisant les registres ah, al, bh, bl, et autres pour
représenter les variables a, b, c, d, z, x, y, w, u, and v.

Exercice 3: Segmentation de la mémoire

Rappelons qu’un segment de mémoire est une zone mémoire adressable avec une valeur fixée
du segment (les 16 bits de poids fort pour un processeur 32 bits). Dans ce cas, un segment a
donc une taille maximale de 64 Ko. Mieux, dans un adressage indirect, l'adresse physique sur
32 bits est trouvée de la manière suivante:

Adresse physique = 16 ∗ segment (sélecteur) + déplacement

Trouver l'adresse physique référencée par 047C:003B, où 047C représente l’adresse du


segment (sélecteur), et 003B représente l’adresse déplacement.

Exercice 4: adressage immédiat

1) A travers ce code programme, énumérez les registres qui ne supportent pas


l’adressage immédiat.

MOV AX, 03h


MOV BX, 1000h
MOV DX, ‘D’
MOV CX, 05h
MOV DS, 075h
MOV CS, 255
MOV SS, 80
MOV SP, 70o

2
TD MIR IUT Tahoua: L’assembleur x86

MOV BP, 65o


MOV IP, 95d
MOV SI, 73d
MOV DI, 500h

2) Dans le programme ci-dessus, commentez toutes les lignes d’instructions sauf celles
faisant intervenir la pile, et exécutez le programme à nouveau. Quelle conclusion tirez-
vous à travers le message d’erreurs.
3) Dans le programme ci-dessus, commentez les neuf premières lignes d’instructions, et
exécutez le programme à nouveau. Quelle conclusion tirez-vous à travers le message
d’erreurs.

Exercice 5 : adressage direct et adressage indirect

Rappelons quand il ya adressage direct, on note l’adresse de la donnée entre crochets ; alors quand il
ya adressage indirect on utilise le registre BX pour stocker l’adresse d’une donnée. Aussi, l’avantage
de l’adressage indirect, est sa flexibilité, car, par exemple on peut modifier l’adresse en BX pour
accéder à la case suivante d’un tableau.

MOV AX, [130]; adressage direct


MOV AX, [BX]; adressage indirect

NB: avant d’utiliser un adressage indirect, il faut charger le registre BX avec l’adresse d’une donnée. Cela est
généralement fait avec la directive offset ayant pour format:

data SEGMENT
truc DW 2016
data ENDS
...
MOV BX, offset truc
...
; Programme calculant la somme de deux entiers de 16 bits
; Mr. Madou
; Juin 2016
org 100h
data SEGMENT
A DW 10 ; A = 10
B DW 1789 ; B = 1789
result DW ? ; resultat
data ENDS
code SEGMENT
ASSUME DS:data, CS:code
debut:
MOV AX, data ; etiquette car 1ere instruction
MOV DS, AX ; initialise DS
; Le programme:
MOV AX, A
ADD AX, B
MOV result, AX ; range resultat
;Retour au DOS:
MOV AH, 4CH
INT 21H
code ENDS
END debut ; etiquette de la 1ere inst.

3
TD MIR IUT Tahoua: L’assembleur x86

Exercice 6

a) Exécutez le code programme ci-dessous. Quelle est le but de ce programme?

org 100h
mov ax, 0
Label_X:
add ax, 2
cmp ax, 20
jl Label_X
end
ret

b) Interprétez le résultat en substituant jl par jle

Exercice 7

Ecrire un programme en assembleur pour calculer la somme des dix premiers nombres
divisibles par cinq.

Exercice 8

Créez un nouveau fichier .com dans l’émulateur et copiez le programme code suivant.
Exécuter le programme. Quel est le rôle de ce programme ?

ORG 100h
.MODEL SMALL
.DATA
Array DB 10h, 20h, 30h, 40h, 50h
Count DW 0005h
Result DB 00h
.CODE
MOV AX,@DATA
MOV DS, AX
LEA SI, Array
DEC Count
MOV CX, Count
MOV AL, [SI]
NEXT: INC SI
CMP AL, [SI]
JC DOWN ; JNC DOWN
LOOP NEXT
JMP LAST
DOWN: XCHG AL, [SI]
LOOP NEXT
MOV Result, AL
LAST: MOV AH, 4Ch
INT 21h
END
RET

4
TD MIR IUT Tahoua: L’assembleur x86

Erxercice 9
Créez un nouveau fichier .com dans l’émulateur et copiez le programme code suivant.
Exécuter le programme. Quel est le rôle de ce programme ?

org 100h
.MODEL SMALL
.DATA
BCD DB 15h
Ans DB 00h
.CODE
MOV AX,@DATA
MOV DS, AX
MOV AL, BCD
AND AL, 0Fh
MOV BL, AL
MOV AL, BCD
AND AL, 0F0h
MOV CL, 04h
ROR AL, CL
MOV CL, 0Ah
MUL CL
ADD AL, BL
MOV Ans, AL
MOV AH, 4Ch
INT 21h
END
ret

Exercice 10

Créez un nouveau fichier .com dans l’émulateur et copiez le programme code suivant. Exécuter le
programme. Quel est le rôle de ce programme ?

org 100h
.MODEL SMALL
.DATA
Number DB 08h
Ans DW 0000h
.CODE
MOV AX,@DATA
MOV DS, AX
MOV CH, 00h
MOV AL, Number
MOV BL, AL
MOV CL, AL
SUB CL, 02h
NEXT: DEC BL
MUL BL
LOOP NEXT
MOV Ans, AX
MOV AH, 4Ch
INT 21h
END
RET

5
TD MIR IUT Tahoua: L’assembleur x86

Exercice 11

Créez un nouveau fichier .com dans l’émulateur et copiez le programme code suivant. Exécuter le
programme. Quel est le rôle de ce programme ?

org 100h
.MODEL SMALL
.DATA
Number DW 0FFFFh
Ans DW 2 DUP (?)
.CODE
MOV AX,@DATA
MOV DS, AX
MOV DX, 00h
MOV AX, Number
MUL Number
MOV Ans, AX
MOV Ans+2, DX
MOV AH, 4Ch
INT 21h
end
ret

Exercice 12

Créez un nouveau fichier .com dans l’émulateur et copiez le programme code suivant.
Exécuter le programme. Quel est le rôle de ce programme ?
org 100h
.MODEL SMALL .DATA
Array1 DW 1111h,2222h,3333h,4444h,5555h
Array2 DW 1010h,2020h,3030h,4040h,5050h
Count DW 0005h
.CODE
MOV AX,@DATA
MOV DS,AX
LEA SI,Array1
LEA DI,Array2
MOV CX,Count
NEXT: MOV BX,[SI]
MOV DX,[DI]
XCHG BX,DX
MOV [SI],BX
MOV [DI],DX
INC SI
INC SI
INC DI
INC DI
LOOP NEXT
MOV AH,4Ch
INT 21h
END
RET

6
TD MIR IUT Tahoua: L’assembleur x86

Exercice 13

Créez un nouveau fichier .com dans l’émulateur et copiez le programme code suivant.
Exécuter le programme. Quel est le rôle de ce programme ?

org 100h
.MODEL SMALL
.DATA
Array DB 5 DUP (0)
;DB 78h
;DB 20 DUP (0)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV BX, offset Array
MOV SI,05h
MOV CL,[BX+SI]
MOV SI,11H
MOV [BX+SI],CL
MOV AH,4Ch
INT 21h
END
Ret

Exercice 14

Expliquez ce que fait chaque ligne du programme ci-dessous. Quel est le rôle de ce
programme?

ORG 100h
MOV AX, 1212h;
MOV BX, 3434h;
PUSH AX;
PUSH BX;
POP AX;
POP BX;
RET
END

7
TD MIR IUT Tahoua: L’assembleur x86

Partie III: Solutions pour les exercices non traités en séances de TD

Exercice 8: le rôle de ce programme est de trouver le plus grand nombre dans un tableau

Exercice 9: le rôle de ce programme est de faire la conversion BCD vers binaire

Exercice 10: le rôle de ce programme est de trouver le factoriel d'un nombre donné

Exercice 11: le rôle de ce programme est de trouver le carré d'un nombre donné

Exercice 12: le rôle de ce programme est d’échanger deux bloques de données

Exercice 13: le rôle de ce programme est de montrer les différents modes de transfert des
données

Exercice 14: le rôle de ce programme est de montrer comment on peut permuter des valeurs
enregistrées dans deux registres, en utilisant la pile.