Kann man das noch schneller machen? Ich hab da schon ziemlich optimert (alte Funktion: 250% langsamer).
Code: Alles auswählen
;# <description>
;# Diese Funktion überschreibt den angegebenen Speicher mit nullen.
;# </description>
;# <param attr="(pointer)" name="MemoryBuffer" type="void">
;# Pointer des Speicherwertes, der mit nullen überschrieben werden soll
;# </param>
;# <param name="length" type="int">
;# Länge des Speichers.
;# </param>
;# <optimize>
;# If length <= 0
;# ; lösche Funktion, da sinnlos
;# EndIf
;# </optimize>
Procedure ClearMemory(*MemoryBuffer, length.l)
;/ verwendete Register: eax, ecx, edx
;/ Variablen beschreiben:
!MOV ecx, dword[p.v_length] ;/ lege Länge in Register ab
!DEC ecx ;/ length - 1
!MOV edx, dword[p.p_MemoryBuffer] ;/ lege Buffer in Register ab
;for(eax = 0; eax<=ecx; eax++)
!MOV eax, 0 ;/ Zählervariable für For-Schleife
!p_ClearMemory.l_for_start:
!CMP eax, ecx ;/ überprüfe Bedingung:
!JG p_ClearMemory.l_for_end ;/ if(eax > ecx) for_break;
!MOV byte[edx], 0 ;/ schreibe 0 in Speicher
!INC edx ;/ addiere den Buffer
!INC eax ;/ addiere die Zählervariable
!JMP p_ClearMemory.l_for_start ;/ überprüfe For-Bedingung
!p_ClearMemory.l_for_end:
EndProcedure