Vous êtes sur la page 1sur 83

ARCHITECTURE

INTERNE d’un
MICROPROCESSEUR

1
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
I ) Introduction :
Le microprocesseur Intel 8086 est un microprocesseur 16 bits, apparu en
1978. C’est le premier microprocesseur de la famille Intel 80x86 (8086,
80186, 80286, 80386, 80486, Pentium, ...). Il se présente sous la forme
d’un boîtier DIP (Dual In-line Package) à 40 broches :
II) Architecture externe du 8086

2
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
Schéma fonctionnel du 8086

3
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
III ) Architecture interne du 8086
Le 8086 est constitué de deux unités fonctionnant en parallèle :
• l’unité d’exécution (EU : Exécution Unit) ;
• l’unité d’interface de bus (BIU : Bus Interface Unit).

4
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
III ) Architecture interne du 8086

Rôle des deux unités :

• l’unité d’interface de bus (BIU) recherche les instructions en


mémoire et les range dans une file d’attente ; elle fournit
l'interface physique entre le microprocesseur et le monde
extérieur

• l’unité d’exécution (EU) exécute les instructions contenues dans


la file d’attente. Elle comporte essentiellement l'UAL de 16 bits
qui manipule les registres généraux de 16 bits.

Le s d e u x u n i t é s f o n c t i o n n e n t s i m u l t a n é m e n t , d ’ o ù u n e
a c c é l é r a t i o n d u p ro c e s s u s d ’ exé c u t i o n d ’ u n p ro g r a m m e
(fonctionnement selon le principe du pipe-line).

5
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
III ) Architecture interne du 8086
Le microprocesseur 8086 contient 14 registres répartis en 4
groupes :
• Registres généraux : 4 registres sur 16 bits.
AX = (AH,AL) ; BX = (BH,BL) ; CX = (CH,CL) ; DX = (DH,DL).

Ils peuvent être également considérés comme 8 registres sur 8 bits. Ils
servent à la fois d’accumulateurs et de registres opérandes 16 bits.

Ces registres présentent cependant en plus certaines spécificités :


• AX est utilisé pour les opérations d’entrées sorties, les multiplications
et les divisions

• BX sert de registre de base lors de l’adressage indirect par registre de


base

• CX sert de compteur de données dans les opérations sur les chaines


de caractères

• DX est utilisé avec AX pour les multiplications et division, ou comme


6
registre d’adressage indirect cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
III ) Architecture interne du 8086
• Registres de pointeurs et d’index : 4 registres sur 16 bits.

Pointeurs :

SP : Stack Pointer, pointeur de pile (la pile est une zone de sauvegarde
de données en cours d’exécution d’un programme) ;

BP : Base Pointer, pointeur de base, utilisé pour adresser des données


sur la pile.

Index :

SI : Source Index ;

DI : Destination Index.

Ils sont utilisés pour les transferts de chaînes d’octets entre deux zones
mémoire.

Les pointeurs et les index contiennent des adresses de cases mémoire.


7
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
III ) Architecture interne du 8086
Pointeur d’instruction et indicateurs (flags) : 2 registres sur 16 bits.
Pointeur d’instruction : IP, contient l’adresse de la prochaine instruction à
exécuter.

Flags :

8
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
III ) Architecture interne du 8086
Registres de segments : 4 registres sur 16 bits.
CS : Code Segment, registre de segment de code
DS : Data Segment, registre de segment de données ;
SS : Stack Segment, registre de segment de pile ;
ES : Extra Segment, registre de segment supplémentaire pour les données

9
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
IV -1) Gestion de la mémoire :
• L'espace mémoire adressable (1 méga = 220 bits du bus
d'adresse ) du 8086 est divisé en quatre segments logiques allant
jusqu'à 64 KOctets chacun
• Le compteur de programme est de 16 bits

• donc la possibilité d'adressage est de 216 = 64 Ko (Ce qui ne


couvre pas la totalité de la mémoire)

• On utilise deux registres pour indiquer une adresse au processeur

• Chaque segment débute à l'endroit spécifié par un registre spécial


nommé registre segment.

• Le déplacement permet de trouver une information à l'intérieur du


segment.
• CS:IP : lecture du code d’une instruction (CS registre segment
et IP déplacement)
• DS : accès aux données (MOV AX,[1045] = lecture du mot
mémoire d’adresse logique DS:1045H) 10
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
IV-2) Segmentation de la mémoire:

=> Registres de déplacement = sélectionner une information dans


un segment.

=> Dans le segment de code CS : le compteur de programme IP


joue ce rôle. CS:IP permet d'accéder à une information dans le
segment de code.

=>Dans les segments de DS : les deux index SI ou DI jouent ce rôle.

=> Le déplacement peut être aussi une constante. DS:SI ou DS:DI


permettent d'accéder à une information dans le segment de données.

=> Dans le segment de pile SS le registre SP (stack pointer) et BP


(base pointer) jouent ce rôle. SS:SP ou SS:BP permettent d'accéder
à une information dans le segment de pile.

11
cours architecture des ordinateurs - Naoufel GUEDDAH
Le microprocesseur Intel 8086
IV-2) Segmentation de la mémoire:

Le bus d'adresses du 8086 possède 20 bits. Cette adresse de 20 bits


est formée par la juxtaposition d'un registre segment (16 bits de poids
fort) et d'un déplacement (offset, 16 bits de poids faible).

Le schéma de la figure suivante illustre la formation d'une adresse 20


bits à partir du segment et du déplacement sur 16 bits :

Adresse physique= Base * 16+ offset


12
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Jeu d’instructions
Définition :

La première étape de la conception d’un microprocesseur est la


