Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 60

COURS PROGRAMMATION EN ASSEMBLEUR

CLASSE LFEC2

Par : Amina Kessentini


Email : Ksontini.amina @gmail.com

Année Universitaire : 2016/2017


OBJECTIFS

 Maitriser les bases de programmation en assembleur.

 Acquérir les langages d’édition, de débogage, de simulation et de


compilation

AMINA KESSENTINI HACHICHA 2


PLAN

1 Chapitre I : Architecture du processeur 8086

2 Chapitre II : Programmation en assembleur : 8086

3 Chapitre III: Architecture du microcontrôleur : 16F84

4 Chapitre IV: Programmation en assembleur : 16F84

AMINA KESSENTINI HACHICHA 3


CHAPITRE I :

ARCHITECTURE DU PROCESSEUR : 8086


PLAN

1 Architecture interne du 8086

2 Gestion et segmentation de la mémoire

3 Les registres du 8086

AMINA KESSENTINI HACHICHA 5


Architecture interne du 8086

 Il se présente sous la forme d’un boîtier DIP


(Dual In‐line Package) à 40 broches.

 Le microprocesseur i8086 se caractérise par :


- Un processeur CISC
- Structure 16 bits.
- 16 lignes de données
- 1 mot mémoire = 2 octets
- 20 lignes d’adresses
- Capacité d'adressage de 1 Mo.
- 14 registres internes de 16 bits.
- 7 modes d'adressage.
- Opérations sur des bits, des octets, des
mots et des chaînes de caractères.
- Arithmétique signée ou non signée.
- Arithmétique binaire ou BCD, sur 8 ou
16 bits.
AMINA KESSENTINI HACHICHA 6
Architecture interne du 8086

8086 se compose de 2 unités séparés

AMINA KESSENTINI HACHICHA 7


Architecture interne du 8086

L’unité d’exécution comporte:


 L’UAL
 Les registres généraux (AX, BX, CX,
DX)
 Les registres d’adressages (SP,
BP,SI,DI)
 Les registres d’état (Flags)
 Décodeur d’instructions
 Registre de données

AMINA KESSENTINI HACHICHA 8


Architecture interne du 8086

L’unité UIB comporte essentiellement :


 Une file d’attente d’instructions générée
en FIFO (First In First Out)
 Les registres de segments (CS, DS, SS,
ES)
 Compteur d’instructions ( IP) ou bien PC

AMINA KESSENTINI HACHICHA 9


Architecture interne du 8086

 Fonctions de l’UIB (Unité d'Interface de Bus)

 Elle cherche les instructions à exécuter dans la mémoire et les


stocke dans la file d'attente FIFO.
 Elle calcule les adresses physiques de la mémoire .
 Elle réalise le transfert des données avec la mémoire.

 Fonctions de l’UE (Unité d‘Exécution)

 Elle extrait les codes des instructions à partir de la file


d'attente et les exécute.
 Elle fournit les adresses des opérandes à l’UIB en nommant le
segment concerné et en fournissant le déplacement dans ce
segment.

AMINA KESSENTINI HACHICHA 10


Gestion et segmentation de la mémoire

Une case mémoire est repérée par le 8086 au moyen de deux


quantités (registres) sur 16 bits :
- L’adresse de base d’un segment
- Un déplacement ou offset (appelé aussi adresse effective)
dans
AMINA KESSENTINI ce segment.
HACHICHA 11
Gestion et segmentation de la mémoire

 La donnée d’un couple (segment, offset) définit une adresse


logique, notée sous la forme segment : offset.

 L’adresse d’une case mémoire donnée sous la forme d’une quantité


sur 20 bits (5 digits hexadécimaux) est appelée adresse physique
car elle correspond à la valeur envoyée réellement sur le bus
d’adresses.

AMINA KESSENTINI HACHICHA 12


Gestion et segmentation de la mémoire

 La correspondance entre l’adresse logique et l’adresse physique est


représentée sur la figure suivante :

 Ainsi, l’adresse physique se calcule par


l’expression :

Adresse physique
=
(16 × segment) + offset

Remarque : Injecter 4 zéros en poids faible de l’adresse du segment (en


binaire ) revient à effectuer un décalage de 4 positions (4bits) vers la gauche,
c’est-à-dire une multiplication par 16
AMINA KESSENTINI HACHICHA 13
Gestion et segmentation de la mémoire

 Exemple:
Calculer les adresses physiques à partir des adresses logiques données:
a) 08F1h : 0100h b) 3100h:27EEh

