Operații pe Șiruri și Blocuri de Memorie: MOVSB, STOSB și Prefixul REP în x86_64 în Assembly (x86_64)

Ghid complet pentru procesarea blocurilor de memorie în x86_64: copiere rapidă cu REP MOVSQ/MOVSB, inițializare memorie cu REP STOSQ (memset), registrele RSI, RDI și RCX.

Sintaxă
rep movsb ; copiază rcx octeți de la [rsi] la [rdi] | rep stosb ; memset

Arhitectura x86_64 include instrucțiuni dedicate pentru operații pe blocuri mari de memorie (string primitives), echivalentele hardware directe pentru memcpy și memset din biblioteca C.

Copiere de memorie rapidă (memcpy pe 64 de biți) cu REP MOVSQ
section .text
global copiere_rapida

; void copiere_rapida(void *dest, const void *src, uint64_t qword_count)
; RDI = dest (destinație)
; RSI = src (sursă)
; RDX = număr de quadwords (blocuri de 8 octeți)
copiere_rapida:
    cld                     ; Clear Direction Flag (DF=0 -> adresele cresc automat)
    mov     rcx, rdx        ; RCX este contorul pentru prefixul REP
    rep     movsq           ; Cât timp RCX > 0:
                            ;   [RDI] = [RSI]
                            ;   RSI += 8, RDI += 8
                            ;   RCX -= 1
    ret
Inițializarea memoriei cu zero (bzero / memset 0) cu REP STOSQ
section .text
global zeroizeaza_buffer

; void zeroizeaza_buffer(void *dest, uint64_t qwords)
; RDI = adresa bufferului
; RSI = numărul de qwords
zeroizeaza_buffer:
    cld
    xor     rax, rax        ; Valoarea de umplere = 0
    mov     rcx, rsi        ; Numărul de iterații în RCX
    rep     stosq           ; Scrie RAX la adresa [RDI] de RCX ori, avansând RDI cu 8 octeți
    ret
Instrucțiune Dimensiune element Registru valoare Registru Sursă → Destinație
movsb / movsq 1 octet / 8 octeți Memorie directă [RSI] → [RDI]
stosb / stosq 1 octet / 8 octeți AL / RAX RAX → [RDI]
lodsb / lodsq 1 octet / 8 octeți AL / RAX [RSI] → RAX
scasb / scasq 1 octet / 8 octeți AL / RAX Compară RAX cu [RDI] (căutare)
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Operații pe Șiruri și Blocuri de Memorie: MOVSB, STOSB și Prefixul REP în x86_64

Ai o nelămurire despre utilizarea comenzii Operații pe Șiruri și Blocuri de Memorie: MOVSB, STOSB și Prefixul REP în x86_64 sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.