définition de son
jeu d’instructions.

Le jeu d’instructions décrit l’ensemble des opérations élémentaires que


le microprocesseur pourra exécuter.

Pour les microprocesseurs classiques, le nombre d’instructions


reconnues varie entre 75 et 150 (microprocesseurs CISC : Complex
Instruction Set Computer)

Il existe aussi des microprocesseurs dont le nombre d’instructions est


très réduit (microprocesseurs RISC : Reduced Instruction Set
Computer) : entre 10 et 30 instructions, =>permettant d’améliorer le
temps d’exécution des programmes
13
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

Les architectures RISC et CISC


La programmation en assembleur du
microprocesseur 8086
Codage
Les instructions et leurs opérandes (paramètres) sont stockés en
mémoire principale. La taille totale d’une instruction (nombre de bits
n é c e s s a i re s p o u r l a re p ré s e n t e r e n m é m o i re ) d é p e n d d u t y p e
d’instruction et aussi du type d’opérande. Chaque instruction est
toujours codée sur un nombre entier d’octets afin de faciliter son
décodage par le processeur. Une instruction est composée de deux
champs :

q le code instruction, qui indique au processeur quelle instruction


réaliser
q le champ opérande qui contient la donnée, ou la référence à une
donnée en mémoire (son adresse).
Exemple :

Le nombre d'instructions du jeu d'instructions est directement lié au


format du code instruction. Ainsi un octet permet de distinguer au
maximum 256 instructions différentes. 15
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

Code opération : assembleur

Programme en langage machine 80486 implanté à l’adresse mémoire 0100H

A1 01 10 03 06 01 12 A3 01 14

Ce programme additionne le contenu de deux cases mémoire et range le


résultat dans une troisième Voici une transcription langage symbolique du
programme complet. L'adresse de début de chaque instruction est indiquée
à gauche (en hexadécimal).

16
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Jeu d’instructions

Type d’instructions

Les instructions que l’on retrouve dans chaque microprocesseur


peuvent être classées en groupes :
q Transfert de données pour charger ou sauver en mémoire,
effectuer des transferts de registre à registre, etc…
q Opérations arithmétiques : addition, soustraction, division,
multiplication
q Opérations logiques : ET, OU, NON, NAND, comparaison, test,
etc…
q Contrôle de séquence : branchement, test, etc…
17
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les instructions de Transfert de données
Elles permettent de déplacer des données d’une source vers une
destination :

• registre vers mémoire ;


• registre vers registre ;
• mémoire vers registre.

Remarque : le microprocesseur 8086 n’autorise pas les transferts de


mémoire vers mémoire (pour ce faire, il faut passer par un registre
intermédiaire).
Exemples :
Syntaxe : MOV destination , source
MOV AX, BX ; Transfert d'un registre de 16 bits vers un registre de 16 Bits
MOV AH, CL ; Transfert d'un registre de 8 bits vers un registre de 8 bits
MOV AX, Val1 ; Transfert du contenu d'une case mémoire 16 bits vers AX
MOV Val2, AL ; Transfert du contenu du AL vers une case mémoire
D'adresse Val2
18
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:

Il existe différentes façons de spécifier l’adresse d’une case mémoire


dans une instruction : ce sont les modes d’adressage

Le microprocesseur 8086 possède 7 modes


d'adressage :
- Mode d'adressage registre.
- Mode d'adressage immédiat.
- Mode d'adressage direct.
- Mode d'adressage registre indirect.
- Mode d'adressage relatif à une base.
- Mode d'adressage direct indexe.
- Mode d'adressage indexée.

19
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:

Mode d'adressage registre

Ce mode d'adressage concerne tout transfert ou toute opération, entre


deux registres de même taille.
Dans ce mode l'opérande sera stockée dans un registre interne au
microprocesseur.
Exemple : Mov AX, BX ;

cela signifie que l'opérande stocker dans le registre BX sera transféré


vers le registre AX.

Quand on utilise l'adressage registre, le microprocesseur effectue toutes les


opérations d'une façon interne

Donc dans ce mode il n'y a pas d'échange avec la mémoire, ce qui


augmente la vitesse de traitement de l'opérande

20
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:

Mode d’adressage implicite: L'instruction spécifie une opération


sans opérande
Exemple: INC AX Pas d’accès mémoire pour les opérandes
Mode d'adressage immédiat
Dans ce mode d'adressage l'opérande apparaît dans l'instruction elle-
même, exemple
MOV AX,500H ;
cela signifie que la valeur 500H sera stockée immédiatement dans le
registre AX

21
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:
Mode d'adressage direct
Dans ce mode on spécifie directement l'adresse de l'opérande dans
l'instruction exemple :
MOV AX, adr
La valeur adr est une constante (un déplacement) qui doit être ajouté au
contenu du registre DS pour former l'adresse physique de 20 bits.

22
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:
Mode d'adressage direct
mov bl, [1200H] : transfère le contenu de la case mémoire d’adresse
effective (offset) 1200H vers le registre BL.

L’instruction comporte l’adresse de la case mémoire où se trouve la


donnée : adressage direct.
L’adresse effective représente l’offset de la case mémoire dans le
segment de données (segment dont l’adresse est contenue dans le
registre DS) : segment par défaut.

23
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:
Mode d'adressage direct

On peut changer le segment lors d’un adressage direct en ajoutant un


préfixe de segment, exemple : mov bl,es :[1200H]. On parle alors de
forçage de segment

