D'abord comparememorystring sans MMX: (j'ai aps encore fait le cas case insensitive)
Code : Tout sélectionner
ProcedureDLL CompareMemString(source,dest,flag)
Select flag
Case 0 ; case sensitive
MOV esi,source
MOV edi,dest
!MOV eax,0
!bouclecms:
!MOV ebx,[esi]
!MOV edx,[edi]
!CMP bl,0
!JE fincms1
!CMP dl,0
!JE fincms2
!CMP bl,dl
!JA cmssup
!JB cmsinf
!CMP bh,0
!JE fincms1h
!CMP dh,0
!JE fincms2h
!CMP bh,dh
!JA cmssup
!JB cmsinf
!ROL ebx,16
!ROL edx,16
!CMP bl,0
!JE fincms1
!CMP dl,0
!JE fincms2
!CMP bl,dl
!JA cmssup
!JB cmsinf
!CMP bh,0
!JE fincms1h
!CMP dh,0
!JE fincms2h
!CMP bh,dh
!JA cmssup
!JB cmsinf
!ADD esi,4
!ADD edi,4
!JMP bouclecms
!fincms1:
!CMP dl,0
!JE fincms
!MOV eax,-1
!JMP fincms
!fincms2:
!CMP bl,0
!JE fincms
!MOV eax,1
!JMP fincms
!fincms1h:
!CMP dh,0
!JE fincms
!MOV eax,-1
!JMP fincms
!fincms2h:
!CMP bh,0
!JE fincms
!MOV eax,1
!JMP fincms
!cmssup:
!MOV eax,1
!JMP fincms
!cmsinf:
!MOV eax,-1
!fincms:
ProcedureReturn
Case 1
EndSelect
EndProcedure
Plus rapide d'un tiers environ que la fonction PB.
Je vais voir en mmx ce que ça donne.
Si tu pouvais créer une fonction de même type que findstring, ça m'intéresserait,.
c'est prévu (ainsi que des replacelong, replaceword, replacebyte)
Puisque tu t’intéresses aux manipulations dans la mémoire : quel est selon toi la manière la plus rapide de mettre à zéro un tableau crée avec ‘Dim’?
Mettre toutes les valeurs à zéro (dans ce cas un rtlzeromemory fait l'affaire), ou le redimensionner?