"Move" disassembly 

www.madshi.net

Delphi's "Move" basically uses "rep movsd/movsb", either forward or backward, depending whether the source is before or after the destination:

00402a18 public Move:                     ; function entry point
00402a18   push    esi
00402a19   push    edi
00402a1a   mov     esi, eax
00402a1c   mov     edi, edx
00402a1e   mov     eax, ecx
00402a20   cmp     edi, esi
00402a22   ja      loc_402a37
00402a22
00402a24   jz      loc_402a55
00402a24
00402a26   sar     ecx, 2
00402a29   js      loc_402a55
00402a29
00402a2b   rep movsd
00402a2d   mov     ecx, eax
00402a2f   and     ecx, 3
00402a32   rep movsb
00402a34   pop     edi
00402a35   pop     esi
00402a36   ret
00402a36
00402a36 ; ---------------------------------------------------------
00402a36
00402a37 loc_402a37:
00402a37   lea     esi, [ecx+esi-4]
00402a3b   lea     edi, [ecx+edi-4]
00402a3f   sar     ecx, 2
00402a42   js      loc_402a55
00402a42
00402a44   std
00402a45   rep movsd
00402a47   mov     ecx, eax
00402a49   and     ecx, 3
00402a4c   add     esi, 3
00402a4f   add     edi, 3
00402a52   rep movsb
00402a54   cld
00402a55
00402a55 loc_402a55:
00402a55   pop     edi
00402a56   pop     esi
00402a57   ret