24
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:
Mode d'adressage registre indirect
Dans ce mode d'adressage l'adresse de l'opérande est stockée dans un
registre qu'il faut bien évidemment le charger au préalable par la
bonne adresse. L'adresse de l'opérande sera stockée dans un registre
de base (BX ou BP) ou un indexe (SI ou DI).
• adressage basé : l’offset est contenu dans un registre de base BX
ou BP.

Exemples :

mov al,[bx] : transfère la donnée dont l’offset est contenu dans le


registre de base BX vers le registre AL. Le segment associé par défaut
au registre BX est le segment de données : on dit que l’adressage est
basé sur DS;

mov al,[bp] : le segment par défaut associé au registre de base BP


est le segment de pile. Dans ce cas, l’adressage est basé sur SS. 25
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:
Mode d'adressage registre indirect

26
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:
Mode d'adressage registre indirect

• adressage indexé: semblable à l’adressage basé, sauf que l’offset


est contenu dans un registre d’index SI ou DI, associés par défaut au
segment de données.

Exemples :
mov al,[si] : charge le registre AL avec le contenu de la case
mémoire dont l’offset est contenu dans SI.

mov [di],bx : charge les cases mémoire d’offset DI et DI + 1 avec le


contenu du registre BX.

27
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:

Remarque : une valeur constante peut éventuellement être ajoutée


aux registres de base ou d’index pour obtenir l’offset. Exemple :

mov [si+100H],ax qui peut aussi s’écrire


mov [si][100H],ax ou encore
mov 100H[si],ax

MOV AX,[BX]+2
Cela signifie que dans le registre AX on va mettre le contenu de la
case mémoire pointe par BX+2

Les syntaxes suivantes sont identiques :


MOV AX,[BX+2]
MOV AX,[BX]+2
MOV AX,2[BX]

28
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:

2]

29
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les modes d'adressage du 8086:

adressage basé et indexé:

l’offset est obtenu en faisant la somme d’un registre de base, d’un


registre d’index et d’une valeur constante. Exemple :

mov ah,[bx+si+100H]

Ce mode d’adressage permet l’adressage de structures de données


complexes : matrices, enregistrements, ... Exemple:

mov bx,10
mov si,15
Mov matrice[bx][si],12H

Dans cet exemple, BX et SI jouent respectivement le rôle d’indices de


ligne et de colonne dans la matrice.
30
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Jeu d’instructions

Type d’instructions

Les instructions que l’on retrouve dans chaque microprocesseur


peuvent être classées en groupes :
q Transfert de données pour charger ou sauver en mémoire,
effectuer des transferts de registre à registre, etc…
q Opérations arithmétiques : addition, soustraction, division,
multiplication
q Opérations logiques : ET, OU, NON, NAND, comparaison, test,
etc…
q Contrôle de séquence : branchement, test, etc…
31
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Opérations arithmétiques :
Les instructions arithmétiques de base sont l’addition, la soustraction, la
multiplication , la division, les opérations Décrémentation,
incrémentation et Comparaison.

• Addition: ADD: (Addition)


Syntaxe : ADD Destination, source

Elle permet d'additionner le contenu de la source (octet ou un mot) avec


celui de la destination le résultat est mis dans la destination

Destination <---------- Destination + source


Exemples :
ADD AX, BX ; AX = AX + BX (addition sur 16 bits)
ADD AL, [SI] ; AL = AL + le contenu de la case mémoire pointé par SI
ADD [DI], AL ; le contenu de la case mémoire pointé par DI est
;additionnée avec AL, le résultat est mis dans la case
; mémoire pointé par DI 32
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
• Addition ADC : (Addition avec retenue)
Syntaxe : ADC Destination, source

Elle permet d'additionner le contenu de la source (octet ou un mot) avec


celui de la destination et la retenue (CF) le résultat est mis dans la
destination

Destination <---------- Destination + source + retenue


Exemples :
ADC AX,BX ; AX = AX + BX + CF(addition sur 16 bits )
ADC AL,BH ; AL = AL + BH + CF(addition sur 8 bits )

• Addition INC : (Incrémentation)


Syntaxe : INC Destination; Elle permet d'incrémenter le contenu de la destination

Destination <---------- Destination + 1


Exemples :
INC AX ; AX = AX + 1 (incrémentation sur 16 bits).
INC AL ; AL = AL +1 (incrémentation sur 8 bits).
33
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

• Soustraction SUB : (Soustraction)


Syntaxe : SUB Destination, source

Elle permet de soustraire la destination de la source (octet ou un


mot) le résultat est mis dans la destination

Destination <---------- Destination - source


Exemples :
SUB AX,BX ; AX = AX - BX (Soustraction sur 16 bits )
SUB AL,BH ; AL = AL - BH ( Soustraction sur 8 bits )

•Soustraction DEC : (Décrémentation)


Syntaxe : DEC Destination ; Elle permet d'incrémenter le contenu de la destination

Destination <---------- Destination - 1


Exemples :
DEC AX ; AX = AX - 1 (décrémentation sur 16 bits).
DEC AL ; AL = AL -1 (décrémentation sur 8 bits).
34
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
• CMP : (Comparaison)
Syntaxe : CMP Destination, Source

• Elle soustrait la source de la destination , qui peut être un octet ou un


mot, le résultat n'est pas mis dans la destination .

• Cette instruction touche uniquement les indicateurs pour être tester


avec une autre instruction ultérieure de saut conditionnel

• Les indicateurs susceptibles d'être touchés sont : AF, CF, OF, PF, SF,
ZF
• Cette instruction va nous permettre de comparer deux nombres
comme le montre le tableau suivant :

35
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

• La multiplication MUL : (Multiplication pour les nombres non signés)


Syntaxe : MUL Source
MUL effectue une multiplication non signée de l’opérande source avec
l'accumulateur

