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

x86 32-bits / 64-bits Assembleur Discussion :

[Masm32] Adressage direct


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par défaut [Masm32] Adressage direct
    Bonjour à tous,

    cette instruction existe !
    registre de segment utilisé ... DS ... par défaut !
    Code machine de cette instruction : 8B 0D 44 33 22 11

    Masm32 refuse de compiler cette instruction.
    Je suis obligé de lui préciser le registre de segment, et de lui proposer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mov eax , ds : [11223344h]
    alors il accepte !

    Comment faire pour lui faire accepter

    mov eax, [11223344h] ... directement,
    comme je ferais pour une variable,
    mov eax , [variable]

    J'espère m'être fait comprendre,
    pas toujous évident en quelques lignes.

    Merci à tous et Joyeux Noel à tous

  2. #2
    Membre Expert
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Par défaut
    Bonsoir,

    Quel est le problème ? pourquoi ne veux-tu pas préciser l'utilisation du registre
    segment ?

    En même temps, c'est "preque" logique car quand tu utilises un nom de variable, cette dernière est définie dans un segment alors que là, ta valeur
    immédiate peut concerner n'importe quel segment

    a+ François

  3. #3
    Membre confirmé Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par défaut


    Le problème n'est pas un problème de "résultat",
    mais de fonctionnement du compilateur dans l'absolu.

    Les 2 instructions suivantes existent et sont différentes.
    Elles correspondent au niveau processeur à du code machine différent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov eax , [11223344h]
    et
    mov eax , ds : [11223344h]
    Il est assez fou que masm quand je lui propose ceci ...
    qui est tout d'même sans aucune équivoque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mov eax , dword ptr [11223344h]
    il m'encode quoi ?
    et bien il ne bronche pas et m'encode ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mov eax , 11223344h !!!!!
    Il zappe complètement le "dword ptr" !
    J'ai planté la machine ici avec ce genre de n'importe quoi.
    J'ai du "tracer" pour me rendre compte de la bétise du compilo !
    moi, j'appelle "ça" un bug !

    Ceci dit, je viens de me rendre compte que masm ne supporte pas les
    instructions SSE2 et suivantes !

    Pas question de demaner à masm d'encoder un
    "sysenter", "fsave", "emms" ... il ne connait pas !
    et moi, j'utilise ça.

    Masm est en fait un vieux compilo qui n'est plus tenu à jour par Micosoft.

    Je suis en train de regarder Fasm.

    Fasm ne me pose aucun soucis quand je lui présente :
    mov eax , dword ptr [11223344h] ... bein oui ... allons !!!
    Et il connait toutes les instructions SSEx.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 055
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Il ne s'agit pas d'un bug : MASM exige que le segment soit précisé lors d'un adressage direct avec adresse effective explicite (et pas avec une adresse symbolique).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov eax,DS:[11223344h] ; "DS:" exigé
    mov eax,Trucmuche      ; DS est le segment implicite
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Bonjour,

    Quand on définit une variable avec MASM, par exemple comme ça :
    On a l'habitude d'y accéder comme ça :
    Mais comme ça ça marche aussi :
    En gros MASM n'a pas une syntaxe cohérente, des fois il faut des [] pour faire un accès mémoire, des fois pas, et dans le cas que tu donnes même avec des [] il ne génère pas d'accès mémoire.

    Citation Envoyé par - Robby - Voir le message
    Ceci dit, je viens de me rendre compte que masm ne supporte pas les
    instructions SSE2 et suivantes !
    MASM32 contient une vieille version de MASM (pour des raisons de droit je crois).
    La version de MASM qui est dans le SDK et le DDK de Microsoft doit supporter les jeux d'instructions récents, mais pas grand-chose (rien ?) n'est fourni pour développez uniquement en assembleur.
    Et il n'y a pas moyen de bêtement prendre le ml.exe du SDK et de le mettre à la place de celui de MASM32, j'ai essayé et il buggait sur windows.inc.


    Citation Envoyé par - Robby - Voir le message
    Je suis en train de regarder Fasm.
    Excellent choix !

    Citation Envoyé par - Robby - Voir le message
    Fasm ne me pose aucun soucis quand je lui présente :
    mov eax , dword ptr [11223344h]
    Normalement avec FASM on met soit les crochets, soit le ptr. Chez moi ça ne marche pas en mettant les deux mais c'est peut-être parce que j'ai une vieille version.

  6. #6
    Membre confirmé Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par défaut
    Pour Alcatîz :

    Quand je demande au compilateur de masm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mov eax , dword ptr [11223344h]
    et qu'il me génère

    sans aucun message d'erreur et sans broncher.
    Si, déso, c'est un bug !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mov eax, dword ptr [11223344h]
    est sans aucune équivoque et est universel sur toute la planète.

    Si masm "voit" les choses autrement,
    Le minimum aurait été de refuser la compilation et de me le signaler.
    Pas de me compiler un truc qui ne correspond en rien à la demande.


    J'ai du tracer pour m'en rendre compte.
    Respect à tous ceux qui "aiment" masm ... mais là ... !!!

    Pour Dapounet :

    j'ai la dernière version de Fasm.
    Oui ... chez moi aussi ... c'est soit "ptr", soit les "crochets".


    voilou

Discussions similaires

  1. différence entre adressage direct et immédiat ?
    Par Ziineb dans le forum Assembleur
    Réponses: 2
    Dernier message: 02/12/2012, 03h11
  2. Accès direct au disque dur
    Par Berdo dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/01/2003, 16h21
  3. Direct Graphics
    Par Blustuff dans le forum DirectX
    Réponses: 9
    Dernier message: 28/10/2002, 04h19
  4. Hors série PCTEAM sur Direct 3D
    Par Shakram dans le forum DirectX
    Réponses: 1
    Dernier message: 12/10/2002, 16h34
  5. La communauté Direct X est au repos?
    Par Shakram dans le forum DirectX
    Réponses: 21
    Dernier message: 18/07/2002, 23h32

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