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.
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
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 affEAX ror eax,16 call affAX rol eax,16
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.
Partager