Cours Complet
Cours Complet
PLAN
I. Introduction
Microprocesseur
8086
Deuxième partie
Dr. Y. AKARNE
Contact: [email protected]
1
02/01/2025
PLAN
I. Introduction
INTRODUCTION
? Programme en
Pascal, C, C++
JAVA !!!!... Compilateur
Programme en
Langage assembleur
Hiérarchie
de traduction
Assembleur
Programme en
Langage machine
Chargeur
en Mémoire
2
02/01/2025
INTRODUCTION
Langage machine
Langage binaire: l’information est exprimée et manipulée sous
forme d’une suite de bits
Une combinaison de 16 bits= Hexadécimal → possibilités qui
permettent de coder tous les caractères alphabétiques,
numériques, et symboles tels que ?,*,&, …
Rappel
Un bit (binary digit) = 0 ou 1 (2 états électriques)
Une combinaison de 8 bits= 1 Octet
Les opérations logiques et arithmétiques de base (addition,
multiplication, … ) sont effectuées en binaire
INTRODUCTION
Pourquoi l'assembleur?
Problème: le langage machine est difficile à comprendre par l’être humain
Idée: trouver un langage compréhensible par l'homme qui sera ensuite
converti en langage machine
Assembleur (1er langage): exprimer les instructions élémentaires de façon
symbolique
ADD A, 4
LOAD B traducteur langage machine
MOV A, OUT
3
02/01/2025
INTRODUCTION
Exemple
Voici une représentation hexadécimale d’un programme en
langage machine :
A1 01 10 03 06 01 12 A3 01 14
Il est évident que ce type d'écriture est difficilement lisible par
nous, humains.
INTRODUCTION
Un système microprogrammé est un circuit intégré qui peut être programmé pour
effectuer des tâches particulières. L'objectif est de pouvoir modifier les tâches sans
toucher à l'électronique. Sa structure est la suivante :
N Bus d’adresses
Périphériques
ROM RAM Ports
Processeur • d’entrée
Programme Données d’E/S
• de sortie
Bus de données
Lecture
écrite
Bus de contrôle
4
02/01/2025
INTRODUCTION
1972 – 1992 Intel 8008, Intel 8080 (6.000 transistors), Intel 8086 (premier
INTRODUCTION
▪ Le 8086 est constitué de 29.000 transistors sur une puce de 32,7 mm²
▪ Il existe en trois versions : 8086 (5 MHz), 8086-2 (8 MHz), 8086-4 (10 MHz)
(1Mo)
▪ 14 registres de 16 bits
5
02/01/2025
INTRODUCTION
Bus d’adresse :
20 bits ==> le nombre de case de la mémoire 220 cases
PLAN
I. Introduction
6
02/01/2025
I- Brochage du 8086:
I- Brochage du 8086:
7
02/01/2025
8
02/01/2025
Fonction : La broche READY est utilisée pour synchroniser le processeur avec des périphériques lents comme la
mémoire. Elle indique au processeur s'il peut continuer ou s'il doit attendre.
Quand elle est Utilisée : READY est activée quand le processeur doit accéder à des données de la mémoire ou de
périphériques externes, mais ceux-ci peuvent être plus lents.
Comment elle Fonctionne :
Si READY est haut (1), le processeur continue ses opérations normalement.
Si READY est bas (0), le processeur attend que READY revienne à l'état haut pour s'assurer que les données
sont prêtes à être utilisées.
Exemple : Le 8086 lit une donnée depuis une mémoire lente. Si cette mémoire n’est pas prête, READY sera bas pour
dire au processeur d’attendre.
9
02/01/2025
10
02/01/2025
11
02/01/2025
•ALE aide à séparer les deux types d'informations pour que le système puisse d'abord recevoir l'adresse,
puis les données.
Fonctionnement de ALE:
1.Activation de ALE (Quand ALE = Haut) :
1. Lorsque la broche ALE est "haute" (active), cela signifie que les informations présentes sur le
bus sont l’adresse où le 8086 doit lire ou écrire des données.
2. ALE informe ainsi le système que ce qui arrive en premier sur le bus est une adresse.
2.Désactivation de ALE (Quand ALE = Bas) :
1. Une fois l’adresse envoyée, ALE passe à "bas".
2. Maintenant, le bus peut transporter les données sans confusion avec l’adresse.
Exemple Pratique
•Imaginons une livraison de colis :
• Le livreur (microprocesseur 8086) doit d'abord donner l’adresse avant de laisser le colis
(données).
• ALE est comme un signal qui dit : "Je donne l’adresse maintenant, préparez-vous pour la
livraison."
• Une fois l’adresse reçue par le destinataire, ALE passe à bas, et le livreur peut maintenant livrer
le colis.
12
02/01/2025
13
02/01/2025
La broche DEN̅ (Data Enable) fonctionne un peu comme ALE, mais au lieu de gérer les adresses,
elle est utilisée pour activer les données sur le bus A/D (adresse/données) du 8086.
Fonctionnement de DEN̅
•Rôle : La broche DEN̅ indique au système externe que le processeur 8086 est en train d'envoyer
ou de recevoir des données.
•Signal Actif (DEN̅ = Bas) :
• Lorsque DEN̅ est à l'état bas (actif), cela signifie que des données circulent sur le bus.
• Les périphériques savent alors qu'ils peuvent lire les données envoyées par le processeur
ou préparer à recevoir les données du processeur.
Exemple Pratique :
•Imaginons un supermarché avec une caisse automatique :
• ALE serait comme le moment où le client entre son numéro de carte de fidélité (adresse).
• DEN̅ serait le moment où la caisse commence à afficher et à traiter les articles achetés
(données).
• Quand DEN̅ est actif (bas), cela signifie que les informations sur le bus sont des données
(comme les prix des articles). Le système sait qu'il peut traiter ces informations.
14
02/01/2025
15
02/01/2025
Le signal ALE est généré directement par le 8086 en mode minimum, et par son
contrôleur de bus 8288 en mode maximum.
Résumé:
16
02/01/2025
34
17
02/01/2025
18
02/01/2025
QUIZ
19
02/01/2025
QUIZ
QUIZ
• Quel mode du 8086 permet de fonctionner de manière autonome sans contrôleur de bus externe ?
A) Mode maximum
B) Mode minimum
C) Mode mixte
D) Aucun
• Que se passe-t-il lorsque le signal HOLD est activé sur le 8086 ?
A) Le processeur cesse de fonctionner
B) Le processeur libère le bus pour un accès direct par un périphérique
C) Le processeur active une interruption prioritaire
D) Le processeur entre en mode basse consommation
• Le signal BHE (Bus High Enable) est utilisé pour :
A) Activer le bus de données complet
B) Indiquer une écriture en mémoire
C) Sélectionner la banque de mémoire haute (D8-D15)
D) Sélectionner la banque de mémoire basse (D0-D7)
• Quel signal permet au 8086 de différencier entre la mémoire et les périphériques d’entrée/sortie ?
A) ALE
B) DEN
C) M/IO
D) READY
• Lors d’un transfert de données, quel est le rôle du signal DT/R ?
A) Indiquer si le bus transporte des adresses ou des données
B) Indiquer le sens de transfert des données (émission ou réception)
C) Indiquer une demande d’interruption
D) Indiquer si le processeur est prêt à recevoir des données
20
02/01/2025
Registres:
21
02/01/2025
➢ UIB comporte:
▪ 4 registres de segments (DS, CS, SS et ES),
▪ Un pointeur d’instruction (IP),
▪ Une pile pour stocker les instruction et
données en attente.
➢ UE comporte:
▪ UAL : peut être charger par 2 Registres
Temporaires (TR) et effectuer des opérations
sur un ou deux octets.
▪ 4 registres généraux (AX, BX, CX et DX),
▪ 2 pointeurs de pile (SP et BP),
▪ 2 registres d'index (SI et DI).
Unité d’Exécution (EU) Unité d’Interface de Bus (BIU)
➢ UIB comporte:
▪ 4 registres de segments (DS, CS, SS et ES),
▪ Un pointeur d’instruction (IP),
▪ Une pile pour stocker les instruction et
données en attente.
➢ UE comporte:
▪ UAL : peut être charger par 2 Registres
Temporaires (TR) et effectuer des opérations
sur un ou deux octets.
▪ 4 registres généraux (AX, BX, CX et DX),
▪ 2 pointeurs de pile (SP et BP),
▪ 2 registres d'index (SI et DI).
Unité d’Exécution (EU) Unité d’Interface de Bus (BIU)
22
02/01/2025
RT RT
Codage
Contrôle
Séquencement
UAL File d’attente 6
octets de codes
instructions 7
23
02/01/2025
Index :
• SI : Source Index Ils sont utilisés pour les
transferts de chaînes d’octets
• DI : Destination Index entre deux zones mémoire.
5. SI (Source Index)
•Description : SI est principalement utilisé pour accéder aux données dans la mémoire, surtout pour les opérations de traitement de
chaîne.
•Fonctions principales : Il aide à lire des données d'une chaîne de caractères ou d'un tableau. Souvent utilisé avec le registre DS (Data
Segment) pour pointer vers des données en mémoire.
6. DI (Destination Index)
•Description : DI est utilisé pour écrire des données en mémoire, en particulier dans les opérations de chaîne.
•Fonctions principales : Souvent couplé avec le segment ES (Extra Segment), DI pointe vers l’endroit où les données doivent être stockées.
Utilisé aussi pour copier des chaînes de données.
24
02/01/2025
Index :
• SI : Source Index Ils sont utilisés pour les
transferts de chaînes d’octets
• DI : Destination Index entre deux zones mémoire.
5. SI (Source Index)
•Description : SI est principalement utilisé pour accéder aux données dans la mémoire, surtout pour les opérations de traitement de
chaîne.
•Fonctions principales : Il aide à lire des données d'une chaîne de caractères ou d'un tableau. Souvent utilisé avec le registre DS (Data
Segment) pour pointer vers des données en mémoire.
Exemple concret :
Imaginez que vous avez une liste de noms, et que vous voulez lire chaque nom dans l'ordre. SI va pointer sur le début de chaque nom, et
vous pouvez avancer SI pour lire le nom suivant dans la liste.
Index :
• SI : Source Index Ils sont utilisés pour les
transferts de chaînes d’octets
• DI : Destination Index entre deux zones mémoire.
6. DI (Destination Index)
•Description : DI est utilisé pour écrire des données en mémoire, en particulier dans les opérations de chaîne.
•Fonctions principales : Souvent couplé avec le segment ES (Extra Segment), DI pointe vers l’endroit où les données doivent être stockées.
Utilisé aussi pour copier des chaînes de données.
•Exemple concret :
Imaginez que vous copiez une chaîne de caractères (par exemple, un mot ou une phrase) d'un endroit de la mémoire à un autre. DI va
pointer vers l'endroit où chaque caractère doit être copié. Vous pouvez avancer DI pour copier chaque caractère, un par un, vers le nouvel
emplacement.
25
02/01/2025
9. IP (Instruction Pointer)
•Description : IP garde la trace de l'adresse de
la prochaine instruction à exécuter.
•Fonctions principales : Avec le segment CS
(Code Segment), IP forme l’adresse complète
de la prochaine instruction. C’est crucial pour
le déroulement du programme.
26
02/01/2025
27
02/01/2025
N
Largeur du bus
Unidirectionnel
Bidirectionnel
28
02/01/2025
❑ Bus d’adresse est de 20 bits ---> Mémoire totale adressable égale 220 octets = 1 Mo
❑ Taille des registres est de 16 bits ---> seuls 216 octets = 64 Ko peuvent être adressés
• Registre pour adresser l'intérieur du segment (registre offset) : IP, SP, BP, SI, DI et BX
Pensez à la mémoire comme à une grande bibliothèque remplie de livres. Chaque étagère de cette
bibliothèque contient un certain nombre de livres, et chaque livre a sa propre position sur l'étagère.
1.Segment : C’est comme l’adresse d’une étagère dans la bibliothèque. Dans notre cas, chaque segment
représente une étagère où l'on peut ranger des livres.
2.Offset : C’est le numéro du livre sur cette étagère. L’offset nous indique la position précise d'un livre sur
une étagère.
Pour trouver un livre précis dans cette grande bibliothèque, vous devez :
1.Aller à la bonne étagère (le segment).
2.Trouver le livre exact sur cette étagère en comptant un certain nombre de positions (l’offset).
Exemple dans la bibliothèque
Imaginons que :
•Étagère = Segment = 100
•Position du livre sur l’étagère = Offset = 20
Pour trouver l’emplacement précis de ce livre dans la bibliothèque, on utilise l’adresse segment : offset, ici
100 : 20.
29
02/01/2025
30
02/01/2025
Segment : Offset
➢ Adresse physique :
Segment x 16 + Offset
2 6 B 4 E H – 9 D 5 E H= 1 C D F 0 H
31
02/01/2025
2 6 B 4 E H – 9 D 5 E H= 1 C D F 0 H
_ 2 6 B 4 E
+1 +1 +1
9 D 5 E
1 C D F 0
On emprunte 16, car on travaille en base de 16
Segment : Offset
----------->
----------->
1005H : 5555H
32
02/01/2025
Exercice 3: Trouver l’adresse logique. Puis, calculer l’adresse physique, pour le cas:
• Adresse segment: CS=A000H
• Adresse offset : IP=5F00H
Adresse logique:
A000H : 5F00H
Adresse physique:
Adresse segment: (A000)H -----------> 1010 0000 0000 0000
33
02/01/2025
Exercice 4:
Exercices:
34
02/01/2025
Exercices:
Exercice 1 :
Si CS = 4500H et IP = 1A2BH, trouver :
L’adresse logique.
L’adresse physique.
Les limites du segment de code.
Exercice 2 :
Si DS = 3200H et Offset = 4C39H, trouver :
L’adresse physique.
L’adresse logique.
Les limites du segment de données.
Exercice 3 :
Si CS = 29FFH et IP = 0FFFH, trouver :
L’adresse logique.
L’adresse physique.
Les limites du segment de code.
Exercices:
Exercice 4 :
Si DS = 3B20H et Offset = 7F99H, trouver :
1.L’adresse logique.
2.L’adresse physique.
3.Les limites du segment de données.
Exercice 5 :
Si SS = 5500H et SP = 00F8H, trouver :
1.L’adresse logique.
2.L’adresse physique.
3.Les limites du segment de pile.
Exercice 6 :
Si ES = 4A80H et Offset = 0156H, trouver :
1.L’adresse logique.
2.L’adresse physique.
3.Les limites du segment supplémentaire.
35
02/01/2025
Exercices:
Exercice 7 :
Si CS = 2AB4H et IP = 1234H, trouver :
1.L’adresse logique.
2.L’adresse physique.
3.Les limites du segment de code.
Exercice 8 :
Si DS = 1C00H et Offset = FFFFH, trouver :
1.L’adresse logique.
2.L’adresse physique.
3.Les limites du segment de données.
Exercices:
Un programme est exécuté sur un système 8086. Les informations suivantes sont données :
Le registre CS contient la valeur 2A3FH et IP = 1F90H.
Le registre DS contient la valeur 3B50H et l'offset d'une variable dans le segment est 2F9CH.
Le registre SS contient 2E00H, et SP = FF80H.
Questions :
Code Segment :
Trouver l’adresse logique et l’adresse physique du programme.
Calculer les limites du segment de code.
Si on ajoute une instruction qui dépasse l’offset maximal, quelle adresse physique sera générée ?
L'exécution est-elle valide ?
Data Segment :
Trouver l’adresse logique et l’adresse physique de la variable dans le segment de données.
Calculer les limites du segment de données.
Si on essaie d’accéder à une donnée avec un offset 5FFFH, l’accès est-il valide ? Pourquoi ?
Stack Segment :
Trouver l’adresse logique et l’adresse physique du sommet de la pile (stack pointer).Calculer les limites
du segment de pile.
Si une instruction PUSH est exécutée alors que le SP = 0000H, qu'arrive-t-il ?
36
02/01/2025
Exercices:
L’opération est réalisée entre les 2 opérandes et le résultat est toujours récupéré dans l’opérande de gauche.
Exemples : CMP, ADD, MOV, XCHG, AND …
Les opérandes peuvent être des registres, des constantes ou le contenu de cases mémoire.
37
02/01/2025
1. Adressage registre
2. Adressage immédiat
3. Adressage direct
4. Adressage indirect
a. Adressage basé
b. Adressage indexé
c. Adressage basé-indexé
1- Adressage registre
Exemples :
INC AX : incrémenter le registre AX
MOV AX, BX : Copier le contenu de BX dans AX (AXBX); opérandes 16 bit
ADD CH, DL : Ajouter le contenu de DL au CH (CHDL+CH) ; opérandes 8 bits
ADD BX, AL : Déclaration d’erreur car BX est de 16 bits et AL est de 8 bits.
38
02/01/2025
2- Adressage immédiat
3- Adressage direct
Un des deux opérandes se trouve en mémoire. L’adresse de la case mémoire est
précisé directement dans l’instruction.
INST R , [@]
INST [@] , R
INST taille [@] , VN
• L’adresse doit être placée dans [Rseg : Roffset].
• Si le segment (Rseg) n’est pas précisé, le registre DS est pris par défaut comme Rseg.
Exemples : :
Exemples
MOV AX,AX,
MOV [1234] ; : Copier le contenu de la mémoire d'adresse DS:1234 dans AX
[1234]
MOV [0200h]
MOV , AX, ;AX : Copier le contenu de AX dans la mémoire d'adresse DS:0200
[0200h]
MOV AX ,AX
MOV SS:243 ; : Copier le contenu de la mémoire SS:243 dans AX
, SS:243
MOV BYTE
MOV ptr [1213]
BYTE 4Ah,; Copier la valeur 4A dans la case mémoire DS:1213
[1213] ,, 4Ah
MOV WORD
MOV WORD ptr [1213] 4Ah ;; 4A → adresse DS:1213, et 00 → adresse+1 (c-à-d
[1213] ,, 4Ah
DS:1214)
39
02/01/2025
4- Adressage indirect
Un des deux opérandes se trouve en mémoire. L’adresse se trouve dans l’un de
ces 4 registres BX, BP, SI ou DI.
INST R , [Rseg : Roffset]
INST [Rseg : Roffset] , R
INST taille [Rseg : Roffset] , VN
Exemples :
MOV AX, [BX] :; Transfert de contenu de la case mémoire 16 bits pointer par BX,
par rapport au DATA segment vers AX.
ADD [SI], DL :; Ajouter le contenu de DL au contenu de la case mémoire 8 bits
pointer par DS:SI et stocker le résultats dans Op Déstination.
4- Adressage indirect
40
02/01/2025
4- Adressage indirect
a. Adressage Basé
L’offset se trouve dans l’un des deux registres de base BX ou BP. On peut préciser
un déplacement (Dep) optionnel qui sera ajouté au contenu de Rbase pour déterminer
l’offset:
INST R , [Rbase+Dep]
INST [Rbase+Dep] , R
INST taille [Rbase+Dep] , VN
Exemples :
MOV [BX+12], AL ; Transfert de contenu de AL vers la case mémoire pointer par
(BX+12) par rapport au DATA segment (DS:BX+12).
MOV SI, [BP+400] ; Charger SI par le contenu de la mémoire d'adresse SS:BP+400
MOV AX, [ES:BP] ; Charger AX par le contenu de la mémoire d'adresse ES:BP
4- Adressage indirect
b. Adressage Indexé
L’offset se trouve dans l’un des deux registres d’index SI ou DI. On peut préciser
un déplacement (Dep) optionnel qui sera ajouté au contenu de Rindex pour déterminer
l’offset:
INST R , [Rindex+Dep]
INST [Rindex+Dep] , R
INST taille [Rindex+Dep] , VN
Exemples :
MOV AX, [SI] ;: Charger AX par le contenu de la mémoire d'adresse DS:SI
MOV AX, [SI+200] ;: Charger AX par le contenu de la mémoire d'adresse DS:SI+200
MOV AX, [DI-10] ;: Charger AX par le contenu de la mémoire d'adresse DS:DI-10
MOV AX, [ES:SI+4] ;: Charger AX par le contenu de la mémoire d'adresse ES:SI+4
41
02/01/2025
4- Adressage indirect
c. Adressage Basé-Indexé
Exemples :
MOV AX, [BX+DI+5] ;: AX est chargé par la mémoire d'adresse DS:BX+DI+5
MOV AX, [BX+SI] ;: AX est chargé par la mémoire d'adresse DS:BX+SI
MOV AX, [SS:BP+SI+2] ;: AX est chargé par la mémoire d'adresse SS:BP+SI+2
MOV AX, [SS:BP+DI] ;: AX est chargé par la mémoire d'adresse SS:BP+DI
Exercice II: Identifier le mode d’adressage pour chacune des lignes suivantes:
N° de ligne
42
02/01/2025
▪ Si le registre est sur un octet, l'opération sera effectuée avec MOV [@], AL @ AL
➢ Lorsqu'on effectue une opération entre une constante et une cellule de mémoire, il faut
utiliser les préfixes BYTE (octet) et WORD (mot) pour spécifier le nombre d'octets à écrire :
MOV BYTE ptr [@], 4Ah @ 4A MOV WORD ptr [@], 4Ah @ 4A
00
Exemple 1:
43
02/01/2025
Exemples:
• MOV AX, BX
• MOV CX, 1234H
• MOV [1000H], CX
• MOV AL, [BX]
• MOV AH, [BX+SI]
PLAN
I. Introduction
44
02/01/2025
JEU D’INSTRUCTIONS
I- Introduction
Chaque microprocesseur reconnait un ensemble d’instructions appelé jeu
d’instructions fixé par le constructeur.
Une instruction est définie par son code opératoire (opcode). On utilise donc une
notation symbolique pour représenter les instructions (mnémoniques). Un programme
constitué de mnémoniques est appelé programme en assembleur.
JEU D’INSTRUCTIONS
Elles permettent de déplacer des données d’une source vers une destination.
MOV
MOV Od, Os : Copie l'opérande Source (Os) dans l'opérande Destination (Od)
[Od Os]
MOV R1 , R2 R1R2
MOV R , [adr] R [adr]
MOV [adr] , R [adr] R
MOV R , im Rim
MOV taille [adr] , im copier une constante dans une case mémoire
taille = BYTE ou WORD
45
02/01/2025
JEU D’INSTRUCTIONS
Elles permettent de déplacer des données d’une source vers une destination.
XCHG
XCHG Od, Os : Échange de l'opérande Source (Os) avec l'opérande Destination (Od)
[Od ⟷ Os]
XCHG R1 , R2 R1⟷R2
XCHG R , [adr]
R⟷ [adr]
XCHG [adr] , R
JEU D’INSTRUCTIONS
Exercices:
46
02/01/2025
JEU D’INSTRUCTIONS
Exercices:
JEU D’INSTRUCTIONS
Les opérations peuvent s'effectuer sur des nombres de 8 bits ou de 16 bits signés
ou non signés. Les nombres signés sont représentés en complément à 2.
ADD
ADD Od, Os : Additionne l'opérande source (Os) et l'opérande destination (Od) et
met le résultat dans l'opérande destination (Od).
[Od Od + Os]
ADD R1 , R2 R1R1+R2
ADD R , [adr] R R+[adr]
ADD [adr] , R [adr] R+[adr]
ADD R , im RR+im
ADD taille [adr] , im [adr] [adr]+im
47
02/01/2025
JEU D’INSTRUCTIONS
Exemples :
JEU D’INSTRUCTIONS
Exercice:
L’instruction ADD permet de positionner les flags à « 1 » ou à « 0 » selon le résultat
de l’opération:
1. Après avoir exécuté les programmes suivants, quelles sont les valeurs que
prennent les flags? Faire un calcul manuel pour justifier la réponse.
48
02/01/2025
JEU D’INSTRUCTIONS
Exercices:
1.
JEU D’INSTRUCTIONS
Exercices:
2.
C 1
Z 1
S 0
O 0
P 1
A 1
49
02/01/2025
JEU D’INSTRUCTIONS
Les opérations peuvent s'effectuer sur des nombres de 8 bits ou de 16 bits signés
ou non signés. Les nombres signés sont représentés en complément à 2.
SUB
SUB Od, Os : Soustrait l'opérande source (Os) et l'opérande destination (Od) et met
le résultat dans l'opérande destination (Od).
[Od Od - Os]
SUB R1 , R2 R1R1-R2
SUB R , [adr] R R-[adr]
SUB [adr] , R [adr] [adr] -R
SUB R , im RR-im SUB [adr], [adr]
SUB taille [adr] , im [adr] [adr]-im
Exemple :
mov ax, 39h
sub ax, 18h ; axax-18h
JEU D’INSTRUCTIONS
Exercice:
L’instruction SUB permet de positionner les flags CZSOPA à ‘1’ ou à ‘0’ selon le
résultat de l’opération:
1. Après avoir exécuté les programmes suivants, quelles sont les valeurs que
prennent les flags? Faire un calcul manuel pour justifier la réponse.
50
02/01/2025
EXERCICES
Exercice:
Il faut un CA2
JEU D’INSTRUCTIONS
Exemples :
51
02/01/2025
JEU D’INSTRUCTIONS
MOV AL, 4 ? ? 0 4
MOV AH, 25 1 9 0 4 AX
MUL AH 0 0 6 4
DX AX
MOV BX, -435 F E 4 D BX
DX AX
JEU D’INSTRUCTIONS
Exemples:
52
02/01/2025
JEU D’INSTRUCTIONS
JEU D’INSTRUCTIONS
DX (reste) AX (quotient)
DX (reste) AX (quotient)
53
02/01/2025
JEU D’INSTRUCTIONS
Exemples:
JEU D’INSTRUCTIONS
INC R R R+1
54
02/01/2025
JEU D’INSTRUCTIONS
DEC R R R-1
JEU D’INSTRUCTIONS
Exemple : FEh
DS: 400
33h
55
02/01/2025
JEU D’INSTRUCTIONS
NEG R R CA2(R)
JEU D’INSTRUCTIONS
O S Z C O S Z C
Od > Os - 0 0 0 0/1 0 0 -
Od = Os - 0 1 0 0 0 1 -
Od < Os - 1 0 1 0/1 1 0 -
56
02/01/2025
JEU D’INSTRUCTIONS
AH AL
MOV AL, 23 ? ? 1 7 AX
CMP AL, 34
C = 1 ; Z = 0; S = 1
JEU D’INSTRUCTIONS
MOV AX, 96 ? ? ? ? 0 0 6 0
CWD 0 0 0 0 0 0 6 0
DX AX
MOV AX, - 96 ? ? ? ? F F A 0
CWD F F F F F F A 0
DX AX
57
02/01/2025
JEU D’INSTRUCTIONS
MOV AX, 96 ? ? 6 0
AX
CBW 0 0 6 0
JEU D’INSTRUCTIONS
58
02/01/2025
JEU D’INSTRUCTIONS
Od ← Od ET Os
AND R1 , R2 R1R1 ET R2
AND R , [adr] R R et [adr]
AND [adr] , R [adr] [adr] et R
AND R , im RR et im
AND [adr], [adr]
AND taille [adr] , im [adr] [adr] et im
Exemple :
JEU D’INSTRUCTIONS
AX 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1
0201h 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
AX 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
59
02/01/2025
JEU D’INSTRUCTIONS
Od ← Od ET Os
OR R1 , R2 R1R1 ou R2
OR R , [adr] R R ou [adr]
OR [adr] , R [adr] [adr] ou R
OR R , im RR ou im
OU [adr], [adr]
OR taille [adr] , im [adr] [adr] ou im
Exemple :
MOV AX , 503h
AX 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1
OR AX , 0201h
0201h 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
AX 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1
JEU D’INSTRUCTIONS
Od ← Od XOR Os
MOV AX , 503h
AX 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1
XOR AX , 0201h
0201h 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
AX 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0
60
02/01/2025
JEU D’INSTRUCTIONS
org 100h
MOV AX,[301h]
MOV BX,[303h]
NOT AX
NOT BX
AND AX, [303h]
AND BX, [301h]
OR AX, BX
ret
JEU D’INSTRUCTIONS
org 100h
MOV AX,[301h]
MOV BX,[303h]
NOT AX
NOT BX
AND AX, [303h]
AND BX, [301h]
OR AX, BX
ret
61
02/01/2025
JEU D’INSTRUCTIONS
JEU D’INSTRUCTIONS
NOT R RCA1(R)
NOT [adr] [adr]CA1([adr])
Exemples :
MOV AX , 503h AX 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1
NOT AX AX 1 1 1 1 1 0 1 0 1 1 1 1 1 1 0 0
AX
MOV AX, 96 0 0 6 0
NOT AX F F 9 F
62
02/01/2025
JEU D’INSTRUCTIONS
Exemple :
MOV AX , 503h
AX 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1
0201h 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
RT 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
S = 0, Z = 0
JEU D’INSTRUCTIONS
63
02/01/2025
JEU D’INSTRUCTIONS
JEU D’INSTRUCTIONS
64
02/01/2025
JEU D’INSTRUCTIONS
JEU D’INSTRUCTIONS
65
02/01/2025
JEU D’INSTRUCTIONS
❑ Exemple:
MOV CX, 5 ;
MOV AX, 0 ;
MOV BX, 1 ;
DD_LOOP:
ADD AX, BX ;
INC BX ;
LOOP ADD_LOOP ;
JEU D’INSTRUCTIONS
MOV DX, 0
MOV CX, 5
LOOP ETIQ
66
02/01/2025
JEU D’INSTRUCTIONS
Instructions Actions
1. Mise à jours de CX 2. Branchement si:
LOOP CXCX-1 CX≠0
LOOPZ, LOOPE CXCX-1 (CX ≠ 0 ) et (Z = 1)
LOOPNZ, LOOPNE CXCX-1 (CX ≠ 0 ) et (Z = 0)
JCXZ Pas d’action CX = 0
JEU D’INSTRUCTIONS
. .
. .
. .
JMP suite Etiq: .
. .
. .
. .
Suite: ......... JMP Etiq
. .
. .
67
02/01/2025
JEU D’INSTRUCTIONS
JEU D’INSTRUCTIONS
l’instruction suivante.
68
02/01/2025
JEU D’INSTRUCTIONS
JEU D’INSTRUCTIONS
69
02/01/2025
JEU D’INSTRUCTIONS
JEU D’INSTRUCTIONS
Les boucles
Il n’existe pas de structure générale en assembleur pour coder une boucle tant-que ou
une boucle répéter.
▪ Cependant, à l’aide des instructions vues précédemment pour réaliser des tests, on
peut coder n’importe quel type de boucle.
70
02/01/2025
JEU D’INSTRUCTIONS
Principe général
Une boucle est essentiellement composée de deux éléments :
▪ Une condition de sortie qui indique quand la boucle doit être interrompue,
qu’il faut sortir de la boucle et continuer l’exécution des instructions
en séquence.
▪ Un corps de boucle qui spécifie l’action à réaliser pendant que la condition de
sortie n’est pas vérifiée, à chaque itération de la boucle.
La condition de sortie va donc être codée d’une manière ressemblant aux tests.
Un saut conditionnel testera cette condition et entraînera, quand la condition est
vérifiée, la sortie de la boucle.
Le corps de la boucle devra pour sa part (boucler), c’est-à-dire, une fois exécuté,
entraîner le réévaluation de la condition de sortie et la prise de décision quant à la
poursuite ou non des itérations
JEU D’INSTRUCTIONS
71
02/01/2025
JEU D’INSTRUCTIONS
Boucle Répéter
Le squelette d’une boucle répéter, dans un langage de haut niveau, est le suivant :
Répéter
action
Jusqu’à (condition vraie)
REPETERn: action
...
Calcul de la condition
Jcc REPETERn
...
JEU D’INSTRUCTIONS
Boucles pour
Une boucle pour est généralement codée à l’aide d’une instruction de la famille LOOP.
Syntaxe : LOOP label
LOOP fonctionne avec le registre CX qui joue le rôle de compteur de boucles. Elle
décrémente le compteur Sans Modifier Aucun Des Indicateurs.
Si le compteur est différent de 0, un saut à l’étiquette opérande de l’instruction
LOOP est réalisé.
Le squelette d’une boucle pour s’écrit de la manière suivante :
POUR indice = 0 à n FAIRE
Action
Fin pour
Cette boucle se traduit en assembleur de la manière suivante :
mov cx, n ; n est le nombre d’itérations
POURn: ...
action
loop POURn
…
72