Section courante

A propos

Section administrative du site

Assembleur 80x86

ENTER

INTEL 80186+ Enter

Syntaxe

ENTER taille,niveau

Description

Cette instruction permet de gérer des langages de programmation de haut niveau. La commande ENTER permet de créer les structures de paramètres nécessaires aux procédures des langages de haut niveau (Pascal, C, C++, C# (C Sharp),...). taille indique le nombre d'octets devant être réserves dans la pile pour la procédure. niveau indique le nombre niveau d'imbrication de la procédure, c'est-à-dire que le nombre de structures de paramètres devant être imbriquées dans la pile.

Remarques

Algorithme

MODULE ENTER(Size,NestingLevel)
   NestingLevel ← NestingLevel ∩ 1Fh
   SI OperandSize = 64 bits ALORS
      PUSH RBP
      FrameTemp RSP
   SINON SI OperandSize = 32 bits ALORS
      PUSH EBP
      FrameTemp ESP
   SINON
      PUSH BP
      FrameTemp SP
   FIN SI
   SI NestingLevel > 0 ALORS
      BOUCLE POUR i ← 1 JUSQU'A (NestingLevel - 1) FAIRE
         SI OperandSize = 64 ALORS
            RBP ← RBP - 4
            PUSH [RBP]
         SINON SI OperandSize = 32 ALORS
            SI StackSize = 32 bits ALORS
               EBP ← EBP - 4
               PUSH [EBP]
            SINON
               BP ← BP - 4
               PUSH [BP]
            FIN SI
         SINON
            SI StackSize = 32 bits ALORS
               EBP ← EBP - 2
               PUSH [EBP]
            SINON
               BP ← BP - 2
               PUSH [BP]
            FIN SI
         FIN SI
      FIN BOUCLE POUR
      SI OperandSize = 64 ALORS
         PUSH FrameTemp
      SINON OperandSize = 32 ALORS
         PUSH FrameTemp
      SINON
         PUSH FrameTemp
      FIN SI
   FIN SI
   SI StackSize = 64 bits ALORS
      RBP ← FrameTemp
      RSP ← RSP - Size
   SINON SI StackSize = 32 bits ALORS
      EBP ← FrameTemp
      ESP ← EBP - Size
   SINON
      BP ← FrameTemp
      SP ← BP - Size
   FIN SI

Mnémonique

Instruction Opcode Description
ENTER imm16, 0 C8h iw 00h Crée une procédure de cadre de pile
ENTER imm16, 1 C8h iw 01h Crée un cadre de pile pour une procédure
ENTER imm16, imm8 C8h iw ib Crée un cadre de pile pour une procédure

Exceptions

Message Mode réel Virtuel 8086 Mode protégé Description
#SS(Pile) X X X Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique
#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

L'exemple suivant permet de créer un cadre de pile pour une procédure :

  1. ENTER 12, 0

Voir également

Instruction assembleur 80x86 - Instruction LEAVE

Références

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 811
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 111 à 112.
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 384 à 390.

Dernière mise à jour : Vendredi, le 5 septembre 2014