• Si la source est un octet alors elle sera multipliée par l'accumulateur AL


le résultat sur 16 bits sera stocké dans le registre AX.

• Si la source est un mot alors elle sera multipliée avec l'accumulateur


AX le résultat de 32 bits sera stocké dans la paire des registres AX et DX
Exemples :
• mov al,51
mov bl,32
mul bl
→ AX = 51 × 32
• mov ax,4253
mov bx,1689
mul bx
→ (DX, AX) = 4253 × 1689 36
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
• La division MUL : DIV : (Division des nombres non signés)
Syntaxe : DIV Source
Elle effectue une division non signée de l'accumulateur par
l'opérande source :

Exemples :
• Si l'opérande est un octet : alors on récupère le quotient dans le
registre AL et le reste dans le registre AH.
• Si l'opérande est un mot : alors on récupère le quotient dans le
registre AX et le reste dans le registre DX
Exemples :
• mov ax,35
mov bl,10
div bl
→ AL = 3 (quotient) et AH = 5 (reste)
• mov dx,0
mov ax,1234
mov bx,10
div bx
→ AX = 123 (quotient) et DX = 4 (reste) 37
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
• Les instructions logiques ( de bits ) :
Ils sont divisés en trois sous-groupes comme le montre le tableau
suivant :

38
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
• Les instructions logiques ( de bits ) :
• NOT : (Négation): Elle réalise la complémentation à 1 d'un
nombre
Syntaxe : NOT Destination

Exemple :
MOV AX, 500 ; AX = 0000 0101 0000 0000
NOT AX ; AX = 1111 1010 1111 1111

• AND : ( Et logique )
Syntaxe : AND Destination, source
Elle permet de faire un ET logique entre la destination et la source (octet
ou un mot) le résultat est mis dans la destination

Destination <---------- Destination et source

39
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
• Les instructions logiques ( de bits ) :
Exemple :

mov al,10010110B
mov bl,11001101B
and al, bl

Application : masquage de bits pour mettre à zéro certains bits


dans un mot.
Exemple : masquage des bits 0, 1, 6 et 7 dans un octet :

40
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
• Les instructions logiques ( de bits ) :
• OR : (OU logique )
Syntaxe : OR Destination, source
Elle permet de faire un OU logique entre la destination et la source (octet
ou un mot) le résultat est mis dans la destination
Destination <---------- Destination ou source
Application : mise à 1 d’un ou plusieurs bits dans un mot.

Exemple : dans le mot 10110001B on veut mettre à 1 les bits 1 et 3 sans


modifier les autres bits.

Les instructions correspondantes peuvent s’écrire :


mov ah,10110001B
or ah,00001010B
41
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
• Les instructions logiques ( de bits ) :
• Complément à 2
Syntaxe : NEG opérande
L’opération effectuée est : opérande ← not(opérande) + 1.
Exemple :
mov al,25
mov bl,12 → AL = 25 + (−12) = 13
neg bl
add al,bl
• XOR : ( OU exclusif ) Syntaxe : XOR Destination, source
Elle permet de faire un OU exclusif logique entre la destination et la
source (octet ou un mot) le résultat est mis dans la destination
Destination <------------ Destination ⊕ source
Exemple : mise à zéro d’un registre :
mov al,25
xor al,al → AL = 0
42
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
• Les instructions logiques ( de bits ) :
•TEST :
Syntaxe TEST Destination, source
Elle permet de faire un ET logique entre la destination et la source (octet
ou un mot) mais la destination ne sera pas touchée en effet cette
instruction ne touche que les indicateurs.

Exemples :

MOV AX, 503H ; AX = 0000 0101 0000 0011


TEST AX, 0201H ; 0000 0101 0000 0011

Elle va effectuer un ET logique entre le premier nombre et le second


s a n s to u c h er l es d eu x , m a i s el l e v a a f f ec ter u n i q u em e n t l e s
indicateurs (Flags)

43
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
•Les instructions de décalages et de rotations

ces instructions déplacent d’un certain nombre de positions les bits


d’un mot vers la gauche ou vers la droite.

Dans les décalages, les bits qui sont déplacés sont remplacés par des
zéros.
Il y a les décalages logiques (opérations non signées) et les décalages
arithmétiques (opérations signées).

Dans les rotations, les bits déplacés dans un sens sont réinjectés de
l’autre côté du mot.
• Décalage logique vers la droite (Shift Right) :

syntaxe: SHR opérande , n

Cette instruction décale l’opérande de n positions vers la droite.

44
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

Exemple :
mov al,11001011B
shr al,1

→ entrée d’un 0 à la place du bit de poids fort ; le bit sortant passe à


travers l’indicateur de retenue CF.

Remarque : si le nombre de bits à décaler est supérieur à 1, ce


nombre doit être placé dans le registre CL ou CX.

Exemple : décalage de AL de trois positions vers la droite :


mov cl,3
shr al,cl

45
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

• Décalage logique vers la gauche (Shift Left) :

Syntax: SHL opérande,n

Cette instruction décale l’opérande de n positions vers la droite.

Exemple :
mov al,11001011B
shl al,1

→ entrée d’un 0 à la place du bit de poids faible ; le bit sortant


passe à travers l’indicateur de retenue CF.

46
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

• Applications des instructions de décalage :


• cadrage à droite d’un groupe de bits.
Exemple : on veut avoir la valeur du quartet de poids fort du registre
AL :

mov al,11001011B
→ AL = 00001100B
mov cl,4
shr al,cl

• test de l’état d’un bit dans un mot.


Exemple : on veut déterminer l’état du bit 5 de AL :

mov cl,6 Ou mov cl,3