Solution (a)
@ Segment Offset
08F1 : 0100h

Le processeur prend la valeur de la partie segment et la multiplie par 16 en


décimal (par 10 hexa) puis ajoute cette valeur à la valeur de l’offset.

 Valeur de segment ajustée: 08F1 * 10 = 08F10

Valeur de segment ajustée : 0 8 F 1 0 h


Ajout de l’offset : + 0 1 0 0 h
Adresse physique : = 0 9 0 1 0 h
AMINA KESSENTINI HACHICHA 14
Les registres du 8086

De De
Généraux D’adressage
segments commande

AX SP CS IP

LES
BX BP DS
DRAPEAUX

CX SI SS

DX DI ES

AMINA KESSENTINI HACHICHA 15


Les registres du 8086
Les registres Généraux
 Les registres généraux peuvent être utilisés dans toutes les opérations
arithmétiques et logiques que le programmeur insère dans le code
assembleur
 Un registre complet présente une grandeur de 16 bits. Chaque registre est
en réalité divisé en deux registres distincts de 8 bits
De cette façon, nous pouvons utiliser une partie du registre si nous désirons y stocker
une valeur n'excédant pas 8 bits. Si, au contraire, la valeur que nous désirons y
ranger excède 8 bits, nous utiliserons le registre complet, c'est à dire 16 bits.

 Il existe 4 registres généraux : AX, BX, CX, DX

AMINA KESSENTINI HACHICHA 16


Les registres du 8086
Les registres Généraux
 Le registre AX (Accumulateur)
Les opérations faites dans ce registres sont : les opérations de transfert de
données avec les entrées‐sorties, le traitement des chaînes de caractères les
opérations arithmétiques et logiques et les conversions BCD du résultat d’une
opération arithmétique (addition, soustraction, multiplication et division) .
 Le registre BX (Registre de base)
Il est utilisé pour l'adressage de données dans une zone mémoire différente de
la zone code : en général il contient une adresse de décalage par rapport à une
adresse de référence (segment de données DS). De plus il peut servir pour la
conversion d'un code à un autre.
 Le registre CX (Le compteur)
Le registre CX a été fait pour servir comme compteur lors des instructions de
boucle.
 Le registre DX
On utilise le registre DX pour les opérations de multiplication et de
division mais surtout pour contenir le numéro d'un port d'entrée/sortie pour
adresser les interfaces d'E/S.
AMINA KESSENTINI HACHICHA 17
Les registres du 8086
Les registres d’adressage

De De
Généraux D’adressage
segments commande

AX SP CS IP

LES
BX BP DS
DRAPEAUX

CX SI SS

DX DI ES

AMINA KESSENTINI HACHICHA 18


Les registres du 8086
Les registres d’adressage
 Il existe 4 registres d’adressage de taille 16 bits (SI, DI, SP , BP).

 Ces registres sont plus spécialement adaptés au traitement des


éléments dans la mémoire,
 Ils sont utilisés pour les transferts de chaînes d’octets entre deux
zones mémoire.

 Ils contiennent des adresses de cases mémoire

 Ils sont en général munis de propriétés d'incrémentation et de


décrémentation.
AMINA KESSENTINI HACHICHA 19
Les registres du 8086
Les registres d’adressage

 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

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

 L’index SI : Source Index : il pointe sur la source.


 L'index DI (Destination index) :il pointe sur la destination.

AMINA KESSENTINI HACHICHA 20


Les registres du 8086
Les registres de segments

