Section courante

A propos

Section administrative du site

Assembleur 80x86

LES

INTEL 8088+ Load in ES

Syntaxe

LES opérande_cible,opérande_source

Description

Cette instruction permet de copier une adresse de mémoire contenu sur 32 bits dans la paire de registre de segment ES et dans un registre d'offset spécifié.

Algorithme

Registre d'offset ← Source
Registre de segment ES ← Source + 2

Mnémonique

Instruction Opcode Description
LES reg16, mem16:16 C4h /r Charge le ES:reg16 avec un pointeur long dans la mémoire. Invalide en mode 64 bits.
LES reg32, mem16:32 C4h /r Charge le ES:reg32 avec un pointeur long dans la mémoire. Invalide en mode 64 bits.

Exceptions

Message Mode réel Virtuel 8086 Mode protégé Description
#UD(Opcode invalide) X X X L'opérande source est un registre.
    X Cette instruction est exécuté en mode 64-bits.
#NP(Sélecteur)     X Le registre DS, ES, FS ou GS est chargé avec un sélecteur de segment non-nulle et le segment est marqué comme non présent.
#SS(Pile) X X X Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique
#SS(Sélecteur) X X X Le registre SS est chargé avec un sélecteur de segment non-nulle et le segment est marqué comme non présent.
#GP(Protection général) X X X Une adresse mémoire dépasse la limite du segment de données ou n'est pas canonique
    X Un segment de données nulle est utilisé comme référence mémoire
#GP(Sélecteur) X X X Un registre de segment est chargé, mais le descripteur de segment dépasse la limite du descripteur de la table.
X X X Un registre de segment est chargé et le bit TI de sélecteur de segment est fixé, mais le sélecteur LDT est un sélecteur nulle.
X X X Le registre SS est chargé avec un sélecteur de segment nulle dans un mode 64-bits ou avec CPL = 3.
X X X Le registre SS est chargé avec un sélecteur de segment RPL et le descripteur de segment DPL n'est pas égale au CPL.
X X X Le registre SS est chargé et le pointeur de segment n'est pas dans un segment de données écrivable.
X X X Le registre DS, ES, FS ou GS n'est pas chargé et le segment pointe sur des données ou un segment de code non-conforme, mais le RPL ou CPL est supérieur au DPL.
X X X Le registre DS, ES, FS ou GS n'est pas chargé et le segment pointe sur des données ou un segment de code en lecture.
#PF(Faute de page)   X X Une faute de page résultat de l'exécution de l'instruction
#AC(Vérifie l'alignement)   X X Un désalignement de la référence mémoire est effectué quand une vérification d'alignement est activé

Exemple

Cette exemple permet de retourner dans la paire de registres DX:AX, l'heure de l'horloge étant incrémenté à tous les 18,2 par seconde. Pour se faire il utilise une méthode d'accès directe à la mémoire et prend soit de ne pas être interrompu par un IRQ. L'astuce de l'utilisation de cette instruction consiste au fait qu'il utilise une seule instruction pour un chargé double mot de 32 bits (l'instruction LES) plutôt que deux instructions MOV beaucoup plus longue en cycle d'horloge et en consommation d'octets :

  1. PUSH 0 
  2. POP ES 
  3. XOR AX,AX 
  4. MOV ES,AX 
  5. CLI 
  6. LES AX,ES:[$46C] 
  7. STI 
  8. MOV DX,ES

Cette routine est utilisé dans le coeur de la bibliothèque «RLL» de l'application «MonsterBook» par soucis de performance lorsqu'on tant de faire jouer des «.MOD» en arrière plan en même temps que le «MonsterBook» fonctionne.

Voir également

Instruction assembleur 80x86 - Instruction LDS
Instruction assembleur 80x86 - Instruction LFS
Instruction assembleur 80x86 - Instruction LGS
Instruction assembleur 80x86 - Instruction LSS

Références

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 817
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 410
AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions, Edition Advanced Micro Devices, Revision 3.14, September 2007, Publication No. 24594, page 143.
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 642 à 646.

Dernière mise à jour : Lundi, le 1 septembre 2014