Vous êtes sur la page 1sur 4

Chapitre 3 : Le langage Assembleur

1. Le langage assembleur

L’assembleur est très proche du langage machine (le langage qu'utilise l'ordinateur : des
informations en binaire, soit des 0 et des 1). Il dépend donc fortement du type de processeur.
Ainsi il n'existe pas un langage assembleur, mais un langage assembleur par type de
processeur. Un processeur réel a toutefois trop de registres et d'instructions pour pouvoir les
étudier en détail. C’est pour cette raison que nous allons étudier dans ce cours un assembleur
fictif (pseudo code ou pseudo assembleur) avec quelques instructions très rudimentaires.

1.1 Les registres


Comme nous l’avons déjà cité dans le chapitre architecture des ordinateurs, un registre est une
petite mémoire, donc à accès très rapide, qui sert à stocker temporairement une donnée, une
adresse…
Nous allons utiliser dans notre pseudo code les registres suivants:

A : registre désignant l’accumulateur, il va contenir le résultat des opérations.


R1, R2,……..Rn : des registres généraux, utilisés selon le besoin, pour stocker temporairement
une information. Chaque registre peut avoir une fonction particulière implicite selon
l'instruction utilisée.

1.2 Le jeu d’instructions


Il y a 2 opérandes au plus (dans notre pseudo code), elles servent de paramètres. Si le résultat
est calculé, le premier opérande va contenir ce résultat. Une instruction a généralement donc,
le format suivant :

Code instruction 1er opérande 2eme opérande

Le 1er opérande est soit l’accumulateur soit un autre registre, le deuxième opérande est soit un
registre (pouvant être l’accumulateur), soit le contenu d’une adresse mémoire.

Le jeu d’instructions retenu est le suivant :

LD : (Load=charger) c’est une opération de chargement d’une donnée qui s’effectue, par le
processeur, de la mémoire vers le registre accumulateur.

ST : (Store= ranger) c’est une opération de rangement d’une donnée qui s’effectue, par le
processeur, du registre accumulateur vers la mémoire.
ADD : (ADD= additionner) ajoute une valeur ou le contenu d’un registre (pouvant être
l’accumulateur lui-même), au contenu de l’accumulateur.

SUB : (SUB= soustraire) retranche une valeur ou le contenu d’un registre (pouvant être
l’accumulateur lui-même), au contenu de l’accumulateur.

MUL : (MUL= multiplier) multiplie le contenu de l’accumulateur par une valeur ou le


contenu d’un registre (pouvant être l’accumulateur).

DIV : (DIV= diviser) divise le contenu de l’accumulateur par une valeur (différente de zéro)
ou le contenu d’un registre (pouvant être l’accumulateur).

INC : (INC= incrémenter) rajoute le nombre « 1 » au contenu de l’accumulateur ou à celui


d’un registre.

DEC (DEC=Décrémenter) retranche le nombre « 1 » au contenu de l’accumulateur ou à celui


d’un registre.

MOV : (MOV= déplacer) déplace ou transfert le contenu d’un registre R1 (R1 pouvant être
l’accumulateur) vers un registre R2 (R2 pouvant être l’accumulateur) s’effectue toujours de
gauche à droite.

CMP : (CMP= comparer) compare le contenu de l’accumulateur ou d’un autre registre.

JP : (JP= jump= sauter) se fait selon une condition, après une opération de comparaison
CMP, vers une étiquette (label).

Exemple d’utilisation des instructions :

Instruction Fonction
LD A (X)  charger le contenu de l’adresse mémoire X vers l’accumulateur

ST A (X)  Ranger le contenu de l’accumulateur vers l’adresse mémoire X.

ADD A 6  Ajoute 6 au contenu de l’accumulateur

SUB A R2  enlève le contenu de R2 du contenu de l’accumulateur

MUL A 7  multiplie le contenu de l’accumulateur par 7

DIV A R1 divise le contenu de l’accumulateur par le contenu de R1


INC R3  ajoute « 1 » au contenu de R3.

DEC A  ôte 1 au contenu de l’accumulateur (équivaut à SUB A 1).

MOV A R4  transfert le contenu de l’accumulateur vers le fichier R4

CMP R5  Compare le contenu de R5.

JP Z Label1  Si contenu de R5 est égal à zéro, se brancher à Label1

JP NZ Label2  Si contenu de R5 est différent de zéro, se brancher à Label2.

Considérons maintenant, l’exemple illustratif suivant:

Supposons que nous voulons doubler le contenu de l’adresse (19).

Le processeur lit l’instruction et la décode;


Le processeur va demander le contenu de l’adresse (19) à la mémoire ;
La valeur lue est alors rangée dans l’accumulateur;
L’UAL va multiplier la valeur contenue dans l’accumulateur par 2 ;
La valeur obtenue (contenue dans l’accumulateur) est alors stockée à l’adresse (19).

Le code assembleur correspondant est le suivant :

Code instruction 1er opérande 2eme Remarques


opérande
LD A (19) On charge le contenu de (19) dans
l’accumulateur
MUL A 2 Apres la multiplication, le résultat est
stocké dans l’accumulateur
ST A (19) Le contenu de A est rangé dans la
même case d’adresse

Remarque : L’instruction (MUL A 2) peut être remplacée par (ADD A A).

Exemple2 :

Soit à écrire le code Assembleur qui permet de calculer l’expression suivante, puis de la
sauvegarder à l’adresse (Z) :

Z= 3 X3 + Y - 1
X3 - Y + 1

Remarque : Il est préférable de calculer le dénominateur avant le numérateur, pour gagner en


nombre d’instructions.
Code 1ere opérande 2eme opérande Explications
instruction
LD A (Y) Charge la valeur Y se trouvant à l’adresse (Y)
dans l’accumulateur.
MOV A R1 Transfert la valeur Y dans le registre R1

LD A (X) Charge la valeur X se trouvant à l’adresse (X)


dans l’accumulateur
MOV A R2 Transfert la valeur X dans R2

MUL A A Multiplie X par X on obtient X2

MUL A R2 Multiplie X2 par X on obtient X3

MOV A R2 Transfert X3 dans R2

SUB A R1 Effectue X3 – Y

ADD A 1 On obtient X3 - Y +1

MOV A R3 On transfert le dénominateur dans R3

MOV R2 A On transfert le contenu de R2 (c.-à-d. X3) dans


l’accumulateur
MUL A 3 Multiplie X3 par 3 on obtient 3X3

ADD A R1 Ajoute le contenu de R1 (c.-à-d. Y) à 3X3 on


obtient 3X3 + Y
DEC A On obtient 3X3 + Y – 1

DIV A R3 On divise 3X3 + Y – 1 par le contenu de R3 qui


contient le dénominateur, on obtient :
(3X3 + Y – 1) / (X3 - Y +1)
ST A (Z) On range le résultat à l’adresse mémoire (Z)

2. Références et bibliographies

Cours d’initiation aux microprocesseurs et aux microcontrôleurs


http://www.polytech-lille.fr/~rlitwak/Cours_MuP/sc00a.htm

X-86 secret
http://www.x86-secret.com/

Vous aimerez peut-être aussi