Vous êtes sur la page 1sur 11

Les Manipulations :

Partie A :
Le programme :

Code machine
Segment IP Binaire Hexadécimale Programme Description
0050 : 0100 0000000011111111 B800FF MOV AX,FF Transfer FF vers AX

0050 : 0103 1000000 40 INC AX Incrément AX par 1


0050 : 0106 1110101111111101 EBFD JMP FD Saut inconditionnel
(adr.relatif).
Exécution pas à pas :
• Après l’ouverture du logiciel DATS

1 - On clique sur « Debug » / 2 - puis on clique sur l’instruction « Line Assemble »

• Après l’ouverture de « Ligne assemble » on écrive notre programme dans la fenêtre


suivante.
• Lorsqu’on arrive à l’instruction « JMP » on doit suivi les étapes suivantes :

1 - « Debug » / 2 - « Jump calculator »

• On va voir cette fenêtre (On remarque que toutes les trois adresses sont nulles)

On écrive les informations suivantes :


1 - L’adresse dans laquelle nous sommes
2 - L’adresse à laquelle nous voulons aller
3 - Nous obtenons l’adresse relative
• Lorsqu’on met le curseur sur « Relative Value » DATS vas produire une adresse (FD),

Maintenant on presse sur « Send to Line Assembler ».

La nouvelle adresse relative se déplace vers l’instruction « JMP » comme la photo montre.

• Puis on presse sur « Entrée ».


• Après l’écriture de programme on clique sur « Program » pour envoyer le programme dans
le kit.

• Après l’envoyer du programme dans le kit, on trouve la fenêtre de registres comme ça.

On remarque que tous les registres sont nuls, les flags aussi.

• Après on clique sur « OK » :

On remarque que les flags changent et les registres restent nuls.

• On va maintenant exécute le programme pas à pas (on clique sur « Single Step »).
1 - On remarque que dans la fenêtre de registre que le registre AX sera remplié par la valeur ‘FF’
comme on a programmé.

2 - On remarque que DATS indiquer directement sur l’IP de l’instruction suivant « 0103 ».

3 - DATS sélectionne automatiquement sur l’étape suivant comme la figue montre.

• On continue le travail par exécute l’instruction suivant par cliquer sur « single step ».

• On remarque que DATS indiquer directement sur l’IP de l’instruction suivant « 0104 » comme
d’habitude.
• On remarque dans la fenêtre de registre que le registre AX sera remplié par la valeur
« 0100 » comme on a programmé.
• Les flags ‘A’ et ‘P’ changent leurs valeurs.
• On continue le travail par exécute l’instruction suivant par cliquer sur « single step ».

• On remarque que l’IP devenu le même IP de la deuxième instruction « 0103 ».


• Les flags ne changent pas.

On continue le travail par exécute l’instruction suivant par cliquer sur « single step ».

• On remarque que dans la fenêtre de registre que le registre AX sera remplié par la valeur
« 0101 ».
• Les flags changent leurs valeurs.
• On continue le travail par exécute l’instruction suivant par cliquer sur « Single Step »

• On remarque comme toujours que dans la fenêtre de registre que le registre AX sera remplié
par la valeur suivant « 0102 ».
• Les flags changent leurs valeurs.

Etat Segments registres Générales registres Pointers registres

CD CS SS ES AX BX CX DX BP DI SI SP IP

Etat 0050 0050 0000 0050 0000 0000 0000 0000 0000 0000 0000 0500 0100
initial

1 0050 0050 0000 0050 00FF 0000 0000 0000 0000 0000 0000 0500 0103

2 0050 0050 0000 0050 0100 0000 0000 0000 0000 0000 0000 0500 0104

3 0050 0050 0000 0050 0100 0000 0000 0000 0000 0000 0000 0500 0103

4 0050 0050 0000 0050 0101 0000 0000 0000 0000 0000 0000 0500 0104

Remarque :

• L’instruction « JMP » (Saut) : permet de sauter d’une adresse à une autre