shr al,cl shl al,cl

→ avec un décalage de 6 positions vers la droite ou 4 positions vers la


gauche, le bit 5 de AL est transféré dans l’indicateur de retenue CF. Il
suffit donc de tester cet indicateur.
47
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

• Applications des instructions de décalage :

• multiplication ou division par une puissance de 2 : un décalage à droite


revient à faire une division par 2 et un décalage à gauche, une
multiplication par 2.

Exemple :
mov al,48 → AL = 48/23 = 6
mov cl,3
shr al,cl

Les instructions de rotations


• Rotation à droite (Rotate Right)

Syntax: ROR opérande,n

Cette instruction déecale l’opérande de n positions vers la droite et


réinjecte par la gauche les bits sortant.
48
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

Exemple :
mov
al,11001011B
ror al,1
→ réinjection du bit sortant qui est copié dans l’indicateur de retenue
CF.
• Rotation à gauche (Rotate Left)

Syntax: ROL opérande,n

Cette instruction déecale l’opérande de n positions vers la gauche et


réinjecte par la droite les bits sortant.

49
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

Exemple :
mov al,11001011B
rol al,1

→ réinjection du bit sortant qui est copié dans l’indicateur de retenue


CF.
Exemple :
Si on veut faire quatre rotations de Ou encore :
suite on a deux solutions : MOV CL,4
ROR AL,1 ROR AL,CL
ROR AL,1
ROR AL,1
ROR AL,1

50
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

Instructions de sauts (de branchement)


Les instructions de branchement (ou saut) permettent de modifier
l’ordre d’exécution des instructions du programme en fonction de
certaines conditions. Il existe 3 types de saut :

• saut inconditionnel ;
• sauts conditionnels ;
• appel de sous-programmes.

ØInstruction de saut inconditionnel


Syntax: JMP label

Cette instruction effectue un saut (jump) vers le label spécifié. Un label


(ou étiquette) est une représentation symbolique d’une instruction en
mémoire :

51
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086

Exemple :
boucle : inc ax → boucle infinie
dec bx
jmp boucle

52
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Instructions de sauts
conditionnels : Syntax: Jcondition label
Un saut conditionnel n’est exécuté que si une certaine condition est
satisfaite, sinon l’exécution se poursuit séquentiellement à l’instruction
suivante.
La condition du saut porte sur l’état de l’un (ou plusieurs) des
indicateurs d’état (flags) du microprocesseur :

IP = IP + déplacement

53
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Remarque : les indicateurs sont positionnés en fonction du résultat de la
dernière
opération.

Remarque : il existe un autre type de saut conditionnel, les sauts


arithmétiques. Ils suivent en général l’instruction de comparaison :
CMP opérande1,opérande2
Exemple :
cmp ax,bx
jg superieur
jl inferieur

superieur : . . .
...
inferieur : . . .
54
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Exemple d’application des instructions de sauts conditionnels :

o n v e u t a d d i t i o n n e r d e u x n o m b re s s i g n é s N 1 e t N 2 s e t ro u v a n t
respectivement aux offsets 1100H et 1101H. Le résultat est rangé à l’offset
1102H s’il est positif, à l’offset 1103H s’il est négatif et à l’offset 1104H s’il
est nul :

55
cours architecture des ordinateurs - Naoufel GUEDDAH
La programmation en assembleur du
microprocesseur 8086
Les instructions de boucle

Syntax: LOOP : (boucle)

Elle décrémente le contenu de CX de 1.


Si CX est différente de zéro alors IP = IP + déplacement
Si CX = 0 l'instruction suivante est exécutée.

Exemple :
MOV AX, 05
MOV CX, 05
Debut: INC AX
CX<>0
LOOP debut
CX==0 MOV BX, AX

L'exécution de l'instruction MOV BX, AX sera faite après


l'exécution de la boucle 5 fois.

56
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Le programme que l'on désire traduire en langage machine (on dit
assembler) doit être placé dans un fichier texte (avec
l'extension .ASM sous DOS).

La saisie du programme source au clavier nécessite un programme


appelé éditeur de texte.

L'opération d'assemblage traduit chaque instruction du programme


source en une instruction machine. Le résultat de l'assemblage est
enregistré dans un fichier avec l'extension .OBJ (fichier objet).

Le fichier .OBJ n'est pas directement exécutable. En effet, il arrive


fréquemment que l'on construise un programme exécutable à partir
de plusieurs fichiers sources. Il faut (relier) les fichiers objets à l'aide
d'un utilitaire nommé éditeur de lien (même si l'on a qu'un seul).
L'éditeur de liens fabrique un fichier exécutable, avec l'extension .EXE.
Le fichier .EXE est directement exécutable. Un utilitaire spécial du
système d'exploitation (DOS ici), le chargeur est responsable de la
lecture du fichier exécutable, de son implantation en mémoire
principale, puis du lancement
du programme. 57
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Donc en conclusion pour assembler un programme on doit passer
par les phases suivantes :
- Saisie du code source avec un éditeur de texte.
- Compiler le programme avec un compilateur.
-Editer les liens pour avoir un programme exécutable.
Les trois phases sont schématisées par la figure suivante :

58
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Le fichier source (code source)
Comme tout programme, un programme écrit en assembleur
(programme source) comprend des définitions, des données et des
instructions, qui s'écrivent chacune sur une ligne de texte.

Les données sont déclarées par des directives, mots clefs spéciaux
que comprend l'assembleur (donc ils sont destinés à l'assembleur. Les
instructions (sont destinées au microprocesseur)
1 ) Les instructions :
La syntaxe des instruction est comme suit :
{Label :} Mnémonique {opérande} { ; commentaire}

