J'ai un prob avec mon buffer ; ya pas d'amuses gueules (masm32)

Résolu
papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006 - 8 avril 2006 à 12:26
papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006 - 10 avril 2006 à 12:23
bj
si je mets le buffer "somme " en dd avec charge eax et que j'ajoute deux 'dec ebx ' , ben , marche pas correctement ; (pêrqué ???? = en french)
svp

invoke BitBlt,hdc,0,0,widt,height,lwnd, 0,0,0CC0020h
invoke GetBitmapBits,map,troilen,addr[mem]

mov ebx,deuxlen ; --- > dans le cas en dd ; quatrelen
mov ecx,troilen
cli
inc len
count:

mov eax,nimb ; -> "nimb" ->nombre d'images en bleu
.if len <= ax
xor eax,eax
mov al,[mem+ecx] ; -> (mem) -> buffer images
add [bsom+ebx] ,ax ;-> ---------- buffer somme --en dd eax
.endif

mov eax,nimr ; la même en rouge
.if len <= ax
xor eax,eax
mov al,[mem+ecx-1] ; la même
add [rsom+ebx] ,ax ; l------------------a même
.endif

mov eax,nimv ; etc en vert
.if len <= ax
xor eax,eax
mov al,[mem+ecx-2] ; etc
add [vsom+ebx],ax ; ----------------etc
.endif

dec ecx
dec ecx
dec ecx
dec ebx
dec ebx

jnz count
sti
merci
a+
papi

6 réponses

papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006
10 avril 2006 à 12:23
bj
heu ! pour le cli/sti , tu gagnes en gros 20% de speed ?
bon j'ai trouvé ; une horreur de programmation ? comme Dab .
a+
papi
3
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
8 avril 2006 à 16:42
salut,




c quoi ce 'cli/sti' tu fais un driver ?
si tu programme avec masm32, tu programme avec l'api windows.

@++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
8 avril 2006 à 16:45
re,




a propos de GetBitmapBits:
The GetBitmapBits function is not implemented in the Win32 API. This function is provided for compatibility with 16-bit versions of Windows. Win32-based applications should use the GetDIBits function.

@++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
8 avril 2006 à 16:52
encore,




LONG GetBitmapBits(
HBITMAP hbmp, // handle to bitmap
LONG cbBuffer, // number of bytes to copy
LPVOID lpvBits // buffer to receive bits
);

donc pour acceder au buffer:
mov esi,[mem]
mov al,[esi+ecx-2]
...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006
9 avril 2006 à 11:53
bj
le bout de programme que j'ai mis , fonctionne tres bien avec GetBitmapBits et les bsom,rsom,vsom en DW mais pas en DD
ok je va tester GetDIBits
pour "mov al,[esi+ecx-2] " j'ai ben peur que masm32 dit ; je prends quoi ; du db ,du dd , du dq ? même avec "mov al" ; non !.
pour cli,sti ; ils bloquent les interrups
quel avantage ? , d'utiliser esi ; paque [mem+ecx-2] fonctionne bien ; lui (mem est déclaré en db) ,
mais pas avec bsom , rsom , vsom en DD
j'ai l'impression que les 4 "dec ebx" , dans le cas des bsom ,..,.., en dd , déclanche le "jnz count" avant les 3 "dec ecx" ???
a+++
papi
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
9 avril 2006 à 23:36
lo,




* cli/sti te provoquera une exception, ce n'est pas à un programme utilisateur de choisir quand les interruptions doivent etre actives ou non et heureusement.
* mov al,[XX] est forcement un acces de type byte puisque al est de type byte.
* la derniere instruction dec declenche le flag non egal.

@++
0
Rejoignez-nous