Bonjour,
Je jouais un peu avec mon compilateur (gcc) et un output assembleur me perturbe...
Voici le code C :
et sa sortie en asm
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int y = 2; y = y/2;
Je ne comprend pas ces 3 instructions pourquoi ne pas utiliser uniquement shr eax,0x1f ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 mov DWORD PTR [ebp-4],0x2 mov edx,DWORD PTR [ebp-4] mov eax,edx sar eax,0x1f shr eax,0x1f lea eax,[edx+eax] sar eax mov DWORD PTR [ebp-4],eax
Voila ce que je comprend :
1) sar eax,0x1f
Cette instruction permet d'enlever le signage.
2) shr eax,0x1f
décale vers la droite de 1 (0x1f = 1 et non 31 ?)
3) sar eax
je ne comprend pas...
Sinon est-ce que quelqu'un pourrait me montrer comment serait ce code en ASM AT&T ?
Merci !
Partager