Comparații și Evaluarea Flag-urilor: Instrucțiunile CMP și TEST în Assembly (x86_64)

Ghid complet pentru instrucțiunile CMP și TEST în Assembly: scăderi și conjuncții virtuale fără alterarea valorilor și setarea flag-urilor ZF, SF, CF și OF.

Sintaxă
cmp rax, rbx | test rax, rax

Instrucțiunile de comparație pregătesc execuția deciziilor logice (salturile condiționate). Ele funcționează efectuând operații interne și actualizând registrul RFLAGS, fără a modifica registrele sursă sau destinație.

Instrucțiune Operație internă invizibilă Când se activează Zero Flag (ZF = 1)?
cmp a, b Calculează temporar a - b și aruncă rezultatul. Dacă a == b (deoarece diferența lor este 0).
test a, b Calculează temporar a AND b și aruncă rezultatul. Dacă niciun bit comun nu este 1 (ex. test rax, rax verifică dacă RAX este 0 sau pointer null).
Exemple de comparație corectă
; Verificăm dacă un număr din RAX este egal cu 100:
cmp rax, 100
je este_egal           ; Sare dacă ZF == 1 (adică rax == 100)

; Verificăm dacă un pointer este NULL fără a folosi cmp rax, 0:
test rax, rax
jz pointer_este_null   ; Sare dacă rax == 0
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Comparații și Evaluarea Flag-urilor: Instrucțiunile CMP și TEST

Ai o nelămurire despre utilizarea comenzii Comparații și Evaluarea Flag-urilor: Instrucțiunile CMP și TEST 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.