MOV와 LEA의 차이점은 무엇입니까?
이 내용의 차이점이 무엇인지 알고 싶습니다.
MOV AX, [TABLE-ADDR]
과
LEA AX, [TABLE-ADDR]
LEA
로드 유효 주소를 의미MOV
로드 값을 의미
즉, LEA
주소를 주소 항목에 대한 포인터를로드하는 반면 MOV는 해당 주소의 실제 값을로드합니다.
LEA
사소한 주소 계산을 수행하고 결과를 [나중에 사용하기 위해] 저장하는 것이 목적입니다 .
LEA ax, [BP+SI+5] ; Compute address of value
MOV ax, [BP+SI+5] ; Load value at that address
관련된 상수가있는 경우 MOV
(어셈블러의 상수 계산을 통해) 가장 간단한 사용 사례와 겹치는 보일 보일 수 있습니다 LEA
. 여러 기본 주소 등으로 여러 부분으로 구성이있는 경우 유용합니다.
NASM 구문에서 :
mov eax, var == lea eax, [var] ; i.e. mov r32, imm32
lea eax, [var+16] == mov eax, var+16
lea eax, [eax*4] == shl eax, 2 ; but without setting flags
MASM 구문에서 OFFSET var
로드 대신 mov-immediate를 사용하십시오 .
명령 MOV reg, addr은 주소 addr에 저장된 변수를 reg로 읽는 것을 의미합니다. LEA reg, addr 명령은 주소에 저장된 변수가 아닌 주소를 수신하는 reg로 읽는 것을 의미합니다.
MOV 급의 다른 형태는 MOV reg, immdata입니다. 즉, 즉시 데이터 (즉, 상수) immdata를 reg로 읽습니다. LEA reg의 addr, addr가 상수 (즉, 고정식) 인 경우 LEA 명령은 즉시 실행 인 데이터와 동일한 상수를로드하는 동일한 MOV reg, immdata 명령과 정확히 동일합니다.
리터럴 만 지정하면 차이가 없습니다. LEA는 더 많은 능력을 가지고 있으며 여기에서 읽을 수 있습니다.
http://www.oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_6/CH06-1.html#HEADING1-136
사용 된 어셈블러에 따라.
mov ax,table_addr
MASM에서는
mov ax,word ptr[table_addr]
그러나 그것이 table_addr
아닌 에서 첫 번째 바이트를로드합니다 table_addr
. 대신합니다.
mov ax,offset table_addr
또는
lea ax,table_addr
같은 방식으로 작동합니다.
lea
table_addr
로컬 변수 인 경우 버전도 잘 작동합니다.
some_procedure proc
local table_addr[64]:word
lea ax,table_addr
기본적으로 ... "계산 후 REG로 이동 ... ..."다른 목적으로도 좋은 것입니다 :)
값이 포인터라는 것을 잊어 버리는 경우 코드 최적화 / 최소화에 사용할 수 있습니다.
MOV EBX , 1
MOV ECX , 2
;//with 1 instruction you got result of 2 registers in 3rd one ...
LEA EAX , [EBX+ECX+5]
EAX = 8
독창성 :
MOV EAX, EBX
ADD EAX, ECX
ADD EAX, 5
그 차이는 미묘하지만 중요합니다. MOV는 "MOVe"이며 TABLE-ADDR 레이블이 대량 주소의 복사본입니다. LEA 좀 더 급급 인 '로드 유효 주소'입니다. 즉, TABLE-ADDR은로드 할 주소가있는 메모리 위치를 가리 킵니다.
LEA를 효과적으로 사용하는 것은 강력한 명령어이므로 C와 같은 언어로 포인터를 사용하는 것과 같습니다.
참고 URL : https://stackoverflow.com/questions/1699748/what-is-the-difference-between-mov-and-lea
'IT' 카테고리의 다른 글
ng-repeat의 사용자 정의 정렬 기능 (0) | 2020.08.03 |
---|---|
app.all ( '*')과 app.use ( '/')의 차이점 (0) | 2020.08.03 |
SQL-Server에서 테이블 변수를 삭제하는 방법 (0) | 2020.08.03 |
언제 java.lang.Error를 잡아야하나요? (0) | 2020.08.03 |
터미널을 통해 레일 앱으로 json 게시 요청 컬 (0) | 2020.08.03 |