Skip to content
Assembly

memcpy — rep movsb でコピー

rep movsb 文字列命令を使ってコンパクトなメモリコピーを行う。

#memory#string-ops#rep

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