Exemple : ET1 : MOV AX , 500H ; mettre la valeur 500 dans le


registre AX

- Le champ opérande est un champ optionnel selon l'instruction


(parfois l'instruction nécessite une opérande et parfois non).

- Le champ commentaire : champ sans signification syntaxique et


sémantique pour l'assembleur , il est optionnel mais très intéressant
59
lorsque on programme en assembleur
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Le fichier source (code source)
2 ) Les directives :
Po u r p ro g r a m m er en a s s em b l eu r , o n d o i t u t i l i s e r , e n p l u s d e s
instructions assembleur, des directives ou pseudo-instructions :

Une directive est une information que le programmeur fournit au


compilateur. Elle n'est pas transformée en une instruction en langage
machine. Elle n'ajoute donc aucun octet au programme compilé.

Donc les directives sont des déclarations qui vont guider l'assembleur.

Une directive est utilisée par exemple pour créer de l'espace


mémoire pour des variables, pour définir des constantes, etc...
Pour déclarer une directive il faut utiliser la syntaxe suivante :
{Nom} Directive {opérande} { ; commentaire}

Le champ opérande dépend de la directive


Le champ commentaire a les mêmes propriétés vues dans le paragraphe
précèdent.
Le champ Nom indique le nom des variables : c'est un champ optionnel
60
(selon la directive). cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
3 /Exemple de directives
Les directives de données
• EQU :
Syntaxe : Nom EQU Expression
Exemples :
VAL EQU 50 ; assigne la valeur 50 au nom VAL
ET1 EQU VAL* 5 + 1 ; assigne une expression calculer a VAL

• DB/DW/DD/DF/DP/DQ/DT:
Ces directives sont utilisées pour déclarer les variables : L'assembleur
attribue à chaque variable une adresse.

Dans le programme, on repère les variables grâce à leurs noms. Les


noms des variables sont composés d'une suite de 31 caractères au
maximum, commençant obligatoirement par une lettre.

Le nom peut comporter des majuscules, des minuscules, des chiffres,


plus les caractères @, et _.

Lors de la déclaration d'une variable, on peut lui affecter une valeur 61


initiale. cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
3 /Exemple de directives
Les directives de données
a° ) DB (Define byte):
définit une variable de 8 bits : c a d elle réserve un espace mémoire
d'un octet : donc les valeurs qu'on peut stocker pour cette directive
sont comprises entre 0 et 255 ( pour les nombres non signés ) et de -
128 jusqu'à 127 pour les nombres signés .
Syntaxe : Nom DB Expression
Exemple :
Vil DB 12H ; Définit une variable (un octet) de valeur Initiale 12.

Tab DB 18H, 15H, 13H ; définit un tableau de 3 cases 3 octet)


;Qui démarre à partir de l'adresse TAB.

Mess DB ‘FSS' ; définit aussi un tableau mais les valeurs de chaque


;case n'est autre que le code ascii de chaque lettre.

Name DB ? ; définit une variable 8 bits de valeur initiale


;quelconque .
62
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Exemple de directives
Les directives de données

b° ) DW ( define word) : définit une variable de 16 bits : c a d elle


réserve un espace mémoire d'un mot : donc les valeurs qu'on peut
stocker pour cette directive sont comprises entre 0 et 65535 ( pour
les nombres non signés ) et de -32768 jusqu'à 32767 pour les
nombres signés
Syntaxe : Nom DW Expression
63
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Exemple de directives
Les directives de données
Exemple :
TT1 DW 500H ; réserve deux cases mémoire (un mot) a partir
;de l'adresse TT1.
TAB1 DW 10H,11H,14H ; réserve uu tableau de 6 cases chaque valeur
;sera mise sur deux cases
YY DW ? ; réserve un mot dans la mémoire de valeur
initial ; quelconque.

64
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Exemple de directives
Les directives de données
c° ) DD : (Define Double) : réserve un espace mémoire de 32 bits ( 4
cases mémoire ou 4 octets ) :
Syntaxe : nom DD expression
Exemple :
ff DD 15500000H

d) Directive dup

Lorsque l'on veut déclarer un tableau de n cases, toutes initialisées à la


même valeur, on utilise la directive dup:

tab DB 100 dup (15) ; 100 octets valant 15

y DW 10 dup (?) ; 10 mots de 16 bits non initialises

65
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Exemple de directives
Les directives de segment

Syntaxe de la directive SEGMENT :


Nom SEGMENT opérande
.
.
Nom ENDS

66
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
TITLE nom ; donner un nom au programme
PILE SEGMENT STACK ; déclaration d’un segment de pile
; dont le nom est pile
..........
..........
PILE ENDS ; fin de la déclaration de la pile

DONNEE SEGMENT ; déclaration d’un segment de données qui va


; contenir les variables
...........
DONNEE ENDS ; fin de la déclaration de données

LECODE SEGMENT ; déclaration du segment de code qui va contenir le


code
Debut: ; étiquette d’indication du point d’entrée du code
MOV AX,DATA
MOV DS, AX
.................................
.................................
MOV AH, 4Ch
INT 21h
LECODE ENDS ; fin de la déclaration du code
END Debut ; fin du point d’entrée du code 67
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086

L’équivalent de quelques instructions du


langage C en assembleur

• if then else Assembleur


If ax =1 if: CMP AX, 1
bx = 10; JNZ Else
else {
bx = 0; Then: MOV BX,10
cx = 10; JMP endif
} Else: MOV BX,0
MOV CX,10
endif: ..............

68
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086

L’équivalent de quelques instructions du