De De
Généraux D’adressage
segments commande

AX SP CS IP

LES
BX BP DS
DRAPEAUX

CX SI SS

DX DI ES

AMINA KESSENTINI HACHICHA 21


Les registres du 8086
Les registres de segments

 Le 8086 a quatre registres segments de 16 bits chacun :

CS (code segment)


DS (Data segment)
ES (Extra segment)
SS (Stack segment)

 Ces registres sont chargés de sélectionner les différents segments


de la mémoire en pointant sur le début de chacun d'entre eux.
 Chaque segment de mémoire ne peut excéder les 64 Ko.
AMINA KESSENTINI HACHICHA 22
Les registres du 8086
Les registres de segments
 Le registre CS (code segment) : Il pointe sur le segment qui
contient les codes des instructions du programme en cours
 Le registre DS (Data segment) : Le registre segment de données
pointe sur le segment des variables globales du programme.

 Le registre ES (Extra segment) : Le registre de données


supplémentaires ES est utilisé par le microprocesseur lorsque l'accès
aux autres registres est devenu difficile ou impossible pour modifier
des données, de même ce segment est utilisé pour le stockage des
chaînes de caractères
 Le segment SS (Stack segment) : Le registre SS pointe sur la pile :
la pile est une zone mémoire ou on peut sauvegarder les registres ou
les adresses ou les données pour les récupérer après l'exécution
d'un sous‐programme ou l'exécution d'un programme d'interruption.

AMINA KESSENTINI HACHICHA 23


Les registres du 8086
Les registres de commande

De De
Généraux D’adressage
segments commande

AX SP CS IP

LES
BX BP DS
DRAPEAUX

CX SI SS

DX DI ES

AMINA KESSENTINI HACHICHA 24


Les registres du 8086
Les registres de commande
 2 registres de 16 bits : un pointeur d’instruction et un indicateur.

 Le registre IP (Pointeur d’instruction / Le compteur de programme): Il


contient l'adresse de l'emplacement mémoire où se situe la prochaine
instruction à exécuter. Autrement dit, il doit indiquer au processeur la
prochaine instruction à exécuter. Le registre IP est constamment
modifié après l'exécution de chaque instruction afin qu'il pointe sur
l'instruction suivante.

 Le registre d'état (indicateur – Flag): sert à contenir l'état de


certaines opérations effectuées par le processeur. Le registre d'état du
8086 est formé par les bits suivants :

 6 bits d’état reflètent les résultats d'une opération arithmétique ou logique


et 3 participent au contrôle du processeur
AMINA KESSENTINI HACHICHA 25
Les registres du 8086
Les registres de commande
Les drapeaux sont des indicateurs qui annoncent une condition
particulière suite à une opération arithmétique ou logique.
Drapeaux de contrôle Drapeaux d’états
TF DF IF OF SF ZF AF PF CF

 CF (Carry Flag : Retenue) : cet indicateur est positionné à 1 lorsqu’il


y a une retenue du résultat à 8 ou 16 bits. Il intervient dans les
opérations d'additions (retenue) et de soustractions (emprunt) sur des
entiers naturels.
 PF (Parity Flag : Parité) : si le résultat de l'opération contient un
nombre pair de 1, cet indicateur est positionné à 1, sinon zéro.
 AF (Auxiliary Carry : Demie retenue) : ce bit est égal à 1 si on a
une retenue du quarter (4 bits) de poids faible dans le quarter de
poids plus fort.
AMINA KESSENTINI HACHICHA 26
Les registres du 8086
Les registres de commande

 ZF (Zero Flag : Zéro) : Cet indicateur est positionné à 1 quand le


résultat d'une opération est égal à zéro.

 SF (Sign Flag : signe) : SF est positionné à 1 si le bit de poids fort


du résultat d'une addition ou soustraction est 1 ; sinon SF = 0. SF est
utile lorsque l'on manipule des entiers signés, car le bit de poids fort
donne alors le signe du résultat.

 OF (Overflow Flag : Débordement) : si on a un débordement


