fb:porticula NoPaste
POINT-Ersatz (Inlineasm)
Uploader: | Volta |
Datum/Zeit: | 22.08.2011 09:18:19 |
Screen 18, 32
Dim As Double lastTime, ersteZeit, zweiteZeit, dritteZeit
Dim As ULongInt counter1, counter2, counter3
Dim As Integer x, y, z = 500
Dim As Any Ptr bild = ImageCreate(z, z,&hFF000000)
lastTime = Timer
For y = 0 To z-1
For x = 0 To z-1
If Point(x, y, bild) = &hFF000000 Then
counter1 += 1
EndIf
Next
Next
ersteZeit = Timer - lastTime
lastTime = Timer
For x = 32 To (z*z*4)+32-1 Step 4
If *Cast(Integer Ptr, bild+x) = &hFF000000 Then
counter2 += 1
EndIf
Next
zweiteZeit = Timer - lastTime
lastTime = Timer
x=(z*z) 'Anzahl Farbpixel
y=Cast(Integer,bild)+32 'Startadresse
Asm
mov ebx, dword ptr [x] 'Anzahl Farbpixel
mov edx, dword ptr [y] 'Startadresse
Xor ecx, ecx 'Zähler=0
LLoop1:
mov eax, [edx] 'Farbpixel holen
And eax, &hffffff 'nur RGB
jnz LLoop2 'nicht 0, dann nicht zählen
inc ecx '+=1 Pixel schwarz
LLoop2:
add edx, 4 '+=4 Adresse
dec ebx '-=1 Pixel
jnz LLoop1
mov dword ptr [counter3], ecx
End Asm
dritteZeit = Timer - lastTime
Print "point() :", ersteZeit
Print "Pointer :", zweiteZeit;" ";fix(ersteZeit/ zweiteZeit);" x schneller!"
Print "Inlineas:", dritteZeit;" ";fix(ersteZeit/ DritteZeit);" x schneller!"
Print
Print "Erstes Ergebnis:", counter1
Print "Zweites Ergebnis:", counter2
Print "Drittes Ergebnis:", counter3
ImageDestroy (bild)
Sleep