Instrucțiunea XCHG (Exchange) interschimbă valorile din doi operanzi fără a necesita un al treilea registru intermediar temporar. Când unul dintre operanzi este o locație de memorie, instrucțiunea activează automat blocarea hardware a magistralei (prefixul LOCK implicit).
; Schimb rapid între două registre:
mov rax, 10
mov rbx, 20
xchg rax, rbx ; Acum RAX conține 20, iar RBX conține 10
; Primitivă atomică pentru Spinlock (Test-and-Set hardware):
mov eax, 1 ; Valoarea blocată
spin_loop:
xchg eax, [rel lacat_mutex] ; Schimb atomic (LOCK implicit)
test eax, eax ; Verifică dacă era deja liber (0)
jnz spin_loop ; Dacă era 1 (blocat), reîncearcă
Cost de performanță: Folosirea XCHG pe memorie este o operațiune costisitoare deoarece invalidează cache-ul celorlalte nuclee CPU pentru a garanta atomicitatea.
Întrebări & Exemple de Cod:
Instrucțiunea XCHG în x86_64: Schimb de Valori și Blocare HardwareAi o nelămurire despre utilizarea comenzii
Instrucțiunea XCHG în x86_64: Schimb de Valori și Blocare Hardwaresau 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.