• L’instruction « INC » (Incrémentation) : elle permet d’incrémenter le contenu de la
destination
Partie B :
1. Avant passe à l’étape suivant on doit cliquer sur « RESET » pour faire la remise à zéro.
2. Puit on clique sur « OK ».

Le programme :
Code machine
Segment IP Binaire Hexa Programme Description
0050 : 0100 101110000000000100000000 B80100 MOV AX,1 Transfer 1 vers AX
0050 : 0103 101000010010000000000010 A1 20 02 MOV AX,[0220] Charger AX par la
valeur stocké dans
l’adresse (0220)
0050 : 0106 1101010000111100000000 35 0F 00 XOR AX,F Ou exclusif entre AX et
F et le résultat dans AX
0050 : 0109 1001101 4D INC AX AX+1

Etat Segments registres Générales registres Pointers registres

CD CS SS ES AX BX CX DX BP DI SI SP IP

Etat 0050 0050 0000 0050 0000 0000 0000 0000 0000 0000 0000 0500 0100
initial

1 0050 0050 0000 0050 0001 0000 0000 0000 0000 0000 0000 0500 0103

2 0050 0050 0000 0050 4200 0000 0000 0000 0000 0000 0000 0500 0106

3 0050 0050 0000 0050 420F 0000 0000 0000 0000 0000 0000 0500 0109

Les Remarques :
• L’instruction MOV AX, [0220] : prendre la valeur stockée dans l’adresse 0220 (Copier
le contenu de la mémoire d’adresse (0220) dans AX).

Partie C -1 :
1. Avant passe à l’étape suivant on doit cliquer sur « RESET » pour faire la remise à zéro.
2. Puit on clique sur « OK ».
Le programme :
Code machine
Segment IP Binaire Hexa Programme Description
0050 : 0200 1011000100001010 B1 0A MOV CL,0A Transfer 0A vers CL
0050 : 0202 101111100000000000000001 BE 00 01 MOV SI,0100 Transfer 0100 vers SI
0050 : 0205 101111110000000000000011 BF 00 03 MOV Transfer 0300 vers DI
DI,0300
0050 : 0208 1111001110100100 F3 A4 REPZ MOVSB Le register CX decrement
automatiquement
Les Remarques :
L’instruction « REP » :
Ces instructions sont utilisées avec les instructions de chaînes de caractères pour assurer la
répétition de l'instruction si on veut appliquer l'instruction sur un ensemble d'informations.
REP décrément automatiquement CX est test est ce qu'il est égal à zéro ou non. Si CX = 0 REP
s'arrêt
L’instruction « REPZ » : (répétition tant qu’égal à zéro)
Pour REPE/REPZ : c'est la même chose que REP c'est-à-dire elle décrément automatiquement
le registre CX mais elle peut sortir de la boucle si ZF<>0
Etat Segments registres Générales registres Pointers registres

CD CS SS ES AX BX CX DX BP DI SI SP IP

1 0050 0050 0000 0050 0000 0000 0000 0000 0000 0000 0000 0500 0200

2 0050 0050 0000 0050 0000 0000 000A 0000 0000 0000 0000 0500 0202

3 0050 0050 0000 0050 0000 0000 000A 0000 0000 0000 0100 0500 0205

4 0050 0050 0000 0050 0000 0000 000A 0000 0000 0300 0100 0500 0208

5 0050 0050 0000 0050 0000 0000 0009 0000 0000 0301 0101 0500 0208

• On remarque que le registre « CX » décrément (CX-1) et les pointers registres « DI »


et « SI » incrément {(DI+1), (SI+1)}.

