Vous êtes sur la page 1sur 42

+

Le jeu d’instructions
assembleur 8086

L1 I.EEEA
2020/2021
Science du Numérique 2 97
+ 98

Introduction

n Le jeu d’instructions permettant de programmer une machine


en assembleur varie en fonction du processeur
n D’une manière générale les instructions d’un jeu peuvent
toutefois être séparées en groupes:
n Les instructions arithmétiques et logiques qui permettent d’effectuer
des opérations
n Les instructions de transfert permettant l’échange de contenu des
variables ou des cases mémoire
n Les instructions de test qui permettent de comparer des variables ou
des cases mémoire, et modifie l’état des drapeaux
n Les instructions de modification de séquence qui permettent de
désigner la prochaine instruction à exécuter

n La description complète de chaque instruction est fournie par la


documentation du processeur INTEL 8086

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 99

Les instructions de transfert

n Elles permettent de copier le contenu d’une variable, d’un


registre ou d’une case mémoire dans une autre variable,
registre ou case mémoire.

n Parmi ces instructions on trouve les instructions suivantes:


MOV, XCHG, LEA, PUSH, POP, PUSHA, POPA

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 100

L’instruction MOV

n Elle prend deux opérandes:


MOV dest , src

n Dest et40src peuvent être: CHAPITRE 5. ASSEMBLEUR 8086 : JEU D’INSTRUCTION

MOV reg,reg
MOV mem, reg
MOV reg, mem
MOV mem, immediate data
MOV reg, immediate data
MOV ax/al, mem
MOV mem, ax/al
MOV segreg, mem16
MOV segreg, reg16
MOV mem16, segreg
MOV reg16, segreg

Deux détails sont à noter quant à l’instruction MOV. Tout d’abord, on remarque qu’il
n’est
Science du Numérique 2 pas possible de copier le contenu d’une case-mémore dans une autre case-mémoire.
L1 I.EEEA 2020/2021
Les opérandes sont soit deux registres soit un registre et une case-mémoire. Ensuite, il n’est
+ 101

L’instruction MOV

n Transfert de registre à registre:


n mov reg_destination, reg_source

n Les deux registres doivent être de même taille

n Exemples:
n mov AX,BX
n mov CL, AH

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 102

L’instruction MOV

n Transfert d'un registre vers une cellule-mémoire (écriture en mémoire):


n mov mem, reg_source

n L'information sera copiée en mémoire sur le nombre d'octets correspondant à la taille


du registre

n La cellule mémoire peut être désigné par son adresse ou par un nom de variable
associée

n Exemples:
n mov DS:[0002], DX
n mov var1, AL ; (en supposant que var1 a été déclarée dans le segment
de données avec la directive DB)
n mov [var1], AL
n mov [var2], BX ; (en supposant que var2 a été déclarée dans le segment
de données avec la directive DW)
n mov var2, BX

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 103

L’instruction MOV

n Chargement d'une valeur immédiate (constante) dans une une cellule-mémoire :


n mov mem, immediate_data

n La cellule mémoire peut être désigné par son adresse ou par un nom de variable
associée

n La valeur de la constante doit être en adéquation avec la taille de la zone mémoire

n Exemples:
n mov DS:[0002], 2
n mov var1, 223 ; ( en supposant que var1 a été déclarée dans le
segment de données avec la directive DB)
n mov [var1], 223
n mov [var2], 260 ; (en supposant que var2 a été déclarée dans le
segment de données avec la directive DW)
n mov var2, 260

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 104

L’instruction MOV

n Chargement d'une valeur immédiate (constante) dans un


registre:
n mov reg, immediate_data

n La valeur de la constante doit être en adéquation avec la


taille du registre

n Exemples:
n mov AL, 10011111b
n mov CX, 223
n mov AX,data ; une étiquette de segment est une
constante

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 105

L’instruction MOV

n Copie d'une valeur 16 bits en mémoire dans un registre