arithmétique ce bit est positionné à 1, c’est à dire le résultat d'une
opération excède la capacité de l'opérande (registre ou case
mémoire), sinon il est à 0.
 DF (Direction Flag : Auto Incrémentation/Décrémentation) : utilisé
par les instructions de traitement des chaînes de caractères pour
auto incrémenter ou auto décrémenter le SI et le DI.
AMINA KESSENTINI HACHICHA 27
Les registres du 8086
Les registres de commande

 IF (Interrupt Flag : Masque d'interruption) : pour masquer les


interruptions venant de l'extérieur ce bit est mis à 0, dans le cas
contraire (IF = 1) le microprocesseur reconnaît l'interruption de
l'extérieur.

 TF (Trap Flag : Piège) : pour que le microprocesseur exécute le


programme pas à pas.

AMINA KESSENTINI HACHICHA 28


CHAPITRE II :

PROGRAMMATION EN ASSEMBLEUR : 8086


PLAN

1 Introduction

2 Codage et Mode d’adressage

3 Jeux d’instructions et exemples

AMINA KESSENTINI HACHICHA 30


Introduction
Définition

 Un programme en assembleur c’est le langage machine:


une suite d’instructions comprise par l’ordinateur

 Chaque processeur a son jeu d’instructions spécifique.

 Pour le 8086, chaque instruction est codée sur 16 bits

AMINA KESSENTINI HACHICHA


31
Introduction
Définition

 Une instruction est composée de deux champs :

• Le code opération, qui indique au processeur quelle


instruction réaliser ;
• Le champ opérande qui contient la donnée, ou la
référence à une donnée en mémoire (son adresse).

Champ code opération Champ code opérande

AMINA KESSENTINI HACHICHA


32
Modes d’adressages

 Le microprocesseur 8086 possède 7 modes d'adressage:

Mode
d’adressage

Immédiat Registre Direct Indirect

Relatif à Basé
Basé Indexé
une base indexé

AMINA KESSENTINI HACHICHA


33
Modes d’adressages
Adressage immédiat

 Le champ opérande contient la donnée (une valeur constante


sur 1 ou 2 octets).
Exemple
MOV AX,120H ; cela signifie que la valeur 120H sera
stockée immédiatement dans le
registre AX
AH AL
AX 01 20

ADD AX, 243h ; additionner le registre AX


avec le nombre hexadécimal 243
AH AL
AX 03 63
AMINA KESSENTINI HACHICHA
34
Modes d’adressages
Adressage Registre
 Ce mode d’adressage concerne tout transfert ou toute opération,
entre deux registres de même taille.
Exemple
MOV AX,BX ; cela signifie que l’opérande stockée dans le
registre BX sera transféré vers le registre AX.
AH AL AH AL
AX 00 00 AX F4 08
BH BL BH BL
BX F4 08 BX F4 08

L'opération se fait aussi sur un registre


INC AX : incrémenter le registre AX

AX 10 05 AX 10 06
AMINA KESSENTINI HACHICHA
35
Modes d’adressages
Adressage Direct

 Un des deux opérandes se trouve en mémoire.


 L’adresse de la case mémoire ou plus précisément son Offset
est précisé directement dans l’instruction.
 L’adresse Rseg:Off doit être placée entre [ ], si le segment n’est
pas précisé, DS est pris par défaut.

AMINA KESSENTINI HACHICHA


36
Modes d’adressages
Adressage Direct
Exemple1 Exemple 2
MOV BL, [1200H] MOV BL, ES: [1200H]
Copier le contenu de la Copier le contenu de la
case mémoire d'adresse mémoire ES:1200h dans BL
DS:1200H dans BL

AMINA KESSENTINI HACHICHA


37
Modes d’adressages
Adressage indirect

 Un des deux opérandes se trouve en mémoire.

 L’offset de l’adresse n’est pas précisé directement dans


l'instruction, il se trouve dans l’un des 4 registres d’offset BX,
BP, SI ou DI et c’est le registre qui sera précisé dans
l’instruction : [Rseg : Roff]. Si Rseg n'est pas spécifié, le
segment par défaut sera utilisé.
 Si le registre segment n’est pas spécifié (cas rien), alors
le processeur l’ajoute par défaut selon l’offset choisit :
Offset utilisé valeur DI SI BX BP
Registre Segment par défaut
DS SS
qui sera utilisé par le CPU

AMINA KESSENTINI HACHICHA


38
Modes d’adressages
Adressage indirect

 L’adressage indirect est divisé en 4 catégories selon le registre


d’offset utilisé.

Adressage
indirect

Relatif à Basé
Basé Indexé
une base indexé

AMINA KESSENTINI HACHICHA


39
Modes d’adressages
Adressage indirect

 L’adresse effective est le contenu d’un registre de base (BX


ou BP).
Exemple 1

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;

AMINA KESSENTINI HACHICHA


40
Modes d’adressages
Adressage indirect
b. Adressage relatif à une base
 l’adresse effective est le contenu d’un registre de base (BX
ou BP) avec un déplacement constant.
Exemple

MOV AL,[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

AMINA KESSENTINI HACHICHA


41
Modes d’adressages
Adressage indirect
c. Adressage indexé
 L’offset se trouve dans l’un des deux registres d’index SI ou
DI. On peut préciser un déplacement qui sera ajouté au
contenu de Ri pour déterminer l’offset,
Exemple

MOV AX, [SI] ; Charger AX par le contenu de la mémoire


d'adresse DS :SI

MOV AX, [SI+500] ; Charger AX par la mémoire d'adresse


DS :SI+500

MOV AX, [DI-8] ; Charger AX par la mémoire d'adresse


DS:DI-8
MOV AX, [ES:SI+4] ; Charger AX par la mémoire d'adresse
ES:SI+4
AMINA KESSENTINI HACHICHA
42
Modes d’adressages
Adressage indirect

d. Adressage basé indexé


 L'offset de l’adresse de l'opérande est la somme d'un registre
de base, d'un registre d'index et d'un déplacement optionnel.
 Si Rseg n'est pas spécifié, le segment par défaut du registre
de base est utilisé:

NST R , [Rseg : Rb+Ri+dep]


INST [Rseg : Rb+Ri+dep] , R
INST taille [Rseg : Rb+Ri+dep] , im

AMINA KESSENTINI HACHICHA


43
Jeu d’instructions
Les instructions de transfert

 Syntaxe: MOV destination, source

Copie l'opérande Source dans l'opérande Destination


MOV R1 , R2 ; copier un registre dans un autre
MOV R , M ; copier le contenu d’une case mémoire
dans un registre
MOV M , R ; copier un registre dans une case mémoire

MOV R , im ; copier une constante dans un registre

MOV taille M , im ; copier une constante dans une


case mémoire(taille = BYTE ou WORD)

 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).

MOV M , M
AMINA KESSENTINI HACHICHA
44
Jeu d’instructions
Les instructions de transfert
 Syntaxe: PUSH Opérande

Empiler l’opérande Op (Op doit être un opérande 16 bits)

- Décrémente SP de 2
- Copie Op dans la mémoire pointée par SP PUSH im

PUSH R16
PUSH word [adr] PUSH R8

 Syntaxe: POP Opérande

Dépiler dans l’opérande Op (Op doit être un opérande 16 bits)

POP R16 POP R8


POP word M

AMINA KESSENTINI HACHICHA


45
Jeu d’instructions
Les instructions arithmétiques

 Syntaxe: ADD Opérande 1 , Opérande 2

Additionne l'opérande source et l'opérande destination avec résultat


dans l'opérande destination.

Opérande 1  Opérande 1 + Opérande 2


Exemples :

ADD AX,123 ; ajoute la valeur 123h au contenu de l’accumulateur AX

ADD AX,BX ; ajoute le contenu de registre BX à celui de registre AX

ADD [123],AX ; ajoute le contenu de l’accumulateur AX à celui de


la case mémoire d’offset 123H

ADD BX,[SI] ; ajoute le contenu de la case mémoire pointée par SI


au registre BX
AMINA KESSENTINI HACHICHA
46
Jeu d’instructions
Les instructions arithmétiques

 Syntaxe: ADC Opérande 1 , Opérande 2

Additionne l'opérande source, l'opérande destination et le retenue


(curry) avec résultat dans l'opérande destination

Opérande 1  Opérande 1 + Opérande 2 + retenue

Remarque : Le retenue est stockée dans le drapeau CF

 Syntaxe: INC Opérande Incrémente l'opérande

Opérande  Opérande + 1

Remarque : Pour incrémenter une case mémoire, il faut préciser la taille :


INC byte [ ] ; INC word [ ]

AMINA KESSENTINI HACHICHA


47
Jeu d’instructions
Les instructions arithmétiques

 Syntaxe: SUB Opérande 1 , Opérande 2


Soustrait l'opérande source et l'opérande destination avec résultat
dans l'opérande destination.

Opérande 1  Opérande 1 – Opérande 2

Exemples :
SUB AX,BX ; AX = AX – BX  soustrait le contenue de
registre BX de AX

 Syntaxe: SBB Opérande 1 , Opérande 2

Soustrait l'opérande source et le retenue de l'opérande destination


avec résultat dans l'opérande destination.

Opérande 1  Opérande 1 – Opérande 2 – retenue


AMINA KESSENTINI HACHICHA
48
Jeu d’instructions
Les instructions arithmétiques

 Syntaxe: DEC Opérande

Décrémente l'opérande

Opérande  Opérande – 1

Remarque : On ne peut pas décrémenter une valeur immédiate.

Exemples :

DEC AX ; AX = AX - 1 (décrémentation sur 16 bits).

DEC [SI] ; [SI] = [SI] – 1  le contenu de la case


mémoire pointé par SI sera
décrémenter

AMINA KESSENTINI HACHICHA


49
Jeu d’instructions
Les instructions arithmétiques

 Syntaxe: NEG Opérande

Donne le complément à 2 de l'opérande Op : remplace Op par


son négatif

Opérande  CA2 (Opérande)

Opérande  0 – Opérande

Elle soustrait l’opérande destination (octet ou mot) de 0 le résultat est stocker


dans la destination, donc avec cette opération on réalise le complément à deux
d’un nombre .
Exemples :
NEC AX ; AX = 0 - AX
NEC [SI] ; [SI] = 0 -[SI]
AMINA KESSENTINI HACHICHA
50
Jeu d’instructions
Les instructions arithmétiques
 Syntaxe: CMP Opérande 1, Opérande 2

Compare (soustrait) les opérandes Op1 et Op2 et positionne les


drapeaux en fonction du résultat. L’opérande Op1 (destination)
n’est pas modifié.
Attention à la
différence avec SUB
L’opération effectuée est : Opérande 1 – Opérande 2

 Cette instruction touche uniquement les indicateurs suivants : AF, CF, OF,
PF, SF, ZF

AMINA KESSENTINI HACHICHA


51
Jeu d’instructions
Multiplication
 Syntaxe: MULT Opérande

Instruction à un seul opérande. Elle effectue une multiplication


non signée entre l'accumulateur (AL ou AX) et l'opérande Op.
Le résultat de taille double est stocké dans l'accumulateur et
son extension (AH:AL ou DX:AX)

MUL Op8 AX  AL x Op8


MUL Op16 DX:AX  AX x Op16

 L'opérande Op ne peut pas être une donnée, c’est soit un registre soit une position
mémoire, dans ce dernier cas, il faut préciser la taille (byte ou word)

AMINA KESSENTINI HACHICHA


52
Jeu d’instructions
Multiplication

 Syntaxe: MULT Opérande


Exemples :
MUL BL AX  AL x BL
MUL CX DX:AX  AX x CX
MUL Byte [BX] AX  AL x (octet pointé par BX)

MUL Byte [BX] DX: AX  AL x (word pointé par BX)

MUL im MUL AX, R MUL AX, im

 Les drapeaux C et O sont positionnés si la partie haute du résultat est non


nulle. La partie haute est AH pour la multiplication 8 bits et DX pour
la multiplication 16 bits

AMINA KESSENTINI HACHICHA


53
Jeu d’instructions
Multiplication

 Syntaxe: IMULT Opérande


(Integer Multiply ) Identique à MUL excepté qu'une multiplication
signée est effectuée

- Opérande sur 8 bits alors il sera multiplié par AL, le résultat est sur 16 bits stocké
dans le registre AX.
- Opérande sur 16 bits alors il sera multiplié par AX, le résultat est de 32 bits stocké
dans (DX,AX).

Exemples :

MOV AL, -2
MOV AH,10
AX = -20
IMUL AH;

AMINA KESSENTINI HACHICHA


54
Jeu d’instructions
Division

 Syntaxe: DIV Opérande

Effectue la division AX/Op8 ou (DX|AX)/Op16 selon la taille de Op


qui doit être soit un registre soit une mémoire. Dans le dernier cas il
faut préciser la taille de l’opérande, exemple : DIV byte
[adresse] ou DIV word [adresse].

Opération sur 8 bits Opération sur 16 bits


DIV Op8 ; AX /Op8 DIV Op16 ; DX:AX /Op16

AL  Quotient AX  Quotient
AH  Reste DX  Reste

AMINA KESSENTINI HACHICHA


55
Jeu d’instructions
Division
 Syntaxe: DIV Opérande
- Op16 ne peut pas être une donnée (immédiat). DIV 125h
- Après la division, l'état des indicateurs est indéfini.
- Le dépassement de la capacité est du quotient est signalé par la génération
automatique de l’interruption de type zéro ZF.
- La division par 0 déclenche une erreur.
- Dans le cas où le diviseur est en mémoire, il faut indiquer la taille:
DIV byte [200], (AX / byte [200])

DIV word [200], (DX:AX / word [200])

 Syntaxe: DIV Opérande

Elle effectue une division signée de l’accumulateur par l’opérande


source
AMINA KESSENTINI HACHICHA
56
Jeu d’instructions
Les instructions logiques

 Syntaxe: NOT Opérande

Complément à 1 de l'opérande Opérande

X NOT X
0 1
1 0

Exemple :

MOV AX, 500 ; AX = 0000 0101 0000 0000

NOT AX ; AX = 1111 1010 1111 1111

AMINA KESSENTINI HACHICHA


57
Jeu d’instructions
Les instructions logiques
 Syntaxe: AND Od , Os

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.

X Y X and Y
0 0 0
Od  Od ET Os = Op . Os 0 1 0
1 0 0
1 1 1
Exemple :
MOV AX , 503H ; AX = 0000 0101 0000 0011
AND AX , 0201H;
0000 0101 0000 0011
AND 0000 0010 0000 0001
= 0000 0000 0000 0001
AMINA KESSENTINI HACHICHA
58
Jeu d’instructions
Les instructions logiques
 Syntaxe: OR Od , Os

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.

X Y X OR Y
0 0 0
Od  Od OR Os = Op + Os 0 1 1
1 0 1
1 1 1
Exemple :
MOV AX , 503H ; AX = 0000 0101 0000 0011
AND AX , 0201H;
0000 0101 0000 0011
OR 0000 0010 0000 0001
= 0000 0111 0000 0011
AMINA KESSENTINI HACHICHA
59
Jeu d’instructions
Exemple d’instruction de décalage

 Syntaxe: SHR Registre , 1

(SHift Logical Left ) décalage logique à gauche de k bits

Décale les bits du registre indiqué de 1 bit vers la gauche.


Les bits sortants sont transférés dans l'indicateur de retenue CF.

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.

60

Vous aimerez peut-être aussi