Code
assembly
; memcpy(dst, src, n) rdi=dst, rsi=src, rdx=n
section .text
global memcpy
memcpy:
mov rax, rdi ; remember dst for return value
mov rcx, rdx ; count
rep movsb ; copy rcx bytes from [rsi] to [rdi]
ret
; For aligned, large copies use movsq (8 bytes at a time)
global memcpy_aligned
memcpy_aligned:
mov rax, rdi
mov rcx, rdx
shr rcx, 3 ; rcx = qword count (n / 8)
rep movsq
; handle the leftover bytes (n % 8)
mov rcx, rdx
and rcx, 7
rep movsb
ret