대괄호 안의 식을 결과로 받습니다
Intel 표기에서 lea rax, [rbx + rcx*4 + 8]은 주소의 offset을 계산합니다. rbx=0x1000, rcx=3이면 rax=0x1014입니다. 같은 주소 표현을 사용하는 mov rax, [rbx + rcx*4 + 8]은 그 위치에서 8바이트를 읽습니다. LEA가 성공했다고 해서 메모리 매핑이나 읽기 권한이 확인된 것은 아닙니다.
입력: rbx=0x1000, rcx=3
계산: 0x1000 + 3×4 + 8 = 0x1014
LEA의 출력: rax=0x1014; 메모리 내용은 읽지 않음
주소 크기와 결과 크기는 별개입니다
64비트 모드의 lea eax, [rdi + rdi*4 + 3]은 64비트 주소 계산 결과의 하위 32비트를 EAX에 씁니다. 32비트 레지스터 쓰기 규칙에 따라 RAX 상위 32비트는 0이 됩니다. rdi=0x100000001이면 계산값 0x500000008에서 rax=8을 얻습니다. 이 기계 명령의 잘림을 C의 signed overflow 규칙과 동일시하지 않습니다.
LEA는 상태 플래그를 바꾸지 않습니다. 따라서 덧셈과 같은 숫자가 나오는 경우에도 ADD로 기계적으로 바꾸면 뒤의 조건 분기 의미가 달라질 수 있습니다.
RIP 상대 주소는 다음 명령을 기준으로 합니다
RIP 상대 주소는 다음 명령의 RIP에 signed 32비트 변위를 더합니다. 범위는 약 ±2 GiB이며, 임의의 64비트 주소를 한 명령으로 담는 방식이 아닙니다. 심벌 표현의 문법과 relocation은 assembler·linker에 따라 확인해야 합니다.
한 명령이라고 해서 더 빠른 것은 아닙니다
LEA의 latency와 사용 가능한 실행 포트는 CPU와 주소 형식에 따라 달라집니다. Intel VTune도 일부 형식의 Slow LEA를 별도 지표로 다룹니다. 컴파일러 옵션과 대상 CPU를 고정한 뒤 전체 루프의 실행 시간·의존 경로를 비교해야 합니다. 위 숫자는 계산 예시이며 실기 벤치마크가 아닙니다.