Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 32-bits / 64-bits
x86 32-bits / 64-bits Architectures x86 32/64 bits et leurs outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/01/2013, 21h00   #1
Thorna
Membre éprouvé
 
Inscription : décembre 2004
Messages : 362
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 362
Points : 418
Points : 418
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.
Thorna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 18h11   #2
Thorna
Membre éprouvé
 
Inscription : décembre 2004
Messages : 362
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 362
Points : 418
Points : 418
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.
Thorna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 20h11   #3
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

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

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 071
Points : 11 071
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.
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2013, 19h31   #4
denispir
Membre habitué
 
amateur
Inscription : 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
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
denispir est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h34.


 
 
 
 
Partenaires

Hébergement Web