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 Eclipse 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
ACCUEIL ASSEMBLEUR FORUM ASSEMBLEUR FAQ ASSEMBLEUR LIVRES ASSEMBLEUR
TROISIEME PARTIE

LE LANGAGE ASSEMBLEUR


    9. Les instructions de manipulation des flags

    a) l’instruction CLC (« Clear Carry flag »)

Syntaxe : CLC

Description : Met CF à 0.

Indicateurs affectés : CF

    b) l’instruction STC (« Set Carry flag »)

Syntaxe : STC

Description : Met CF à 1.

Indicateurs affectés : CF

    c) l’instruction CLD (« Clear Direction flag »)

Syntaxe : CLD

Description : Met DF à 0.

Indicateurs affectés : DF

    d) l’instruction STD (« Set Direction flag »)

Syntaxe : STD

Description : Met DF à 1.

Indicateurs affectés : DF

    e) l’instruction CLI (« Clear Interrupt flag »)

Syntaxe : CLI

Description : Met IF à 0.

Indicateurs affectés : IF

    f) l’instruction STI (« Set Interrupt flag »)

Syntaxe : STI

Description : Met IF à 1.

Indicateurs affectés : IF

    g) l’instruction CMC (« Complement Carry flag »)

Syntaxe : CMC

Description : Inverse CF.

Indicateurs affectés : CF

    h) l’instruction LAHF (« Load AH from Flags »)

Syntaxe : LAHF

Description : Charge dans AH l’octet de poids faible du registre des indicateurs.

    i) l’instruction SAHF (« Store AH into Flags »)

Syntaxe : SAHF

Description : Stocke les bits de AH dans le registre des indicateurs.

    10. Les instructions de gestion de la pile

    a) l’instruction PUSH (« Push Word onto Stack »)

Syntaxe : PUSH Source

Description : Empile le mot Source. SP est décrémenté de 2.

Remarques : Source ne peut être une valeur immédiate. Il est possible d’abréger votre code source en écrivant par exemple “PUSH AX BX BP”. Le compilateur écrira alors trois fois l’instruction PUSH du langage machine. Il est possible également d’empiler des doubles mots.

    b) l’instruction POP (« Pop Word off Stack »)

Syntaxe : POP Destination

Description : Dépile le mot qui se trouve au sommet de la pile et le place dans Destination. SP est incrémenté de 2.

    c) l’instruction PUSHF (« Push Flags onto Stack »)

Syntaxe : PUSHF

Description : Empile le registre des indicateurs. SP est décrémenté de 2.

Remarque : PUSHFD empile le registre des indicateurs codé sur 32 bits.

    d) l’instruction POPF (« Pop Flags off Stack »)

Syntaxe : POPF

Description : Dépile le mot qui se trouve au sommet de la pile et le place dans le registre des indicateurs. SP est incrémenté de 2.

Indicateurs affectés : Tous

Remarque : POPFD est utilisé pour un registre des indicateurs codé sur 32 bits.

    e) l’instruction PUSHA (« Push All registers onto Stack »)

Syntaxe : PUSHA

Description : Empile AX, BX, CX, DX, BP, SI, DI et SP.

Remarque : PUSHAD est utilisé pour des registres de 32 bits.

    f) l’instruction POPA (« Pop All registers off Stack »)

Syntaxe : POPA

Description : Restaure AX, BX, CX, DX, BP, SI, DI et SP à partir de la pile.

Remarque : POPAD est utilisé pour des registres de 32 bits.

    11. Les instructions de gestion des chaînes d’octets

    a) l’instruction MOVSB (« Move String Byte »)

Syntaxe : MOVSB

Description : Copie l’octet adressé par DS:SI à l’adresse ES:DI. Si DF = 0, alors DI et SI sont ensuite incrémentés, sinon ils sont décrémentés.

Remarque : Pour copier plusieurs octets, faire REP MOVSB (« Repeat Move String Byte »). Le nombre d’octets à copier doit être transmis dans CX de même que pour un LOOP.

Exemple :

    b) l’instruction SCASB (« Scan String Byte »)

Syntaxe : SCASB

Description : Compare l’octet adressé par ES:DI avec AL. Les résultats sont placés dans le registre des indicateurs. Si DF = 0, alors DI est ensuite incrémenté, sinon il est décrémenté.

Remarques : Pour comparer plusieurs octets, faire “REP SCASB” ou “REPE SCASB” (« Repeat until Egal »), ou encore “REPZ SCASB” (« Repeat until Zero »). Ces trois préfixes sont équivalents.
Le nombre d’octets à comparer doit être transmis dans CX. La boucle ainsi créée s’arrête si CX = 0 ou si le caractère pointé par ES:DI est le même que celui contenu dans AL (i.e. si ZF = 1). On peut ainsi rechercher un caractère dans une chaîne.
Pour répéter au contraire la comparaison jusqu’à ce que ZF = 0, c’est-à-dire jusqu’à ce que AL et le caractère adressé par ES:DI diffèrent, utiliser REPNE ou REPNZ.

Exemple :

    c) l’instruction LODSB (« Load String Byte »)

Syntaxe : LODSB

Description : Charge dans AL l’octet adressé par DS:SI. Si DF = 0, alors SI est ensuite incrémenté, sinon il est décrémenté.

Remarque : Possibilité d’utiliser les préfixes de répétition, de même que pour MOVSB.

    d) l’instruction STOSB (« Store String Byte »)

Syntaxe : STOSB

Description : Stocke le contenu de AL dans l’octet adressé par ES:DI. Si DF = 0, alors DI est ensuite incrémenté, sinon il est décrémenté.

Remarque : Possibilité d’utiliser les préfixes de répétition, de même que pour LODSB.

    e) l’instruction CMPSB (« Compare String Byte »)

Syntaxe : CMPSB

Description : Compare l’octet adressé par DS:SI et celui adressé par ES:DI. Si DF = 0, alors SI et DI sont ensuite incrémentés, sinon ils sont décrémentés.

Remarque : Possibilité d’utiliser les préfixes de répétition, de même que pour SCASB.



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.