8086 Courspdf 2024
8086 Courspdf 2024
8086 Courspdf 2024
8086
Troisième partie
Dr. ZAHRAOUI
Contact: emsi.zahraoui@gmail.com
ÉVOLUTION DES PROCESSEURS INTEL
Processeurs multi-cœurs:
80486, ......
1972 – 1992
Premier processeur
1971
4004
La majorité des microprocesseurs
4
Intel sont compatibles avec le 8086
ARCHITECTURE GÉNÉRALE DU 8086
INTRODUCTION
Disponible depuis 1978, le processeur 8086 fut le premier
processeur 16 bits fabriqué par Intel.
RT RT
Codage
Contrôle
Séquencement
UAL File d’attente 6
octets de codes
instructions 7
4
Flags Architecture Générale du processeur 8086
ARCHITECTURE GÉNÉRALE DU 8086
N
Largeur du bus
Unidirectionnel
Bidirectionnel
ARCHITECTURE GÉNÉRALE DU 8086
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
Registres Usage
CS : Code Définit le début de la mémoire programme dans laquelle sont
Segment
stockées les instructions du programme.
Les adresses des différentes instructions du programme sont
relatives à CS
Ces registres sont combinés avec les registres offset (par exemple IP) pour
former les adresses. Une case mémoire est repérée par une adresse de la
forme [Rseg :Roff]
Ces registres sont combinés avec les registres offset (par exemple IP) pour
former les adresses. Une case mémoire est repérée par une adresse de la
forme [Rseg :Roff]
Exemple
• Adresse logique CS: IP A000:5F00
• Adresse physique:
ARCHITECTURE GÉNÉRALE DU 8086
Segment : Offset
----------->
----------->
1005H : 5555H
ARCHITECTURE GÉNÉRALE DU 8086
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
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
• Exercice 1:
• Si CS=3499h et IP=2FACh , trouver:
• a- les limites du code segment CS (@ physique)
• b- l’adresse logique du registre IP
• c- l’adresse physique du registre IP
• (ensuite DS= 1296h et BX= AB49h) refaire le même
exercice
• Exercice 2:
• A-Une instruction à rechercher est dans l’adresse physique 519B2h et
CS=D140h,
• Est-ce que la bande du code segment l’inclut ou pas?
• Si c’est non, quelle valeur à donner à CS si IP=AC82h?
• B-Une instruction à rechercher est dans l’adresse physique 389F2h et
CS=2700H,
• Est-ce que la bande du code segment l’inclut ou pas?
• Si c’est non, quelle valeur à donner à CS si IP=1282h?
Solution Exercice 1
• Exercice 1:
• Si CS=3499H et IP=2500H , trouver:
• a- les limites du code segment CS
• b- l’adresse logique du registre IP
• c- l’adresse physique du registre IP
• (ensuite CS= 1296H et IP= 100H) refaire le même
exercice
• a- les limites du code segment CS
• Limite inférieur CS* 10h= 34990H
• Limite supérieur CS* 10h+FFFFh= 34990H+FFFFh=4498Fh
• b- l’adresse logique du registre IP
• CS:IP = 3499h: 2500h
• c- l’adresse physique du registre IP
• CS* 10h+IP = 34990H+2500h=36E90h
Exercice 3:
Solution de l’ exercice 5:
Registres Usage
AX: Usage général,
Accumulateur Obligatoire pour la multiplication et la division,
Ne peut pas servir pour l'adressage
REGISTRES GÉNÉRAUX
Registres Usage
Ces registres sont combinés avec les registres offset (par exemple IP) pour
former les adresses. Une case mémoire est repérée par une adresse de la
forme [Rseg :Roff]
Registres Usage
CS : Code Définit le début de la mémoire programme dans laquelle sont
Segment
stockées les instructions du programme.
Les adresses des différentes instructions du programme sont
relatives à CS
• L’instruction ADD permet de positionner les flags CZSOPA à ‘1’ ou à ‘0’ selon le
résultat de l’opération:
a. Après avoir exécuté le programme suivant, quelles sont les valeurs que
prennent ces flags? Faire un calcul manuel pour justifier la réponse.
Exercices:
1.
org 100h org 100h
mov al, 0D8h mov bl, 75 ; décimal
mov ah, 0CAh mov bh, 67; décimal
add ah,al add bh, bl
ret ret
JEU D’INSTRUCTIONS
Exercices:
2.
C 1
Z 1
S 0
O 0
P 1
A 1
ARCHITECTURE GÉNÉRALE DU 8086
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.
ARCHITECTURE GÉNÉRALE DU 8086
1. Adressage registre
2. Adressage immédiat
3. Adressage direct
4. Adressage indirect
a. Adressage basé
b. Adressage indexé
c. Adressage basé-indexé
ARCHITECTURE GÉNÉRALE DU 8086
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.
ARCHITECTURE GÉNÉRALE DU 8086
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]
[1234]
; : Copier le contenu de la mémoire d'adresse DS:1234 dans AX
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
, SS:243
; : Copier le contenu de la mémoire SS:243 dans AX
MOV BYTE
MOV BYTEptr [1213]
[1213] ,, 4Ah,
4Ah ; Copier la valeur 4A dans la case mémoire DS:1213
MOV WORD
MOV WORD ptr [1213]
[1213] ,, 4Ah
4Ah ;; 4A → adresse DS:1213, et 00 → adresse+1 (c-à-d
DS:1214)
ARCHITECTURE GÉNÉRALE DU 8086
4- Adressage indirect
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.
ARCHITECTURE GÉNÉRALE DU 8086
4- Adressage indirect
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
ARCHITECTURE GÉNÉRALE DU 8086
4- Adressage indirect
a. Adressage Basé
Exemple d’application : Ecrire un programme assembleur du 8086 permettant d’ajouter la
même valeur 5h à 10 cases mémoires successives: DS:0100; DS:0101; DS:0102; DS:0103;
DS:0104; …. ; DS:0109
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
ARCHITECTURE GÉNÉRALE DU 8086
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
ARCHITECTURE GÉNÉRALE DU 8086
Exercice II: Identifier le mode d’adressage pour chacune des lignes suivantes:
N° de ligne
Pour chacune des lignes de la routine assembleur, identifiez les modes d’adressage
utilisés :
a. Adressage Immédiat
b. Adressage Registre N° de ligne
1 mov si, [SP+4]
c. Adressage direct 2 mov AX, 0
d. Adressage indirect 3 cmp [SI+BX], al
e. Adressage indirect basé 4 jmp etiq3
f. Adressage indirect indexé 5 inc AX
6 etiq3: ret
7 add DL,[FAh]
ARCHITECTURE GÉNÉRALE DU 8086
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
@+1 00
ARCHITECTURE GÉNÉRALE DU 8086
Donner l’état des cases mémoires d’adresse: 400h, 401h, 402h et 403h
avant et après l’éxecution des instructions INC.
Donner l’état du registre Flag après chacune des deux instructions INC
CZSOPA
org 100h
mov [400h],0xFFh ;Mov word ptr [400h], 33FFh
mov [401h],33h
mov [402h], 0xFFh
mov [403h], 33
INC BYTE ptr [400h]
INC WORD ptr [402h]
ret
ARCHITECTURE GÉNÉRALE DU 8086
Exemple 1:
Exemples:
• MOV AX, BX
• MOV CX, 1234H
• MOV [1000H], CX
• MOV AL, [BX]
• MOV AH, [BX+SI]
PLAN
I. Introduction
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.
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
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
Exercices:
Exercices:
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
Exemples :
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.
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.
Exercice:
Il faut un CA2
JEU D’INSTRUCTIONS
Exemples :
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
MOV AX, 2372 0 9 4 4 AX
IMUL BX F F F 0 4 1 7 4
DX AX
JEU D’INSTRUCTIONS
Exemples:
DX (reste) AX (quotient)
DX (reste) AX (quotient)
JEU D’INSTRUCTIONS
Exemples:
INC R R R+1
org 100h
mov al,-3
titi: inc al
JNZ titi
ret
JEU D’INSTRUCTIONS
Exemple : FEh
DS: 400
33h
DEC R R R-1
NEG R R CA2(R)
O S Z C O S Z C
Od > Os - - 0 0 0/1 0 0 -
Od = Os - - 1 0 0 0 1 -
Od < Os - - 0 1 0/1 1 0 -
JEU D’INSTRUCTIONS
AH AL
MOV AL, 23 ? ? 1 7 AX
CMP AL, 34
C=1;Z=0;S=1
ARCHITECTURE GÉNÉRALE DU 8086
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
JEU D’INSTRUCTIONS
MOV AX, 96 ? ? 6 0
AX
CBW 0 0 6 0
ARCHITECTURE GÉNÉRALE DU 8086
84
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 :
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
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
ARCHITECTURE GÉNÉRALE DU 8086
JEU D’INSTRUCTIONS
Od ← Od XOR Os
Exemple :
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
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
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
ARCHITECTURE GÉNÉRALE DU 8086
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
Utiliser pour chacune de ces 4 questions, une seule instruction parmi AND,
OR, XOR et TEST pour effectuer une des tâches suivantes: (chaque instruction doit être
utilisé une seule fois)
1. Convertir le code ASCII d'un chiffre décimal («0» à «9») contenu dans AL en sa
valeur numérique.
2. Fixer à '1' les bits impairs dans AX (ie: les bits numérotés 1, 3, 5…) sans changer
les bits pairs.
3. Ecrire un programme qui indique si les deux bits : le bit le MSB et LSB de BH sont
tous les deux à '1' sans changer la valeur de BH. Expliquer:
4. Inverser le bit le moins significatif de BX LSB sans changer les autres bits.
(0--> 1 et 1-->0)
INSTRUCTIONS LOGIQUES
Exercices
1. Convert the character in AL to upper case.
Solution: Use the AND instruction to clear bit 5.
• mov al,'a' ; AL = 0110 0001b
• and al, 1101 1111b ; AL = 0100 0001b
2. Convert a binary decimal byte into its equivalent ASCII decimal digit.
• Solution: Use the OR instruction to set bits 4 and 5.
• mov al,6 ; AL = 0000 0110b
• or al, 0011 0000b ; AL = 0011 0110b
• The ASCII digit '6' = b
3. Jump to a label if the value in AL is not zero.
• Solution: OR the byte with itself, then use the JNZ (jump if not zero)
instruction.
• or al,al
• jnz IsNotZero ; jump if not zero
• ORing any number with itself does not change its value.
RAPPEL ET COMPLÉMENT : CODAGE
JEU D’INSTRUCTIONS
RCL Od, n Décalage Circulaire Gauche à travers la retenue (Rotate Left through Carry)
RCR Od, n Décalage Circulaire Droit à travers la retenue (Rotate Right through Carry)
SAR Od, n
n fois C
LSB
SAR préserve le bit de signe SAR est réservée aux nombres signés.
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
JEU D’INSTRUCTIONS
... ...
C7
ROR Od, n
... ...
C7
JEU D’INSTRUCTIONS
C ... ...
RCR Od, n
... ... C
JEU D’INSTRUCTIONS
SHR AL, 1 0 1 1 0 0 1 0 1 1
AL C
MOV AL, 11001011B 1 1 0 0 1 0 1 1 x
ROR AL, 1 1 1 1 0 0 1 0 1 1
AL C
MOV AL, 11001011B 1 1 0 0 1 0 1 1 x
69
RCR AL, 1 x 1 1 0 0 1 0 1 1
ARCHITECTURE GÉNÉRALE DU 8086
org 100h
XOR BL, BL
MOV CL, 16
Ecrire un programme en MOV AX, 0xFFFF ; le nbr à traiter
ASM 8086 qui permet de
ENCORE:
calculer le nombre de ‘1’ ;ROL AX, 1
dans AX. SHR AX,1
JNC PROCHAIN
Mettre le résultat dans le INC BL
registre BL. PROCHAIN:
LOOP ENCORE
ret
JEU D’INSTRUCTIONS
org 100h
….
; multiply ax by 10
SHL AX,1
;AX2 AX
MOV BX,AX
;BX2 AX
SHL AX,2
;AX8 AX
ADD AX,BX
;AX10 AX
….
ret
ARCHITECTURE GÉNÉRALE DU 8086
• org 100h • 18 =2 + 16
• ….Mov ax,3 • 2 un déplacement vers
• ; multiply ax by 10 la gauche SHL
• SHL AX,1
• ;Ax 2AX
• 16=2^4 c’est 4
• MOV BX,AX déplacements vers la
• ;BX 2AX gauche
• SHL AX, 3
• ;Ax 2AX* 2^3
• ;Ax 16AX
• ADD AX,BX
• ;Ax 16AX+2AX
• ….
ARCHITECTURE GÉNÉRALE DU 8086
immédiat.
JEU D’INSTRUCTIONS
MOV CX, 10
ici: .....
..... S’exécute 10 fois
.....
LOOP ici
......
JEU D’INSTRUCTIONS
MOV DX, 0
MOV CX, 5
LOOP ETIQ
Actions
Instructions
1. Mise à jours de CX 2. Branchement si:
LOOP CXCX-1 CX≠0
(CX ≠ 0 ) et (ZF = 1)
LOOPZ, LOOPE CXCX-1
(égalité)
(CX ≠ 0 ) et (ZF = 0)
LOOPNZ, LOOPNE CXCX-1
(inégalité)
JEU D’INSTRUCTIONS
. .
. .
. .
JMP suite Etiq: . . . . . . .
. .
. .
. .
Suite: . . . . . . . . . JMP Etiq
. .
. .
JEU D’INSTRUCTIONS
l’instruction suivante.
I. Introduction
Exercices :
Exercices:
1. Trouver le plus grand (puis le plus petit) des deux nombres des adresses 38H et
40H, la mettre en 42H
4. De la même manière, trouver la valeur minimum puis la valeur maximum, puis les
deux en même temps
5. Trouver le nombre de caractères d'une chaîne ASCII terminée par le caractère nul
de code ASCII ‘0’
6. Faire la concaténation de deux chaînes ASCII terminées par 0 (CH1 et CH2) dans
une chaîne RES, mettre le nombre de caractères de la chaîne obtenue dans LG
7. Convertir un octet NB en une chaîne de caractères numériques RES ( 123 --> '123' )
PROGRAMMATION EN ASSEMBLEUR 8086
Exercice:
Exercice:
• Comparer les valeurs contenues dans les registres AL, BL et CL pour trouver
le minimum et le maximum de ces trois valeurs.
• Stocker le minimum en mémoire à l’adresse 100H
• Stocker le maximum en mémoire à l’adresse 200H
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.
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
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
…
JEU D’INSTRUCTIONS
XXX- Xxxx
ARCHITECTURE GÉNÉRALE DU 8086
ARCHITECTURE GÉNÉRALE DU 8086
ARCHITECTURE GÉNÉRALE DU 8086
ARCHITECTURE GÉNÉRALE DU 8086
ARCHITECTURE GÉNÉRALE DU 8086
ARCHITECTURE GÉNÉRALE DU 8086
ARCHITECTURE GÉNÉRALE DU 8086
ARCHITECTURE GÉNÉRALE DU 8086
ARCHITECTURE GÉNÉRALE DU 8086