Comment Ca Marche - Communauté informatique  
   
Accueil - Encyclopédie informatiqueTélécharger l'encyclopédieContribuer à cet article

L'assembleur - Instructions arithmétiques et logiques

Instructions arithmétiques et logiques en assembleur Encyclopédie


Les instructions arithmétiques et logiques sont effectuées par l'unité arithmétique et logique. Il s'agit d'opérations directement effectuées sur les bits de la donnée que l'on traite.

Sont comprises dans cette appellation :

  • les instructions d'addition
  • les instructions de soustraction
  • les instructions de décalage
  • les instructions de rotation
  • les instructions logiques (ET, OU, ...)

Les opérations arithmétiques et logiques modifient l'état des indicateurs.

Instructions d'addition

Les opérations arithmétiques se font de la même façon en binaire qu'en base décimale. C'est-à-dire que lorsque l'on dépasse la valeur maxi au niveau du bit n (lorsque l'on dépasse la valeur 1) on a une retenue ou un report au bit n+1.

Voyons cela sur un exemple :

  0 0 0 1
+ 0 0 0 1
  - - - -
  0 0 1 0

Sur un exemple un peu plus compliqué  :

  0 0 1 0
+ 0 0 1 1
  - - - -
  0 1 0 1

Décalage et rotation

