X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;ds=sidebyside;f=MdePkg%2FLibrary%2FBaseMemoryLibRepStr%2FIa32%2FCopyMem.asm;h=8b4366e976baea764c8b9e728cfeab991b09b28c;hb=f734a10ab104f1072f94cab66a5489e0fd8fce8a;hp=7b3e5eafee5c95b1c83b3a06d096411eaa2a90fc;hpb=878ddf1fc3540a715f63594ed22b6929e881afb4;p=mirror_edk2.git diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.asm index 7b3e5eafee..8b4366e976 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.asm @@ -1,3 +1,8 @@ +// +// Include common header file for this module. +// + + ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation @@ -25,14 +30,22 @@ .model flat,C .code +;------------------------------------------------------------------------------ +; VOID * +; InternalMemCopyMem ( +; IN VOID *Destination, +; IN VOID *Source, +; IN UINTN Count +; ) +;------------------------------------------------------------------------------ InternalMemCopyMem PROC USES esi edi mov esi, [esp + 16] ; esi <- Source mov edi, [esp + 12] ; edi <- Destination mov edx, [esp + 20] ; edx <- Count - lea eax, [edi + edx - 1] ; eax <- End of Destination + lea eax, [esi + edx - 1] ; eax <- End of Source cmp esi, edi jae @F - cmp eax, esi + cmp eax, edi jae @CopyBackward ; Copy backward if overlapped @@: mov ecx, edx @@ -41,8 +54,8 @@ InternalMemCopyMem PROC USES esi edi rep movsd ; Copy as many Dwords as possible jmp @CopyBytes @CopyBackward: - mov edi, eax ; edi <- End of Destination - lea esi, [esi + edx - 1] ; esi <- End of Source + mov esi, eax ; esi <- End of Source + lea edi, [edi + edx - 1] ; edi <- End of Destination std @CopyBytes: mov ecx, edx