[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.