Announcement

Collapse
No announcement yet.

Integer Overflow

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Integer Overflow

    Hallo,

    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
    	}
    }
    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!

  • #2
    ok, hab das problem gefunden...

    "xor edx, edx" hat gefehlt

    (ist genauso schnell wie memcpy)
    Code:
    	_asm
    	{
    		xor		edx, edx
    
    		mov		eax, [stCnt] // length
    		mov		ebx, 4 // 4 in register
    		div		ebx // length / 4
    
    		// Kopieren (bytes)...
    
    		mov		esi, [vSrc]
    		mov		edi, [vDest]
    
    		push	esi
    		push	edi
    
    		mov		ecx, edx
    
    		rep		movsb
    
    
    		// Kopieren (dwords)...
    
    		pop		edi
    		pop		esi
    
    		add		esi, edx
    		add		edi, edx
    
    		mov		ecx, eax
    
    		rep		movsd
    	}

    Comment

    Working...
    X