Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
FORUM ASSEMBLEUR FAQ ASSEMBLEUR LIVRES ASSEMBLEUR
TROISIEME PARTIE

LE LANGAGE ASSEMBLEUR


    7. Les instructions arithmétiques

    a) l’instruction INC (« Increment »)

Syntaxe : INC Destination

Description : Incrémente Destination.

Indicateurs affectés : AF, OF, PF, SF, ZF

Exemple : INC CL

    b) l’instruction ADD (« Addition »)

Syntaxe : ADD Destination, Source

Description : Ajoute Source à Destination

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

Exemple : ADD byte ptr [VARIABLE + DI], 5

    c) l’instruction ADC (« Add with Carry »)

Syntaxe : ADC Destination, Source

Description : Ajoute (Source + CF) à Destination.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

    d) l’instruction DEC (« Decrement »)

Syntaxe : DEC Destination

Description : Décrémente Destination.

Indicateurs affectés : AF, OF, PF, SF, ZF

    e) l’instruction SUB (« Substract »)

Syntaxe : SUB Destination, Source

Description : Soustrait Source à Destination.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

    f) l’instruction SBB (« Substract with Borrow »)

Syntaxe : SBB Destination, Source

Description : Soustrait (Source + CF) à Destination.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

    g) l’instruction MUL (« Multiply »)

Syntaxe : MUL Source

Description : Effectue une multiplication d’entiers non signés.

  • Si Source est un octet : AL est multiplié par Source et le résultat est placé dans AX.

  • Si Source est un mot : AX est multiplié par Source et le résultat est placé dans DX:AX.

  • Si Source est un double mot : EAX est multiplié par Source et le résultat est placé dans EDX:EAX.

Indicateurs affectés : CF, OF

Remarque : Source ne peut être une valeur immédiate.

Exemples : MUL CX

MUL byte ptr [TOTO]

    h) l’instruction IMUL (« Integer Multiply »)

Syntaxe : IMUL Source

IMUL Destination, Source

IMUL Destination, Source, Valeur

Description : Effectue une multiplication d’entiers signés.

IMUL Source :

  • Si Source est un octet : AL est multiplié par Source et le résultat est placé dans AX.

  • Si Source est un mot : AX est multiplié par Source et le résultat est placé dans DX:AX.

  • Si Source est un double mot : EAX est multiplié par Source et le résultat est placé dans EDX:EAX.

IMUL Destination, Source : Multiplie Destination par Source et place le résultat dans Destination.

IMUL Destination, Source, Valeur : Multiplie Source par Valeur et place le résultat dans Destination.

Indicateurs affectés : CF, OF

    i) l’instruction DIV (« Divide »)

Syntaxe : DIV Source

Description : Effectue une division euclidienne d’entiers non signés.

  • Si Source est un octet : AX est divisé par Source, le quotient est placé dans AL et le reste dans AH.

  • Si Source est un mot : DX:AX est divisé par Source, le quotient est placé dans AX et le reste dans DX.

  • Si Source est un double mot : EDX:EAX est divisé par Source, le quotient est placé dans EAX et le reste dans EDX.

Indicateurs affectés : AF, OF, PF, SF, ZF

Remarque : Source ne peut être une valeur immédiate.

    j) l’instruction IDIV (« Integer Divide »)

Syntaxe : IDIV Source

Description : Effectue une division euclidienne d’entiers signés.

  • Si Source est un octet : AX est divisé par Source, le quotient est placé dans AL et le reste dans AH.

  • Si Source est un mot : DX:AX est divisé par Source, le quotient est placé dans AX et le reste dans DX.

  • Si Source est un double mot : EDX:EAX est divisé par Source, le quotient est placé dans EAX et le reste dans EDX.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

    k) l’instruction NEG (« Negation »)

Syntaxe : NEG Destination

Description : Forme le complément à 2 de Destination, i.e. prend l’opposé de Destination.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

Remarque : A ne pas confondre avec NOT, qui forme le complément à 1.

    8. Les instructions logiques

    a) l’instruction NOT (« Logical NOT »)

Syntaxe : NOT Destination

Description : Effectue un NON logique bit à bit sur Destination (i.e. chaque bit de Destination est inversé).

    b) l’instruction OR (« Logical OR »)

Syntaxe : OR Destination, Source

