Hallo,
ich möchte eine schnellere memcpy-funktion schreiben bekomme aber immer "Integer overflow" und das programm stoppt bei der division!
Also wenn ich als Länge z.B. 23 habe, wird durch 4 geteilt (=5) und der Rest ist dann (=3)
Der Quotient wird in eax und der Rest in edx gespeichert!
funktioniert auch wunderbar, aber wenn ich einen etwas größeren datensatz nehme (120000 bytes) und es ca 3 mal durchlaufen lasse, kackt der beim 4. mal ab!
also wenn ich meinen pc neu gestartet habe, läuft es 3 mal und danach nicht wieder.
Danke im Voraus!
ich möchte eine schnellere memcpy-funktion schreiben bekomme aber immer "Integer overflow" und das programm stoppt bei der division!
Code:
void fcpy(void * vSrc, const void * vDest, size_t stCnt) { _asm { mov eax, [stCnt] // length mov ebx, 4 // 4 in register div ebx // length / 4 >> eax (Rest >> edx) // Kopieren (bytes)... mov esi, [vSrc] mov edi, [vDest] push esi // Position auf den Stack schieben um ihn unten nochmals zu benutzen push edi mov ecx, edx rep movsb // Kopieren (dwords)... pop edi pop esi add esi, edx add edi, edx mov ecx, eax rep movsd } }
Der Quotient wird in eax und der Rest in edx gespeichert!
funktioniert auch wunderbar, aber wenn ich einen etwas größeren datensatz nehme (120000 bytes) und es ca 3 mal durchlaufen lasse, kackt der beim 4. mal ab!
also wenn ich meinen pc neu gestartet habe, läuft es 3 mal und danach nicht wieder.
Danke im Voraus!
Comment