langage C en assembleur
• La boucle FOR Assembleur
• For (k=0; k<=10; k++) MOV BX,0
• bx = bx + k; MOV CX,0
For: CMP CX,10
JA Endfor
ADD BX,CX
INC CX
JMP For
Endfor:

69
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086

L’équivalent de quelques instructions du


langage C en assembleur

• WHILE Assembleur
• bx = 5 MOV BX,5
• while (bx >0) while: CMP BX,0
bx = bx -1; JLE Endwhile
DEC BX
JMP while
Endwhile:

70
cours architecture des ordinateurs - Naoufel GUEDDAH
Applications de quelques
instructions sur des
exemples

71
cours architecture des ordinateurs - Naoufel GUEDDAH
TITLE prog1.asm: Exemple sur CMP, Trouver l’octet le plus grand parmi 5 notes d’élèves

PILE segment stack


dw 100 dup(?)
PILE ends
;-----------------------------------------------------------------------------------------------------------------------------
--------------------------------
DATA segment
NOTES DB 18, 06, 19, 11, 08
PLUS_G DB ?
DATA ends
;-----------------------------------------------------------------------------------------------------------------------------
-------------------------------
CODE segment
main:
assume CS:CODE, DS:data ; génération de l’adresse du segment de code et de données
MOV AX, DATA ; Initialiser le registre DS pour récupérer l’adresse du
segment de donnée
MOV DS, AX
MOV CX, 5 ; compteur de boucle
MOV BX, OFFSET NOTES ; BX pointe vers les données NOTES
XOR AL, AL ; Initialise AL à 0; va héberger la plus grande note
ENCORE: CMP AL, [BX] ; compare la note prochaine a la note la plus élevée
JA PROCHAIN ; Sauter si AL est encore la note la plus élevée
MOV AL, [BX] ; sinon AL retient la plus élevée
PROCHAIN: INC BX ; pointe vers la prochaine note
LOOP ENCORE ; CX décrémente jusqu’à 0 pour sortir de la LOOP
MOV PLUS_G, AL ; sauvegarde de la note la plus élevée dans PLUS_G
;-----------------------------------------------------------------------------------------------------------------------------
--------------------------------
MOV AH, 4Ch
INT 21h
MAIN ENDS
END MAIN
72
cours architecture des ordinateurs - Naoufel GUEDDAH
TITLE prog2.asm: Exemple sur ROL, Trouver le nombre de ‘1’ dans un mot
Pile segment stack ; déclaration d’un segment de pile – pas nécessaire dans notre cas
dw 100 dup(?)
Pile ends
;-----------------------------------------------------------------------------------------------------------------------------
-------------------------------
DATA segment
DATA1 DW 5F97H
COMPTE DB ?
DATA ends
;-----------------------------------------------------------------------------------------------------------------------------
--------------------------------
CODE segment
MAIN:
ASSUME CS:CODE, DS:DATA
MOV AX,DATA
MOV DS, AX
XOR BL, BL ; Mettre BL à 0 (ou bien SUB)
MOV DL, 16 ; rotation 16 fois
MOV AX, DATA1
ENCORE: ROL AX, 1 ; Rotation a gauche (a droite aussi si on préfère)
JNC PROCHAIN ; Test si CF=0
INC BL ; Si CF = 1, incrémenter le compteur du nombre de ‘1’
PROCHAIN: DEC DL ; répéter 16 fois
JNZ ENCORE ; encore une fois si ce n’est pas fini
MOV COMPTE, BL ; sauvegarder le résultat dans la case mémoire COMPTE
;-----------------------------------------------------------------------------------------------------------------------------
-------------------------------
MOV AH, 4Ch
INT 21h
MAIN ENDS
END MAIN

73
cours architecture des ordinateurs - Naoufel GUEDDAH
Conversion Minuscule en
Majuscule
L Hex Binaire L Hex Binaire

A 41 01000001 a 61 01100001

B 42 01000010 b 62 01100010

. ………… . …………

. ………… . …………

Y 59 01011001 y 79 01111001

Z 5A 01011010 z 7A 01111010

74
cours architecture des ordinateurs - Naoufel GUEDDAH
TITLE prog8.asm ; Conversion MINUSCULE MAJUSCULE d’un texte
PILE SEGMENT STACK
DW 100 DUP (?)
PILE ENDS
DATA SEGMENT
TEXTE1 DB ‘mOn Nom eST REBainE’, 13,10, ‘$’
TEXTE2 DB 21 DUP(?)
;-----------------------------------------------------------------------------------------------------------------------------------------------
-------------
CODE SEGMENT
ASSUME CS:SCODE, DS:DATA
; Initialiser le registre DS
MAIN : MOV AX, DATA MOV DS, AX
MOV SI, OFFSET TEXTE1 ; SI pointe sur le texte original
MOV BX, OFFSET TEXTE2 ; BX pointe sur le texte en MAJUSCULE
MOV CX, 21 ; compteur de boucle
ARRIERE: MOV AL, byte ptr [SI] ; prochain caractère
CMP AL, 61H ; Si < ‘a’ (61H est le code ASCII de ‘a’)
JB PASSE ; donc pas besoin de convertir
CMP AL, 7AH ; Si > ‘z’ (7AH est le code ASCII de ‘z’)
JA PASSE ; donc pas besoin de convertir
AND AL, 11011111B ; masque le bit 5 pour convertir en MAJUSCULE
PASSE: MOV [BX], AL ; sauvegarde le caractère MAJUSCULE
INC SI ; incrémente le “pointeur vers le texte original”
INC BX ; incrémente le “pointeur vers le texte en MAJUSCULE”
LOOP ARRIERE ; Continuer à boucler tant que CX > 0
;------------------------------------------------------------------------------------------------------------------------------------------------
------------
MOV AX, 4C00h
INT 21h
CODE ENDS
END MAIN

