Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre expérimenté
    Inscrit en
    décembre 2004
    Messages
    420
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 420
    Points : 508
    Points
    508

    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 :
    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 :
    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 expérimenté
    Inscrit en
    décembre 2004
    Messages
    420
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 420
    Points : 508
    Points
    508

    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
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 223
    Points : 13 072
    Points
    13 072

    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 : 119
    Points
    119

    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
    Membre Expert
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 1 549
    Points : 2 068
    Points
    2 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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •