IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Différence entre LEA et OFFSET


Sujet :

Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Par défaut Différence entre LEA et OFFSET
    Bonjour, j'apprends l'assembleur avec MASM depuis un bout de temps, et je me demandais quelle différence il y a réellement entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lea <registre>, <variable>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mov <registre>, OFFSET <variable>
    .

    Nombre de cycles différents, ou autre chose?

  2. #2
    ALT
    ALT est déconnecté
    Membre Expert
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 374
    Par défaut
    mov <registre>, OFFSET <variable>
    • Charge dans le registre la valeur contenue dans la case mémoire d'adresse segment:déplacement où déplacement est la valeur contenue dans la variable.
      Quant au segment, il est par défaut contenu dans DS.

    lea <registre>, <variable>
    • Charge l'adresse contenue dans variable vers le registre.
      Autrement dit, le registre contiendra une adresse & non une valeur.


    Voilà.

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    Citation Envoyé par ALT
    Charge dans le registre la valeur contenue dans la case mémoire d'adresse segment:déplacement où déplacement est la valeur contenue dans la variable.
    Je crois que tu fais erreur ALT. Dans le cas précis donné par le posteur original, LEA charge l'adresse de la variable, pas la valeur.

    Les deux instructions sont similaires. LEA possède toutefois un octet supplémentaire pour encoder l'instruction (octet de Modr/m).

    Code Asm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    .data?
    Donnee DWORD ?
     
    .code
    LEA eax, Donnee
    MOV eax, offset Donnee
     
    ; les deux font la même chose : charger l'adresse de "Donnee" dans EAX.

    Sous certains processeurs LEA dispose d'un "reciprocal throughpout" de 0.25, ce qui fait théoriquement que l'on peut exécuter 4 opérations de ce type en un seul cycle d'horloge. Sous d'autres le RT de LEA est équivalent à celui de MOV (RT = 1).

  4. #4
    Membre éprouvé
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Par défaut
    Sous certains processeurs LEA dispose d'un "reciprocal throughpout" de 0.25, ce qui fait théoriquement que l'on peut exécuter 4 opérations de ce type en un seul cycle d'horloge. Sous d'autres le RT de LEA est équivalent à celui de MOV (RT = 1).
    Selon ce que tu dis, donc, LEA est toujours <= à un cycle d'horloge?
    Du coup, selon le processeur évidemment, ça serait toujours plus avantageux d'utiliser LEA que MOV...OFFSET?

  5. #5
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Citation Envoyé par Stormy_Ordos
    Selon ce que tu dis, donc, LEA est toujours <= à un cycle d'horloge?
    C'est dépendant du processeur et uniquement pour le reciprocal throughpout. Il faut que les instructions qui suivent LEA soit alors de la même "famille". Il y a d'autres règles qui entrent en jeux, par exemple le phénomène d'AGI stall qui peux faire baisser les performances, dépendances, mise en cache, etc. le RT de 0.25 pour LEA est quand les conditions sont maximales (et cela dépend du processeur qui exécute le code).

    Du coup, selon le processeur évidemment, ça serait toujours plus avantageux d'utiliser LEA que MOV...OFFSET?
    Dans des conditions standards, LEA s'exécutera dans le même temps que MOV. Suivant le processeur et les conditions, LEA peut aller "plus vite". Tout dépend donc des conditions, donc impossible de généraliser.

  6. #6
    Membre éprouvé
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Par défaut
    Ok merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  2. Réponses: 5
    Dernier message: 11/12/2002, 12h31
  3. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 08h25
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo