-> 계산된 메모리 주소를 레지스터에 넣는 명령어, 단순 산술연산에도 사용된다.
둘 다 레지스터에 어떠한 값을 넣는 명령어지만, 확실한 차이가 있다.
mov: 단순히 값 그자체를 레지스터에 넣는 명령
mov eax, 1
-> eax 레지스터에 1을 넣는다
mov eax, [ebx]
-> ebx 주소가 가르키는 값을 eax에 가져와
[] : 메모리 접근을 의미한다.
mov eax, ebx
-> ebx 안의 숫자를 eax에 복사한다
lea: 값의 주소 계산 결과를 레지스터에 넣는 명령어
lea eax, [ebx] ; 뒤에 오는 건 꼭 []로 감싸야 해
-> ebx 안의 숫자를 eax에 복사한다
[]: 메모리 접근 X, ebx 값(보통 주소값) 자체를 넣는 것.
lea esi, [eax+eax*2] ; eax*3
-> esi에 eax*3을 한 값을 저장함
??? 여기서 당황,, 아니 방금 주소를 넣는다더니 어떻게 연산에 사용되는 건가요..
💡어셈블리는 값과 주소의 구분을 하지 않는다 (둘 다 연산일 뿐)
그래서~ 접근을 하지 않으면 lea를 단순 연산에서도 사용할 수 있는 것,,
게다가 imul보다 속도도 빨라서 이렇게 많이 사용한다고 한다.
-> 계산된 메모리 주소를 레지스터에 넣는 명령어, 단순 산술연산에도 사용된다.
둘 다 레지스터에 어떠한 값을 넣는 명령어지만, 확실한 차이가 있다.
mov: 단순히 값 그자체를 레지스터에 넣는 명령
mov eax, 1
-> eax 레지스터에 1을 넣는다
mov eax, [ebx]
-> ebx 주소가 가르키는 값을 eax에 가져와
[] : 메모리 접근을 의미한다.
mov eax, ebx
-> ebx 안의 숫자를 eax에 복사한다
lea: 값의 주소 계산 결과를 레지스터에 넣는 명령어
lea eax, [ebx] 무조건 뒤에 오는 건 []로 감싸야 해
-> ebx의 주소값 0x0134432이 eax에 들어온다.
[]: 메모리 접근 X, ebx 값(보통 주소값) 자체를 넣는 것.
lea esi, [eax+eax*2] ; eax*3
-> esi에 eax*3을 한 값을 저장함
??? 여기서 당황,, 아니 방금 주소를 넣는다더니 어떻게 연산에 사용되는 건가요..
💡어셈블리는 값과 주소의 구분을 하지 않는다 (둘 다 연산일 뿐)
그래서~ 접근을 하지 않으면 lea를 단순 연산에서도 사용할 수 있는 것,,
게다가 imul보다 속도도 빨라서 이렇게 많이 사용한다고 한다.