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 :

[64 bits]Afficher le contenu du registre RAX en hexa


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut [64 bits]Afficher le contenu du registre RAX en hexa
    Bonjour à tous.
    Le monde 64 bits est plein de surprises . En voilà une que je ne digère pas très bien et je me demande ce qui se passe. J'ai du rater une ligne dans la doc...
    J'ai créé une fonction qui affiche le contenu de RAX en hexa. Tout simplement, je tourne de 32 bits, j'affiche EAX, je retourne de 32 bits et raffiche EAX. Pour afficher EAX, même principe : je tourne de 16 bits et affiche AX, puis retourne de 16bits et raffiche AX. Et rebelote jusqu'aux 4 bits de poids faible de AL. Voilà ce que ça donne avec le code fourni.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    000000B7 48C1C820                affRAX	ror	rax,32
    000000BB E804000000              	call	affEAX
    000000C0 48C1C020                	rol	rax,32
    000000C4 48C1C810                affEAX	ror	rax,16
    000000C8 E804000000              	call	affAX
    000000CD 48C1C010                	rol	rax,16
    000000D1 66C1C808                affAX	ror	ax,8
    000000D5 E804000000              	call	affAL
    000000DA 66C1C008                	rol	ax,8
    000000DE C0C804                  affAL	ror	al,4
    000000E1 E803000000              	call	aff4
    000000E6 C0C004                  	rol	al,4
    000000E9 50                      aff4	push	rax
    000000EA 240F                    	and	al,0xF
    000000EC 0430                    	add	al,48
    000000EE 3C3A                    	cmp	al,58
    000000F0 7202                    	jb	.la
    000000F2 0407                    	add	al,7
    000000F4 AA                      .la	stosb
    000000F5 B02E                    	mov	al,0x2E
    000000F7 AA                      	stosb
    000000F8 58                      	pop	rax
    000000F9 C3                      	ret
    Bon, le truc marrant, c'est que si je remplace les lignes 4, 5 et 6 par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    affEAX	ror	eax,16
            call	affAX
            rol	eax,16
    donc tout simplement les rax par des eax (ce qui suffit puisque je ne m’intéresse qu'aux 32bits), hé bien le poids fort du RAX se retrouve à 0 ! En d'autres termes, le ror eax (ou le rol eax) me vire les 32 bits forts de RAX.
    Hum... C'est-y normal ?!?
    PS : je précise que l'assembleur est NASM et que je fais tourner ça une fois passé en BITS 64 fonctionnel (j'arrive à écrire des trucs à l'écran, la pagination est correcte, etc.) , le tout sous VirtualBox.
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut
    Bon, je vois que le débat ne passionne pas les foules
    J'aurais pourtant bien aimé avoir un avis d'expert : bug, ou pas bug ?
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Bonsoir,

    Citation Envoyé par Thorna Voir le message
    Bon, je vois que le débat ne passionne pas les foules
    J'aurais pourtant bien aimé avoir un avis d'expert : bug, ou pas bug ?
    En fait, ce n'est pas propre à ROL. Lorsque tu travailles en 32 bits sur des registres, leur partie haute est automatiquement effacée.

    Ce qui m'ennuie, c'est que c'est relativement connu mais que je n'arrive pas à retrouver dans la doc le paragraphe qui précise ce fait. Je me souviens pourtant avoir posté un commentaire similaire et qui y faisait référence, mais pas moyen de remettre la main dessus non plus.

  4. #4
    Membre habitué
    Profil pro
    amateur
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Bonsoir,
    En fait, ce n'est pas propre à ROL. Lorsque tu travailles en 32 bits sur des registres, leur partie haute est automatiquement effacée.
    Je trouve ça plus que bizarre ! et trompeur... Pourquoi c pas pareil alors pour 32 bits --> 16, et 16 bits --> 8, tant qu'on y est ? (dans certains cas ce serait pratique, ça pourrait éviter des movzx par exemple, mais faut être cohérent).

    Denis

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 434
    Points : 43 068
    Points
    43 068
    Par défaut différences 32/64 bites
    c'est pas pareil var en interne eax et rax doivent pas être la même chose niveau câblage. Les nouveaux registres R8 à R15 ne sont pas morcelable en 32bits.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Comment afficher le contenu d'un registre ?
    Par Midou45 dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 16/05/2008, 05h50
  2. afficher le contenu des registres
    Par meftahie dans le forum C
    Réponses: 5
    Dernier message: 09/12/2007, 16h29
  3. Afficher le contenu d'un registre
    Par duplo dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/11/2004, 12h33
  4. Afficher le contenu d'un registre
    Par mikevador02 dans le forum Assembleur
    Réponses: 10
    Dernier message: 23/06/2003, 18h18
  5. Réponses: 1
    Dernier message: 12/02/2003, 09h36

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