neku
Codeur roumain
je vais en premier vous copier le morceau de code incriminé ^
Alors le problème est dans la fonction GetV
lorsque je fais :
asm ("movl %0, %%ecx" :: "r" (Red));
il écrase la valeur de eax précédement modifiée.
pourquoi ?
merci de votre aide
Code:
// ==========================
// = Composantes Couleur ASM =
// ==========================
// #define GetR(Color) Color >> 16
unsigned int GetR_asm(int Color) {
int Red = 0;
asm ("pushl %eax");
asm ("movl %0, %%eax" :: "r" (Color));
asm ("shr $16, %eax");
asm ("movl %%eax, %0" : "=r" (Red));
asm ("popl %eax");
return (unsigned int)Red;
}
// #define GetV(Color) (Color >> 8) - (GetR(Color) << 8)
unsigned int GetV_asm(int Color) {
int Red = (int)GetR_asm(Color);
int Vert = 0;
asm ("pushl %eax");
asm ("pushl %ebx");
asm ("movl %0, %%eax" :: "r" (Color));
asm ("shr $8, %eax");
asm ("movl %0, %%ebx" :: "r" (Red));
asm ("shl $8, %ebx");
asm ("subl %ebx, %eax");
asm ("movl %%eax, %0" : "=r" (Vert));
asm ("popl %ebx");
asm ("popl %eax");
return (unsigned int)Vert;
}
lorsque je fais :
asm ("movl %0, %%ecx" :: "r" (Red));
il écrase la valeur de eax précédement modifiée.
pourquoi ?
merci de votre aide