Este artículo proviene de una mejora del memcmp en ensamblador
Hola a todos,
Hay bastantes ocasiones en que usamos el memcmp solamente para saber si dos trozos de memoria son iguales o diferentes , sin importarnos demasiado en que bit se diferencian ni ningún tipo de información adicional.
Es por ello que he desarrollado esta nueva funcionalidad memDif basándome en mi implementación en asm del memcmp.
Probadlo a ver como os va, la filosofia es la misma que la del memcmp: 0- los dos trozos de memoria son iguales, otro valor- son diferentes.
A nivel de rendimiento va el doble de rápido que el memcmp de C estándar (que no es poco) y espero que os pueda servir en vuestras aplicaciones cuyo rendimiento dependa de la comparación de zonas de memoria.
Aquí os dejo el código:
char LP_memDif( const void * ptr1, const void * ptr2, size_t num )
{
__asm
{
mov ecx,num
mov esi,ptr1
mov edi,ptr2
test ecx,3
jz multiplo4
xor eax,eax
xor ebx,ebx
no_multiplo:
dec ecx
mov al,[esi]
mov bl,[edi]
xor eax,ebx
jnz fin
inc esi
inc edi
and ecx,ecx
jz fin
test ecx,3
jnz no_multiplo
multiplo4:
shr ecx,2
bucle:
mov eax,[esi]
mov ebx,[edi]
add esi,4
add edi,4
xor eax,ebx
jnz fin
loop bucle
fin:
leave
ret
}
}
Espero que os haya gustado.
Nos vemos

0 comentarios :
Publicar un comentario