Instrucțiunea LEA (Load Effective Address) calculează adresa de memorie a operandului sursă folosind unitatea hardware de adresare (AGU) a procesorului și plasează rezultatul direct în registrul destinație, fără a citi sau scrie efectiv în memorie și fără a modifica flag-urile RFLAGS.
; 1. Calculul unei adrese reale de memorie
lea rdi, [rel buffer_mesaj] ; Încarcă adresa absolută a buffer-ului (RIP-relative)
; 2. Utilizare ca accelerator aritmetic rapid (3 operații într-un singur ciclu):
; Calculează: RAX = RBX + RCX*4 + 12
lea rax, [rbx + rcx*4 + 12]
; Calculează înmulțire cu constante fixe fără instrucțiunea lentă IMUL:
lea rax, [rax + rax*2] ; rax = rax * 3
lea rax, [rax*8] ; rax = rax * 8
Avantaj critic: Deoarece LEA nu alterează flag-urile de stare (ZF, SF, CF), este folosită intens de compilatoare pentru aritmetică între instrucțiunile CMP și salturile condiționate.
Moduri de scalare suportate
Factorul scale poate fi doar 1, 2, 4 sau 8, permițând indexarea directă a matricelor de bytes, words, dwords și qwords.
Întrebări & Exemple de Cod:
Instrucțiunea LEA în x86_64: Calculul Rapid de Adrese și AritmeticăAi o nelămurire despre utilizarea comenzii
Instrucțiunea LEA în x86_64: Calculul Rapid de Adrese și Aritmetică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.