Instrucțiunea SCAS (Scan String) compară valoarea din acumulator (AL/RAX) cu octetul indicat de RDI, iar CMPS (Compare String) compară memoria indicată de RSI cu cea indicată de RDI, avansând automat pointerii conform flag-ului DF.
; Implementarea ultra-rapidă a funcției strlen(str):
global sir_strlen
sir_strlen:
mov rdi, rdi ; RDI conține adresa șirului (primul argument ABI)
mov rdx, rdi ; Păstrăm adresa de start
xor al, al ; Căutăm terminatorul nul '\0' (0)
mov rcx, -1 ; Setăm contorul la valoare maximă (0xFFFFFFFFFFFFFFFF)
cld ; Asigură direcția înainte (incrementare RDI)
repne scasb ; Scanează cât timp [RDI] != AL
not rcx ; Calculează lungimea din contorul decrementat
dec rcx ; Elimină terminatorul
mov rax, rcx ; Returnează lungimea în RAX
ret
Prefixele REP: REPE repetă atât timp cât elementele sunt egale (pentru memcmp), iar REPNE repetă până când găsește primul element egal (pentru memchr).
Întrebări & Exemple de Cod:
SCAS și CMPS în x86_64: Căutarea și Compararea Blocurilor de MemorieAi o nelămurire despre utilizarea comenzii
SCAS și CMPS în x86_64: Căutarea și Compararea Blocurilor de Memoriesau 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.