RtlMoveMemory是怎样保证当dst与source有重叠时,仍然可以复制或移动?
RtlFillMemory的作用是什么?
如果source<dst从高地址往低地址复制
如果source>dst从低地址往高地址复制
RtlFillMemory就是memset
mov esi,EmmSource
mov edi,EmmDestination
mov ecx,EmmLength
cld //注意这
cmp esi,edi ; Special case if Source > Destination
jbe overlap
nooverlap:
mov edx,ecx
and edx,MEMORY_ALIGNMENT_MASK
shr ecx,MEMORY_ALIGNMENT_LOG2
rep movsd
overlap:
je movedone
mov eax,edi
sub eax,esi
cmp ecx,eax
jbe nooverlap
std //注意这
add esi,ecx
add edi,ecx
dec esi
dec edi
rep movsb
cld
jmp short movedone
movedone:
pop edi
pop esi
因为在memmove和memcopy中看到有Rltmovememory的调用,所以研究了一下,对于memmove已经考虑到了当有overlap时,从高位向低位赋值,为什么还要rltmovememroy?