您的位置:首页 > 其它

内联汇编实现 memcpy 和 memset

2015-07-01 10:44 561 查看
#pragma check_stack( off)

LPVOID   __cdecl _memcpy(void * dst, void* src,  size_t size)
{
int dwSize = size/4;
int byteSize = size%4;
__asm{
mov edi,dst
mov esi,src
mov ecx,dwSize
rep movs dword ptr es:[edi],dword ptr ds:[esi]
mov ecx,byteSize
rep movs byte  ptr es:[edi],byte ptr ds:[esi]
}

return dst;
}
#pragma check_stack( off)
LPVOID    __cdecl  __memset( void * dst,  int val,  size_t size)
{

int dwSize = size/4;
int byteSize = size%4;
int fixVal;
__asm{
mov eax,val
lea edi,  fixVal
mov ecx,4
rep stos byte ptr es:[edi]

mov eax, fixVal
mov ecx, dwSize
mov edi,dst
rep stos dword ptr es:[edi]
mov ecx, byteSize
rep stos byte ptr es:[edi]
}

return dst;

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: