...
Publié : ven. 07/mai/2004 21:57
...
Code : Tout sélectionner
Procedure SwapB(a.l, b.l) ; de Dr Dri
c.b
c = PeekB(a)
PokeB(a, PeekB(b))
PokeB(b, c)
EndProcedure
Procedure Swap(*a, *b) ; Pour bien comprendre
a = PeekL(*a)
b = PeekL(*b)
PokeL(*a, b)
PokeL(*b, a)
EndProcedure
Procedure MySwapL(*a, *b) ; Et voilà ce que je fais MOOOOA ! Toujours le principe d'évitement des Peek / Poke
! MOV eax,dword [esp] ; eax = *a
! MOV ecx,[eax] ; ecx = a
! MOV ebx,dword [esp+4] ; ebx = *b
! MOV edx,[ebx] ; edx = b
! MOV [eax], edx ; *a = b
! MOV [ebx], ecx ; *b = a
EndProcedure
Count = 2500000 ; Je fixe Count à "l'infini", valeur assez grande pour faire un bon test et paire, comme ça la dernière itération devrait donner pour résultat deux valeurs permutées
OpenConsole()
tz = ElapsedMilliseconds() : a = 13 : b = 12 : For i = 1 To Count : SwapB(@a, @b) : Next : PrintN(Str(ElapsedMilliseconds() - tz) + " " + Str(a) + " " + Str(b))
tz = ElapsedMilliseconds() : a = 13 : b = 12 : For i = 1 To Count : Swap(@a, @b) : Next : PrintN(Str(ElapsedMilliseconds() - tz) + " " + Str(a) + " " + Str(b))
tz = ElapsedMilliseconds() : a = 13 : b = 12 : For i = 1 To Count : MySwapL(@a, @b) : Next : PrintN(Str(ElapsedMilliseconds() - tz) + " " + Str(a) + " " + Str(b))
While Inkey() = "" : Wend
CloseConsole()
End
c'est pas prevu ça dans une prochaine version de pure ?Dr. Dri a écrit : L'algo je veux bien le faire mais y faudrait juste qu'il y ai des marcos paramètrées en PB...
Dri