Description : Effectue un OU logique inclusif bit à bit entre Destination et Source. Le résultat est stocké dans Destination.

Indicateurs affectés : CF, OF, PF, SF, ZF

Remarque : Afin d’optimiser la taille et les performances du programme, on peut utiliser l’instruction “OR AX, AX” à la place de “CMP AX, 0”.
En effet, un OU bit à bit entre deux nombres identiques ne modifie pas Destination et est exécuté « infiniment » plus rapidement qu’une soustraction. Comme les flags sont affectés, les sauts conditionnels sont possibles.

    c) l’instruction AND (« Logical AND »)

Syntaxe : AND Destination, Source

Description : Effectue un ET logique bit à bit entre Destination et Source. Le résultat est stocké dans Destination.

Indicateurs affectés : CF, OF, PF, SF, ZF

    d) l’instruction TEST (« Test for bit pattern »)

Syntaxe : TEST Destination, Source

Description : Effectue un ET logique bit à bit entre Destination et Source. Le résultat n’est pas conservé, donc Destination n’est pas modifié. Seuls les flags sont affectés.

Cet opérateur est souvent utilisé pour tester certains bits de Destination.

Indicateurs affectés : CF, OF, PF, SF, ZF

Exemple :

    e) l’instruction XOR (« Exclusive logical OR »)

Syntaxe : XOR Destination, Source

Description : Effectue un OU logique exclusif bit à bit entre Destination et Source. Le résultat est stocké dans Destination.

Indicateurs affectés : CF, OF, PF, SF, ZF

Remarque : Pour remettre un registre à zéro, il est préférable de faire “XOR AX, AX” que “MOV AX, 0”. En effet, le résultat est le même mais la taille et surtout la vitesse d’exécution de l’instruction sont très largement optimisées.

    f) l’instruction SHL (« Shift logical Left »)

Syntaxe : SHL Destination, Source

Description : Décale les bits de Destination de Source positions vers la gauche. Les bits les plus à droite sont remplacés par des zéros.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

Exemple : SHL AX, 4 ;permet de multiplier par 16 de façon infiniment plus rapide que MUL

Mnémonique équivalent : SAL (« Shift Arithmetical Left »)

    g) l’instruction SHR (« Shift logical Right »)

Syntaxe : SHR Destination, Source

Description : Décale les bits de Destination de Source positions vers la droite. Les bits les plus à gauche sont remplacés par des zéros.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

Mnémonique équivalent : SAR (« Shift Arithmetical Right »)

    h) l’instruction ROL (« Rotate Left »)

Syntaxe : ROL Destination, Source

Description : Effectue une rotation des bits de Destination de Source positions vers la gauche. Le dernier bit à être sorti à gauche et à être rentré à droite est placé dans CF. OF est mis à 1 si et seulement si le signe de Destination a changé.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

    i) l’instruction ROR (« Rotate Right »)

Syntaxe : ROR Destination, Source

Description : Effectue une rotation des bits de Destination de Source positions vers la droite. Le dernier bit à être sorti à droite et à être rentré à gauche est placé dans CF. OF est mis à 1 si et seulement si le signe de Destination a changé.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

    j) l’instruction RCL (« Rotate through Carry Left »)

Syntaxe : RCL Destination, Source

Description : Effectue une rotation des bits de Destination de Source positions vers la gauche. CF est utilisé comme intermédiaire : chaque bit qui sort à gauche est placé dans CF, et le contenu de CF est ensuite réinséré à droite. OF est mis à 1 si et seulement si le signe de Destination a changé.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF

    k) l’instruction RCR (« Rotate through Carry Right »)

Syntaxe : RCR Destination, Source

Description : Effectue une rotation des bits de Destination de Source positions vers la droite. CF est utilisé comme intermédiaire : chaque bit qui sort à droite est placé dans CF, et le contenu de CF est ensuite réinséré à gauche. OF est mis à 1 si et seulement si le signe de Destination a changé.

Indicateurs affectés : AF, CF, OF, PF, SF, ZF



Sommaire

Suite



Responsables bénévoles de la rubrique Assembleur : Nicolas Vallée (gorgonite) et Guillaume Rossolini (Yogui) - Contacter par EMail :
Vos questions techniques : forum d'entraide Assembleur - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.