domingo, 18 de noviembre de 2012

LP_memDif. Fast memdif: memdif rápido en asm x86

Articulo íntimamente relacionado con el curso de ensamblador

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


LordPakusBlog

0 comentarios :

Publicar un comentario

Entradas populares