segment:
n mov segreg, mem16

n Les registres segments étant des registres 16 bits, la valeur lue


en mémoire doit obligatoirement être une valeur sur 16 bits

n Le registre CS n'est jamais utilisé comme registre destination

n Exemples:
n mov ES,DS:[0004]
n mov ES,var1 ;( en supposant que var1 a été déclarée
dans le segment de données avec la directive DW)

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 106

L’instruction MOV

n Copie d'une valeur contenue dans un registre général 16 bits


dans un registre segment:
n mov segreg, reg16

n Les registres segments étant des registres 16 bits, le registre


source doit obligatoirement être un registre 16 bits

n Le registre CS n'est jamais utilisé comme registre destination

n Exemples:
n mov DS,AX
n mov ES,SI

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 107

L’instruction MOV

n Copie d'un registre segment vers une valeur 16 bits en mémoire


(écriture):
n mov mem16, segreg

n Les registres segments étant des registres 16 bits, la valeur


écrite en mémoire est obligatoirement une valeur sur 16 bits

n L'emplacement mémoire peut être désigné par son adresse ou


par un nom de variable associée

n Exemples:
n mov DS:[0004],ES
n mov var1,ES ;( en supposant que var1 a été déclarée
dans le segment de données avec la directive DW)

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 108

L’instruction MOV

n Copie de la valeur d'un registre segment dans un registre


général 16 bits:
n mov reg16,segreg

n Les registres segments étant des registres 16 bits, le registre


destination doit obligatoirement être un registre 16 bits

n Exemples:
n mov AX,DS
n mov SI,ES

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 109

L’instruction MOV

n Il n’est pas possible de copier le contenu d’une case mémoire


dans une autre case mémoire

n Les opérandes sont soit deux registres, soit un registre et une


cellule mémoire

n Il n’est pas possible d’effectuer un adressage immédiat dans un


registre de segment, raison pour laquelle un programme
assembleur nécessite les lignes suivantes d’initialisation du
registre DS:
mov AX, data
mov DS, AX

où "data" est l'étiquette utilisée pour déclarer le segment de


données

Science du Numérique 2 L1 I.EEEA 2020/2021


MOV mem16, segreg
MOV reg16, segreg
+ 110

L’instruction DeuxMOV
détails sont à noter quant à l’instruction MOV. Tout d’abord,
n’est pas possible de copier le contenu d’une case-mémore dans une au
Les opérandes sont soit deux registres soit un registre et une case-mémoir
pas possible d’e⌧ectuer un adressage immédiat dans un registre de seg
dernière raison qu’un programme en assembleur nécessite les lignes suivan
n Les opérandesdu peuvent
registre être
DS : de taille 8 ou 16 bits, mais ils
doivent être de MOV
même AX,@data
taille
MOV DS,AX
n Il peut être nécessaire dedes
La taille spécifier
opérandesla de
taille de l’opération
l’instruction MOV peuvent être au format
pour lever desqu’ils
ambiguïtés (cas de
sont de meme l'écriture
taille. de valeursils peut être necessaire d
En cas d’ambiguité,
immédiates): de l’opération par exemple dans le case de MOV [BX],0 :
MOV byte ptr [BX],0
MOV word ptr [BX],0
Les drapeaux d’états du micro-processeur restent inchangés après
n L’exécution d’une instruction
instruction MOV. MOV ne modifie pas les
drapeaux d’état du microprocesseur
5.2.2 Instruction LEA
L’instruction LEA (Load E⌧ective Address) permet de charger dan
LEA dest, source
adresse donnée. Elle prend la forme suivante : L1 I.EEEA 2020/2021
Science du Numérique 2 LEA reg16 ,mem
instruction stocke dans le registre destinataire l’adresse e⌧ective de la cas
+ 111

L’instruction XCHG

n L'instruction XCHG prend deux opérandes:

XCHG opérande1, opérande2

n Elle permet d'échanger le contenu des deux opérandes