75
cours architecture des ordinateurs - Naoufel GUEDDAH
Exemple 8 : parcours d'un tableau
;Ce programme passe une chaîne de caractères en majuscules. La fin de la chaîne est repérée par un
caractère $. On utilise un ET logique pour masquer le bit 5 du caractère et le passer en majuscule
(voir le code ASCII).

Title parcours
pile segment stack
dw 100 dup (?)
pile ends
data SEGMENT
tab DB "Un boeuf Bourguignon"
data ENDS
code SEGMENT
ASSUME DS:data, CS:code
debut: MOV AX, data
MOV DS, AX

mov cx, 21
MOV BX, offset tab ; adresse debut tableau
repet: MOV AL, [BX] ; lit 1 caractère

AND AL, 11011111b ; force bit 5 à zero


MOV dl, AL ; range le caractère
mov Ah, 02h
int 21h

INC BX
loop repet ; passe au suivant
; sinon recommencer
fin : MOV AH, 4CH
INT 21H ; Retour au DOS
code ENDS
END debut
76
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Appels système

Le système DOS (Disk Operating System) repose sur le BIOS,


il appelle les fonctions du BIOS pour interagir avec le matériel

Les fonctions du DOS s'utilisent comme celles du BIOS, via des vecteurs
d'interruptions

fonctionnalités de plus haut niveau que le BIOS (entrées/sorties,


ouverture de fichiers sur disque, etc.)

Les fonctions du DOS s'appellent à l'aide du vecteur 21H

La valeur du registre AH permet d'indiquer quelle est la fonction que l'on


appelle :

MOV AH, numero_fonction


INT 21H

fonction 4CH du DOS = terminer un programme et de revenir à


l'interpréteur de commandes DOS :
MOV AH, 4CH 77
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Fonctions du DOS
• Pour réaliser les opérations standards (affichage, saisie), le
système d’exploitation (ici DOS) fournit les fonctions pré-
écrites suivantes:

• Affichage d’un caratère: mov DL, “A”; caractère A est transfére


dans DL
mov AH, 2; fonction no. 2
int 21h ; appel au DOS

• Affichage d’une chaine de caractères:


mov DX, offset chaine ; pointe vers l’adresse du premier
caractère de la chaîne de caractères
mov AH, 09h ; fonction no. 9
int 21h;
• Saisie d’un caratère: mov AH, 1; fonction no. 1
(avec écho) int 21h ; résultat est mis dans AL

78
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Fonctions du DOS

• Saisie d’un caractère mov AH, 7; fonction no. 7


(sans écho) int 21h ; résultat dans AL

• Arrêt de programme: mov AX, 4C00h;


int 21h;

À mettre à la fin de chaque fin programme; c’est l’équivalent


du return (0) en C. Ces instructions ont pour effet de
retourner au DOS

79
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086
Fonctions du DOS

Numéro Fonction

01H Lecture caractère met le code ascii lu dans AL


02H Affiche caractère code ascii dans registre DL
09H Affiche chaîne de car DX=adresse début chaîne,
terminée par '$'
0BH Lit état clavier met AL=1 si caractère, 0 sinon.

Ce programme lit un caractère au clavier et l'affiche en


majuscule :

MOV AH, 01H ; code fonction DOS


INT 21H ; attente et lecture d'un
caractère
AND AL, 11011111b ; passe en majuscule
MOV DL, AL ;
MOV AH, 02H ; code fonction affichage
INT 21H ; affiche le caractère
80
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086

Affichage d'un octet en binaire : afficher la valeur contenue dans


un registre 8 bits (BL).
L'idée est d'utiliser un masque BL AND 10000000 pour tester le bit de
gauche, et de décaler BL à gauche pour parcourir ainsi tous les bits.

mov BL, 10 ; on teste le prog avec BL=10


mov CX,8 ; compteur de boucle
masque: Test BL, 10000000b
JNZ bit1
bit0: Mov DL,"0"
jmp affiche
bit1: Mov DL,"1"
affiche: movAH,2 ; affichage
int 21h
SHL BL,1
Loop masque
fin:
mov ah,4Ch
int 21h
81
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086

CALL : notion de procédure :


La notion de procédure en assembleur correspond à celle de fonction
en langage C, ou de sous-programme dans d'autres langages.

La procédure est nommée calcul. Après l'instruction B, le processeur


passe à l'instruction C de la procédure, puis continue jusqu'à rencontrer
RET et revient à l'instruction D.

Une procédure est une suite d'instructions effectuant une action


précise, qui sont regroupées par commodité et pour éviter d'avoir à les
écrire à plusieurs reprises dans le programme.
82
cours architecture des ordinateurs - Naoufel GUEDDAH
Structure d’un programme assembleur 8086

CALL : notion de procédure :


Les procédures sont repérées par l'adresse de leur première instruction,
à laquelle on associe une étiquette en assembleur.

L'exécution d'une procédure est déclenchée par un programme


appelant. Une procédure peut elle-même appeler une autre procédure,
et ainsi de suite.
Instructions CALL et RET
L'appel d'une procédure est effectué par l'instruction CALL.

CALL adresse_debut_procedure

L'adresse est sur 16 bits, la procédure est donc dans le même


segment d'instructions. CALL est une nouvelle instruction de
branchement
inconditionnel. La fin d'une procédure est marquée par l'instruction
RET :

83
cours architecture des ordinateurs - Naoufel GUEDDAH

Vous aimerez peut-être aussi