Ces instructions permettent de décaler d'un côté ou de l'autre les bits des registres accumulateurs (AX et BX, et donc AH, AL, BH, BL). Cette opération qui semble inutile a en fait plusieurs applications très intéressantes, dont :

  • permettre de lire un à un les bits du registre (car les bits sortant à gauche positionnent l'indicateur de retenue CR)
  • permettre une multiplication par 2n (en effet le fait de décaler un nombre binaire d'un chiffre à gauche le multiplie par 2, ainsi en effectuant cette opération n fois on obtient une multiplication par 2n)

  • exemple :
    00010 (2 en décimale)
    00100 (on décale à gauche on obtient 4)
    01000 (on décale à gauche à nouveau, on obtient 8)
  • permettre une division par 2n (comme précédemment mais en effectuant une rotation sur la droite)

Une opération de décalage déplace chacun des bits d'un nombre binaire sur la gauche (ou la droite), mais ceux-ci sortent, c'est-à-dire qu'ils sont définitivement perdus, lorsqu'ils arrivent au bit de poids fort (ou de poids faible).
exemple :
0001110000
0011100000 (on décale d'un bit à gauche)
0111000000 (on décale d'un bit à gauche)
1110000000 (on décale d'un bit à gauche)
1100000000 (on décale d'un bit à gauche)
1000000000 (on décale d'un bit à gauche)

Une opération de rotation agit comme une opération de décalage à la différence près que les bits qui sortent d'un côté rentrent de l'autre...
exemple :
0001110000
0011100000 (on effectue une rotation d'un bit à gauche)
0111000000 (on effectue une rotation d'un bit à gauche)
1110000000 (on effectue une rotation d'un bit à gauche)
1100000001 (on effectue une rotation d'un bit à gauche)
1000000011 (on effectue une rotation d'un bit à gauche)

Les opérations courantes de rotation et de décalage sont les suivantes :

  • RCL registre, 1 (Rotate Carry Left) :
    Effectue une rotation des bits sur la gauche en passant par l'indicateur de retenue CF. Le contenu de CF est introduit à droite, puis le bit de poids fort est copié dans CF.
  • RCR registre, 1 (Rotate Carry Right) :
    Effectue une rotation des bits sur la droite en passant par l'indicateur de retenue CF. Le contenu de CF est introduit à gauche, puis le bit de poids faible est copié dans CF.
  • ROL registre, 1 (Rotate Left) :
    Effectue une rotation des bits sur la gauche. Le bit de poids fort est copié dans CF et réintroduit à droite.
  • ROR registre, 1 (Rotate Right) :
    Effectue une rotation des bits sur la droite. Le bit de poids faible est copié dans CF et réintroduit à gauche.
  • SHL registre, 1 (Shift Left) :
    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 mais ne sont pas réintroduits à droite).
  • SHR registre, 1 (Shift Right) :
    Décale les bits du registre indiqué de 1 bit vers la droite. (Les bits sortants sont transférés dans l'indicateur de retenue CF mais ne sont pas réintroduits à gauche).

Les instructions RCL et RCR permettent de faire une lecture bit-à-bit du contenu du registre.
Les instructions SHL et SHR permettent de faire une multiplication par 2n sur des entiers naturels (pas sur des entiers relatifs car le bit de poids fort disparaît dès la première rotation).

Instructions logiques

Les instructions logiques sont au nombre de trois (ET, OU et OU Exclusif). Elles permettent de faire des opérations bit-à-bit sur des nombres binaires (c'est-à-dire en considérant chacun des bits indépendamment des autres, sans se soucier de la retenue).

Ce type d'instruction se note de la manière suivante :
INSTRUCTION destination, source
destination désigne le registre ou l'adresse de la case mémoire qui contiendra le résultat de l'opération.
source peut être aussi bien un registre, une constante ou une adresse.

  • L'instruction AND (ET) additionne les bits de même poids deux à deux et stocke le résultat dans le registre de destination. Cette instruction met donc le bit du résultat à 1 si les bits de même poids de la source et de la destination sont tous deux à 1, sinon il le met à zéro.
    exemple :
        0 1 0 1
    ET  0 1 1 0
        - - - -
        0 1 0 0
  • L'instruction OR (OU) met donc le bit du résultat à 0 si les deux bits de même poids de la source et de la destination sont tous deux à 0, sinon il le met à un.
    exemple :
        0 1 0 1
    OU  0 1 1 0
        - - - -
        0 1 1 1
  • L'instruction XOR (OU Exclusif) met le bit du résultat à 1 si un des deux bits de même poids de la source et de la destination est égal à 1 (mais pas les deux), dans les autres cas il le met à zéro.
    exemple :
        0 1 0 1
        0 1 1 0
        - - - -
        0 0 1 1

Chacune de ces instructions a de très nombreuses applications, il serait impossible de toutes les énumérer. En voici quelques-unes :

  • Masquage : Il est possible de masquer, c'est-à-dire mettre à zéro tous les bits qui ne nous intéressent pas dans un nombre. Pour cela il faut créer une valeur masque : un nombre dont les bits de poids qui nous intéressent sont à 1, les autres à 0. Il suffit alors de faire un AND entre le nombre à masquer et le masque pour ne conserver que les bits auxquels on s'intéresse.
    Par exemple, imaginons que l'on veuille masquer les 4 bits de poids faible (les 4 derniers bits) d'un nombre codé sur 8 bits (par exemple 10110101). Il suffit d'appliquer le masque 11110000, et l'on obtiendra 10110000. On ne conserve bien que les 4 premiers bits, les autres sont mis à zéro...
  • Inversion : Il est possible d'inverser tous les bits d'un nombre en faisant un XOR avec un nombre ne contenant que des 1.

Discussions pertinentes trouvées dans le forum

09/05 15h50 programmation mplab asm [programmation] MPLAB en asm Développement 12/08 09h53->sandaos2
19/09 00h29 asm x86 tableau chaines caractère [Asm x86] Tableau de chaines de caractère Développement 20/09 01h46->kilian6
28/01 10h08 version assembler asm Version d'assembler (asm) Développement 28/01 21h45->sebsauvage5
07/02 22h33 asm commencer ASM comment commencer ??? Développement 09/02 10h32->Kuching4
11/09 15h21 asm ASM en C Développement 11/09 17h24->guitoux4
25/11 17h40 asm commandes [ASM] commandes Développement 14/12 13h09->hehe4
25/02 11h57 asm du C en asm Développement 04/03 23h27->kokliko4
13/12 11h21 logiciel programmation asm windows logiciel programmation ASM pour windows Développement 14/12 11h09->markus.p3
27/07 14h09 asm Aide en ASM Développement 27/07 15h52->NX3
24/11 11h06 asm Aide ASM Développement 25/11 10h33->Hayef3
Discussion fermée Problème résolu ASM Plus de discussions sur « ASM »

Ce document intitulé « L'assembleur - Instructions arithmétiques et logiques » issu de l'encyclopédie informatique Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.