n Les opérandes peuvent être de taille 8 ou 16 bits, mais ils


doivent être de même taille

n Les opérandes peuvent désigner des registres ou des


emplacements mémoire

Science du Numérique 2 L1 I.EEEA 2020/2021


opérandes de l’instruction MOV peuvent être au format 8 ou 16 bits tant
eme taille. En cas d’ambiguité, ils peut être necessaire de spécifier la taille
+
ar exemple dans le case de MOV [BX],0 :
112

tr [BX],0 L’instruction LEA


ptr [BX],0
x d’états du micro-processeur restent inchangés après l’exécution d’une
V.
n LEA: Load Effective Address

uction LEA
n Permet de charger une adresse donnée dans un registre

n LEA (Load n Syntaxe d’utilisation:


E⌧ective Address) permet de charger dans un registre une
LEA dest, source
Elle prend la forme suivante : En pratique cette
LEA reg16 ,mem
ke dans le registre
n Cettedestinataire l’adresse
instruction stocke e⌧ective
dans de ladestinataire
le registre case-mémoire spécifiéeffective
l’adresse
(partie offset de l'adresse logique) de la case mémoire spécifiée par
source

n Le registre destination est nécessairement un registre 16 bits


S :1234h
n Exemples:
X] n lea SI, DS:[0006] ; (équivalent à mov SI,6)
X+3] n lea SI, var1 ; (en supposant que var1 a été déclarée dans le
X+3] segment de données)
P+SI+4]
exemples, lesdu Numérique
Science 4 premières
2 instructions stockent dans AX respectivement L1 I.EEEA 2020/2021

u de BX et le contenu de BX +3. Ces opérations auraient pu etre réalisés


5.2.2 Instruction LEA
+ 113

L’instruction LEA
L’instruction LEA (Load E⌧ective Address) permet de charger dan
LEA dest, source
adresse donnée. Elle prend la forme suivante :
LEA reg16 ,mem
instruction stocke dans le registre destinataire l’adresse e⌧ective de la cas
par source.
n Exemples:
Exemple 9
LEA AX, DS :1234h
LEA AX, [BX]
LEA BX, [BX+3]
LEA AX, [BX+3]
LEA BX, [BP+SI+4]
Parmi ces 5 exemples, les 4 premières instructions stockent dans A
1234h, le contenu de BX et le contenu de BX +3. Ces opérations auraie

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 114

Les instructions arithmétiques et


logiques
n Le jeu d’instructions 8086 propose un grand nombre
d’instructions arithmétiques et logiques

n Il s’agit d’opérations mathématiques (addition, soustraction,


multiplication, division, …) et d’opérations booléennes (ET,
OU, NOT, XOR, …) opérées sur des bits

n Les nombres manipulés par ces opérations sont exprimés en


notation complément à 2

n Ces instructions peuvent changer les valeurs de certains


drapeaux d’état du microprocesseur

n Le résultat est habituellement placé dans le premier


opérande

Science du Numérique 2 L1 I.EEEA 2020/2021


5.3 5.3 arithmétiques
Instructions Instructions et
arithmétiques
logiques et logiques
+ Le jeu d’instructions 8086 propose un grand nombre d’instructions arit
115

Les instructions arithmétiques et


