Bonjour, voici le code C que j'essaye de reproduire en assembleur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
	for( DWORD n=0; n<H*W; n++ )
	{
		screenbits[n]&=0x00ffffff;                  //l'alpha a zero
		screenbits[n] =ARGBTable[ screenbits[n] ];        //on récupère la correspondance
	}
Celui ci parcours chaque pixel d'une fenetre met l'alpha à zero puis modifie la couleur en récupérant la correspondance dans une table. Donc comme il y a 3 couleurs (R G B) la table fait 256*256*256 l'alpha n'ayant pas d'importance.

Et voici le code assembleur qui ne fonctionne pas:
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
 
	BYTE* src=(BYTE*)screenbits;
	BYTE* tbl=(BYTE*)ARGBTable;
	DWORD npix=H*W;
 
	__asm                                                                                             
	{
		   mov ecx, npix			//un compteur pour savoir quand on s'arrete
		   mov ebx, src                  //pointeur vers les pixels dans ebx (32bits: ARGB)
		   label:     
				mov al, 0
				mov [ebx+3],al		//on met l'alpha a 0 jusque la le code fonctionne
				mov eax, tbl		//on place eax en pointeur au début du tableau de correspondance
 
				add eax, [ebx+0]	//avance le pointeur (ARGBTable[ screenbits[n] ];)
				mov edx, [eax+0]	//on récupère la nouvelle valeur dans edx
				mov [ebx+0], edx	//enfin on remplace le pixel par la nouvelle valeur
				add ebx,4			//on avance le pointeur d'un pixel (4 octets) ca c'est bon
				dec ecx				//on décrémente le compteur, ca c'est bon
				jnz label			//si le compteur est positif ou nul on poursuit la copie
	}
Voila peut etre que c'est le "mov eax, tbl" qui pose probleme je ne sait pas ne conaissant pas trop l'assembleur.

Merci