Partie C -2 :
1. Avant passe à l’étape suivant on doit cliquer sur « RESET » pour faire la remise à zéro.
2. Puit on clique sur « OK ».
Le programme :
Code machine
Segment IP Binaire Hexa Programme Description
0050 : 010C 11111100 FC CLD Met à zéro la direction
DF
0050 : 010D 101110000000000000000000 B8 00 00 MOV AX,0000 Transfer 0000 vers AX
0050 : 0110 101111110000000000000001 BF 00 01 MOV DI,0100 Transfer 0100 vers DI
0050:0113 101110010000101000000000 B9 0A 00 MOV CX,000A Transfer 000A vers CX
0050 : 0116 1111001010101110 F2 AE REPNE SCASB Decrement
automatiquement le
registre CX et
incrémente le pointer
DI
• L’instruction « CLD » : Met à zéro la direction DF
Autre instruction on a utilisée :
« REPNE » : (répétition tant que différent de zéro)
Pour « REPNE/REPNZ » : c'est la même chose que REP c'est-à-dire elle décrément
automatiquement le registre CX mais elle peut sortir de la boucle si ZF=0
« SCASB » :
Permet de Comparer le contenu d'un registre AL avec l'octet ES:(R) DI et incrémente ou
décrémente R(DI).
Etat Segments registres Générales registres Pointers registres

CD CS SS ES AX BX CX DX BP DI SI SP IP

1 0050 0050 0000 0050 0000 0000 0000 0000 0000 0000 0000 0500 010C

2 0050 0050 0000 0050 0000 0000 0000 0000 0000 0000 0000 0500 010D

3 0050 0050 0000 0050 0000 0000 0000 0000 0000 0000 0000 0500 0110

4 0050 0050 0000 0050 0000 0000 0000 0000 0000 0100 0000 0500 0113

5 0050 0050 0000 0050 0000 0000 000A 0000 0000 0100 0000 0500 0116

6 0050 0050 0000 0050 0000 0000 0009 0000 0000 0101 0000 0500 0116

• On remarque que le registre « CX » décrément automatiquement (CX-1) et le pointer


« D I » incrément (DI+1).

Remarque :
Les Registres de données : formé par 4 registres de 16 bits (AX, BX, CX, et DX) chaque
registre peut être divisé en deux registres de 8 bits :(AH, AL, BH, BL, CH, CL, DH et DL)

15 8 7 0

AX AH AL

BX BH BL

CX CH CL

DX DH DL

Registre AX : (Accumulateur) Toutes les opérations de transferts de données avec les


entrées-sorties ainsi que le traitement des chaînes de caractères se font dans ce registre, de
même les opérations arithmétiques et logiques.
Registre BX : (registre de base) Il est utilisé pour l'adressage de données : en général il
contient une adresse de base. (Par exemple, l'adresse de début d'un tableau). De plus il peut
être utilisé dans toutes les opérations arithmétiques et logiques.
Registre CX : (Le compteur) Lors de l'exécution d'une boucle on a souvent recours à un
compteur de boucles pour compter le nombre d'itérations, le registre CX a été fait pour
servir comme compteur lors des instructions de boucle.
Remarque :
Le registre CL sert en tant que compteur pour les opérations de décalage et de rotation, dans
ce cas il va compter le nombre de décalages (rotation) de bits à droite ou à gauche.

Registre DX : On utilise le registre DX pour les opérations de multiplication et de division


mais surtout pour contenir le numéro d'un port d'entrée/sortie pour adresser les interfaces
d'E/S.AL : octet de poids faible de AX

1. AH : octet de poids fort de AX


2. BL : octet de poids faible de BX
3. BH : octet de poids fort de BX
4. CL : octet de poids faible de CX
5. CH : octet de poids fort de CX
6. DL : octet de poids faible de DX
7. DH : octet de poids fort de DX
Conclusion :
On a appris dans ce TP que :

• L’instruction (JMP) fait la répétition d’un programme (saut vers un IP déterminé, et la


programme va continuer son travail).
• L’instruction (SCASB) Permet de Comparer le contenu d'un registre AL avec l'octet
ES:(R) DI et incrémente ou décrémente R(DI).
• Chaque registre de donnée peut être divisé en deux registres de 8 bits.
• On a appris aussi que Le registre d'état FLAG sert à contenir l'état de certaines
opérations effectuées par le processeur.