Le jeu d’instructions 8086 propose un grand nombre d’instructions arithmétiques et
logiques.
logiques. Ces instructions sontCes
des instructions sont des opérations
opérations mathématiques mathématiques
(addition, soustraction,(addition,
mul- soust
tiplication, division)tiplication, division)
ou des opérations ou des opérations
booléeennes (ET, OU,booléeennes
NOT, XOR,(ET, OU, NOT,
...) opérées sur XOR, ...
logiques
des bits. Les nombres dessont
Ces instructions, le cas
bits. Les nombres
exprimées
Ceséchéant,
instructions,
sont exprimées
en notation
le cas
changent
complément
échéant,
presque
en ànotation
changent
toujours
2. complément à 2.
presque
les valeurs de toujours les valeurs de
certains dra-
peaux. Le résultat de peaux. Le résultat
l’opération de l’opération
est habituellement est dans
placé habituellement placé dansUne
le premier opérande. le premier op
liste non-exhaustive
n Quelques
liste non-exhaustive
d’instructions
instructions: d’instructions
est donnée ci-dessous est: donnée ci-dessous :
Instructions Actions Instructions Actions
ADD AjouteADD Ajoute leaudeuxième
le deuxième opérande premier. opérande au premier.
SUB Soustrait
SUBle deuxièmeSoustrait
opérandeleaudeuxième
premier. opérande au premier.
CMP Soustrait
CMP le deuxièmeSoustrait
opérandeleaudeuxième
premier pour les flags
opérande au uniquement.
premier pour les flags
AND Compare AND par un ET Compare
logique tous parlesunbits
ETdes deux opérandes.
logique tous les bits des deux opéran
TEST Idem àTESTAND mais pour Idemles àflags
AND uniquement.
mais pour les flags uniquement.
OR E#ectue ORun OU logique entre tous
E#ectue un OU les logique
bits des entre
deux opérandes.
tous les bits des deux opéra
XOR E#ectue XOR un OU exclusif
E#ectue un OU exclusif logique deux
logique entre tous les bits des entre opérandes.
tous les bits des de
n Les deux opérandes
Pour ces instructions,de
les 2ces instructions
opérandes peuvent
peuvent être : être:
Pour ces instructions, les 2 opérandes peuvent être :
REG mémoire
REG mémoire
mémoire REG
mémoire REG
REG REG
mémoire immédiatREG REG
REG immédiatmémoire immédiat
REG immédiat
les registres utilisables pour ces opérations arithmétiques et logiques sont les registres :
REG = AX, BX, CX, DX, les registres
AH, AL, utilisables pour
BL, BH, CH, cesDH,
CL, opérations
DL, DI, arithmétiques
SI, BP, SP. et logiques sont l
Science du Numérique 2 REG = AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, 2020/2021
L1 I.EEEA DL, DI, SI, BP,
Exemple 10 :
AND
OR Compareun
E#ectue parOU
un logique
ET logique
entretous lesles
tous bits desdes
bits deux opérandes.
deux opérandes.
TEST Idem à AND mais pour les flags uniquement.
XOR E#ectue un OU exclusif logique entre tous les bits des deux opérandes.
+ OR
XOR
E#ectue un OU logique entre tous les bits des deux opérandes. 116
E#ectue un OU exclusif logique entre tous les bits des deux opérandes.
Les
Pourinstructions
REG
arithmétiques
ces instructions, les 2 opérandes
mémoire
peuvent être : et
Pour ces instructions, les 2 opérandes peuvent être :
logiques
mémoire
REG
REG
REG
mémoire
REG
mémoire REG
mémoire
REG immédiat
REG
Les
n REG registres
mémoire utilisables par les opérations arithmétiques et
immédiat
immédiat
REG
logiques immédiat
sont:
les registres utilisables pour ces opérations arithmétiques et logiques sont les registres :
REGles
= registres
AX, BX,utilisables
CX, DX,pourAH, ces
AL,opérations
BL, BH, arithmétiques
CH, CL, DH,etDL,
logiques sont
DI, SI, lesSP.
BP, registres :
REG = AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
nExemple 10 :
Exemples:
– mise à10zero: du bit 3 de AX mais laisser le reste intact AND AL, F7h
Exemple
– –mise
miseààun
zerodudu
bitbit3 3dedeAX
AXmais
maislaisser
laisserlelereste
reste intact ANDAL,
intact OR AL,08h
F7h
– mise à un du bit 3 de AX mais laisser le reste intact OR AL, 08h
Les instructions arithmétiques de multiplication et de division MUL, IMUL, DIV, IDIV
Les instructions arithmétiques de multiplication et de division MUL, IMUL, DIV, IDIV
ont une structure particulière. Ils ne prennent qu’un seul opérande (registre ou mémoire).
ont une structure particulière. Ils ne prennent qu’un seul opérande (registre ou mémoire).
Les
Lesregistres
registrespossibles
possibles étant
étant :: AX, BX, CX,
AX, BX, CX, DX,DX, AH,
AH,AL,
AL,BL, BL,BH, BH,CH,
CH,CL,CL,DH, DH,DL,DL,
DI,
DI,SI,
SI,BP,
BP,SP.SP.Les
Les instructions
instructions MUL
MUL et et IMUL
IMUL a#ectent
a#ectentuniquement
uniquementleslesflags
flags
CFCF et et
OFOF: :
lorsque
lorsquelelerésultat
résultatest
estplus
plus grand
grand que la taille
que la taille de
del’opérande
l’opérandeces
cesflags
flagssont
sont placés
placés à 1,
à 1, lorsque
lorsque
lalataille
taillede
del’opérante
l’opérante est
est ajustée ces flags
ajustée ces flags sont
sont placés
placésàà0.0.Pour
PourDIVDIVetetIDIV
IDIVlesles flags
flags ne ne
sont
sontpaspasdéfinis.
définis.
Science du Numérique 2 L1 I.EEEA 2020/2021
+ 117

Les opérations logiques

n Le 8086 permet d’effectuer des opérations logiques grâce au


mnémoniques AND, OR, NOT et XOR.

n Ces opérateurs peuvent être utilisés avec :


n AND/OR/XOR registre ou variable, registre
n AND/OR/XOR registre, registre ou variable
n AND/OR/XOR registre ou variable, constante
n AND/OR/XOR registre ou variable, nombre
n NOT registre ou variable

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 118

Les opérations logiques

n Exemples:

MOV AL, 01100001b


AND AL, 11011111b ; --> donne 01000001b
OR AL, 01110110b ; --> donne 01110111b
NOT AL ; --> donne 10001000b
XOR AL, 01010101b ; --> donne 11011101b
XOR BX, BX ; --> donne 00000000b

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 119

Les opérations de décalage

n Le 8086 permet d’effectuer des opérations de décalage sur des


nombres signés ou non signés:

n SHL (SHift Left) et SAL (Shift Arithmetic Left)


n SHR (SHift Right) et SAR (Shift Arithmetic Right)

n Le nombre de bits de décalage est indiqué dans la seconde opérande

n Avec SHL, SAL et SHR, les bits qui sont expulsés sont stockés dans le bit
CF

n Avec SAR le bit de signe (MSB) n’est pas concerné par le décalage,
mais est conservé

n Les opérations de décalage sont plus rapides à exécuter que


l’opération de multiplication ou de division par 2

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 120

Les opérations de décalage

Source illustration : http://www.sxlist.com/techref/language/masm/masmc04.htm

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 121

Les opérations de décalage

n Exemples:

MOV AL, 11110000b


SHL AL, 1 ; --> donne 11100000b
SAL AL, 1 ; --> donne 11000000b
SAR AL, 1 ; --> donne 10100000b
SHR AL, 1 ; --> donne 01010000b

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 122

Les opérations de rotation

n Le 8086 permet de réaliser des opérations de rotation sur


des nombres signés ou non signés:
n ROL (Rotate Left) et RCL (Rotate Throw Carry Left)
n ROR (Rotate Right) et RCR (Rotate Throw Carry Right)

n Le nombre de bits de décalage est indiqué dans la seconde


opérande

n Les bits expulsés sont replacés dans les trous formés par ce
décalage

n Avec RCL et RCR le bit CF est utilisé en plus des bits à


modifier (lors d’un mouvement, le trou est rempli avec une
copie du bit CF et le bit expulsé est placé dans CF)

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 123

Les opérations de rotation

Source illustration : http://www.sxlist.com/techref/language/masm/masmc04.htm

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 124

Les opérations de rotation

n Exemples:

MOV AL, 11110000b


ROL AL, 1 ; --> donne 11100001b en supposant que CF=0
RCL AL, 1 ; --> donne 11000010b et CF = 1
RCR AL, 1 ; --> donne 11100001b et CF = 0
ROR AL, 1 ; --> donne 01111000b

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 125

Les opérations arithmétiques

n Les mnémoniques ADD (ADDition) et SUB (SUBtraction) permettent


d’effectuer des additions et des soustractions:
n ADD registre, registre ou variable
n ADD registre ou variable, registre
n ADD registre ou variable, constante
n SUB registre, registre ou variable
n SUB registre ou variable, registre
n SUB registre ou variable, constante

n Si une addition ou une soustraction sont codées sur 16 bits, alors leurs
résultats seront codés sur au plus 16 + 1 bits soit 16 bits de résultat + 1
bit de retenue (le bit CF)

n Les opérations ADD et SUB sont effectuées sans tenir compte de l’état
initial du bit CF du registre d’état mais l’état de ce bit peut être modifié
à l’issue de l’opération

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 126

Les opérations arithméthiques

n L'instruction ADC permet d'effectuer une addition qui tient


compte du bit CF

n L'instruction ADC modifie l’état du bit CF et donc sert à


effectuer des opérations sur 48 bits, 64 bits …

n En stockant les résultats intermédiaires en mémoire,


l’opération se fera par bloc de 16 bits.

n Idem pour la soustraction avec l'instruction SBB

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 127

Les opérations d'incrémentation et


décrémentation
n Le 8086 propose 2 instructions INC et DEC pour incrémenter ou
de décrémenter :
n INC registre ou variable
n DEC registre ou variable

n INC AX incrémente la valeur stockée dans AX. INC AX donne le


même résultat que ADD AX, 1 mais le premier mnémonique
correspond à un codeop de 1 octet alors que le codeop
correspondant au second mnémonique en occupe 3.

n DEC BX décrémente la valeur stockée dans BX. DEC BX donne


le même résultat que SUB BX, 1 mais le premier mnémonique
correspond à un codeop de 1 octet alors que le codeop
correspondant au second mnémonique en occupe 3.

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 128

Les instructions arithmétiques et


logiques
n Les instructions de multiplication et division MUL, IMUL, DIV,
IDIV ne prennent qu’un seul opérande (registre ou mémoire)

n Les registres utilisables sont: AX, BX, CX, DX, AH, AL, BH, BL,
CH, CL, DH, DL, DI, SI, BP et SP

n Les instructions MUL et IMUL affectent uniquement les


drapeaux CF et OF (1 lorsque le résultat est plus grand que
la taille de l’opérande, sinon 0)

n Pour DIV et IDIV les drapeaux ne sont pas définis

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 129

Les opérations arithmétiques et


logiques
42 CHAPITRE 5. ASSEMBLEUR 8086 : JEU D’INSTRUCTION

MUL Multiplication non signée byte : AX = AL * opérande


word : (DX AX) = AX * opérande.
IMUL Multiplication signée byte : AX = AL opérande
word : (DX AX) = AX * opérande.
DIV Division non signée byte : AL = AX / opérande ; AH = reste (modulo).
word : AX = (DX AX) /opérande ; DX = reste (modulo)...
IDIV Division signée byte : AL = AX /opérande ; AH = reste (modulo)
word : AX = (DX AX) /opérande ; DX = reste (modulo)
Les instructions MUL et IMUL affectent uniquement les flags CF et OF : lorsque le résul-
tat est plus grand que la taille de l’opérande ces flags sont placés à 1, lorsque la taille de
l’opérante est ajustée ces flags sont placés à 0.

Exemple 11

5.4 Instructions de branchement


Les instructions sont usuellement exécutées de manière sequentielle. Le cycle d’exécu-
Science du d’une
tion Numérique 2
instruction modifie le compteur ordinal (ou le registre IP) de sorte à ce que ce L1 I.EEEA 2020/2021
registre pointe sur la prochaine instruction à éxecuter. Cependant, l’instruction en cours
+ 130

Les instructions de branchement

n Les instructions sont exécutées de manière séquentielle

n Le cycle d’exécution d’une instruction modifie IP de manière


à ce que ce registre pointe sur la prochaine instruction à
exécuter

n L’instruction en cours d’exécution peut être amenée à


modifier ce compteur

n Les instructions qui permettent cela sont les instructions de


branchement

n Ces instructions permettent d’exécuter des instructions de


manière non séquentielle

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 131

Les instructions de branchement

n Très utiles car elles permettent de faire répéter une suite


d’instructions au processeur ou de déclencher une action en
fonction du résultat d’une opération

n Les instructions de branchement modifient le séquencement


des instructions à exécuter en modifiant le contenu du
registre IP

n 3 types d’instructions de branchement:


n Sauts inconditionnels
n Sauts conditionnels
n Appels de sous-programmes

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 132

Les sauts inconditionnels

n L’instruction JMP permet d’exécuter une instruction qui se


trouve à n’importe quel endroit du programme

n L’instruction à exécuter est usuellement référencée par une


étiquette ou une adresse

n Le fait d’utiliser une étiquette permet de faire un


référencement implicite (référencement relatif) et d’être
insensible à des rajouts de ligne de code dans le programme

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 133

Les sauts inconditionnels

5.4. INSTRUCTIONS DE BRANCHEMENT 43

n Exemple:
debut :
5.4. INSTRUCTIONS DE BRANCHEMENT
MOV AX, 0
boucle : MOV [0140h], AX
JMP debut
boucle: MOV AX, 0
MOV boucle
AX,1 : MOV [0140h], AX
JMP boucle
MOV AX,1

Un example de branchement en utilisant l’adresse de branchement est donné ci-dessous.

Adresse Contenu mém Langage Mnemonique Explication en francais


0100h Un
B8 00 00example
MOVde branchement
AX, 0 en charge
utilisant
zerol’adresse
dans AX de branchement est donné ci-dessous
0103 A3 40 01 MOV [0140h], AX écrit le contenu de AX à l’adresse 0140h
0106 EB FCAdresse JMP
Contenu
103 mém LangageBrancheMnemonique Explication en francais
à l’adresse 0103
0107 B8 01 0100h
00 MOV
B8 00AX,1
00 MOV charge
AX, un 0 dans AX charge zero dans AX
0103 A3 40 01 MOV [0140h], AX écrit le contenu de AX à l’adresse
0106 EB FC JMP 103 Branche à l’adresse 0103
0107 B8 01 00 MOV AX,1 charge un dans AX

5.4.2
Science Saut2conditionnel
du Numérique L1 I.EEEA 2020/2021
+ 134

Les sauts conditionnels

n Ce sont des instructions permettant de créer des boucles


conditionnées par une valeur booléenne

n Ces instructions testent un ou plusieurs drapeaux du registre


d’état, et effectue le branchement si le test est vérifié

n Si le test n’est pas vérifié le processeur exécute


normalement la prochaine instruction dans le programme

Science du Numérique 2 L1 I.EEEA 2020/2021


+ 5.4.2 Saut conditionnel 135

Les Les
sauts conditionnels
instructions de saut conditionnels sont des instructions permettant de créer des
boucles conditionnées par une valeur booléenne en assembleur. Ces instructions testent un
ou plusieurs drapeaux du registre d’état et e!ectue le branchement si le test est vérifié. si
le test n’est pas verifié, le processeur exécute normalement la prochaine instruction dans
le programme.
n Les principales instructions de saut conditionnel:
Le tableau ci-dessous décrit un certain nombre d’instructions de saut conditionnel.
Instruction Description Condition Aliases opposé
JC Jump if carry Carry = 1 JB, JNAE JNC
JNC Jump if no carry Carry = 0 JNB, JAE JC
JZ Jump if zero Zero = 1 JE JNZ
JNZ Jump if not zero Zero = 0 JNE JZ
JS Jump if sign Sign = 1 JNS
JNS Jump if no sign Sign = 0 JS
JO Jump if overflow Ovrflw=1 JNO
JNO Jump if no Ovrflw Ovrflw=0 JO
JP Jump if parity Parity = 1 JPE JNP
JPE Jump if parity even Parity = 1 JP JPO
JNP Jump if no parity Parity = 0 JPO JP
JPO Jump if parity odd Parity = 0 JNP JPE

Pour des comparaisons signés, les instructions suivantes sont utilisables :


Science du Numérique 2 L1 I.EEEA 2020/2021
+ 136

Les sauts conditionnels

n Pour des comparaison sur des nombres signés les


44 CHAPITRE 5. ASSEMBLEUR 8086 : JEU D’INSTRUCTION
instructions suivantes sont utilisables:

Instruction Description Condition Aliases Opposite


JG Jump if greater (>) Sign = Ovrflw or
et Zero=0 JNLE JNG
JNLE Jump if not less than or equal (not <=) Sign = Ovrflw or
et Zero=0 JG JLE
JGE Jump if greater than or equal (>=) Sign = Ovrflw JNL JGE
JNL Jump if not less than (not <) Sign = Ovrflw JGE JL
JL Jump if less than (<) Sign = Ovrflw JNGE JNL
JNGE Jump if not greater or equal (not >=) Sign = Ovrflw JL JGE
JLE Jump if less than or equal (<=) Sign = Ovrflw or Zero = 1 JNG JNLE
JNG Jump if not greater than (not >) Sign = Ovrflw or Zero = 1 JLE JG
JE Jump if equal (=) Zero = 1 JZ JNE
JNE Jump if not equal (=) Zero = 0 JNZ JE

Un exemple de programme additionnant de nombres stockées dans les variables N 1 et


N 2 au offset 1100h et 1101 et stockant le résultat en fonction du signe est donné sur la
Figure 5.1.

Science du Numérique 2 L1 I.EEEA 2020/2021


JNE Jump if not equal (=) Zero = 0 JNZ

+ 137

Les sauts conditionnels


Un exemple de programme additionnant de nombres stockées dans les variables N 1 et
N 2 au offset 1100h et 1101 et stockant le résultat en fonction du signe est donné sur la
Figure 5.1.

n Exemple de programme

Figure 5.1 – Exemple de programme utilisant des sauts conditionnels


Science du Numérique 2 L1 I.EEEA 2020/2021
+ 138

Les sauts conditionnels

5.5. CONCLUSION 45
n Exemple 2: calcul factorielle
Etiquette Instruction Commentaires

DebutProg : CMP CX,0 ; test si CX vaut 0


JNZ TestSup8 ; test si CX vaut 0
MOV AX,1 ; CX contient 0, 0 !=1
JMP FinDuProg ; Saut à la fin du programme
TestSup8 : CMP CX,8 ;test si CX vaut plus que 8
JNG Entre1et8 ;Calcul le factoriel si CX n’est pas trop grand
MOV AX,0FFFFh ;CX trop grand, mettons AX à 65365
JMP FinDuProg ;Saut à la fin du programme
Entre1et8 : MOV AX,1 ;pour la première multiplication
MOV BX,CX ;Initialisation de BX
CalculFacto : IMUL BX ;AX=AX*BX
DEC BX ;Decrementation de BX
JNZ CalculFacto ;Arretes si BX = 0

5.5 Conclusion
Science du Numérique 2 L1 I.EEEA 2020/2021

Les instructions que nous avons décrites ci-dessous sont les instructions de base de

Vous aimerez peut-être aussi