assembly 에서 lea 명령어가 뭔가요..?
글쓴이: blksaint / 작성시간: 수, 2003/05/07 - 12:54오후
0x804854d <main+77> mov 0x804971c,%eax
0x8048552 <main+82> push %eax
0x8048553 <main+83> push $0x3ff
0x8048558 <main+88> lea 0xfffffbf4(%ebp),%eax
0x804855e <main+94> push %eax
0x804855f <main+95> call 0x80483e4 <fgets>
0x8048564 <main+100> add $0xc,%esp
<main+88> 부분의 lea 명령이 도대체 뭘 하는 거죠..?
어셈 명령어가 잘 나와 있는 사이트 혹시 없을까요..?
오늘 하루도 행복하세요..^^
Forums:
Load Effective Address란 의미로 다음의 인자를 주소값으
Load Effective Address란 의미로 다음의 인자를 주소값으로 인식합니다.
ebp가 가리키고 있는 주소값에 앞의 0xfffffbf4 값을 더하여 eax로 넣기..
번역한 부분이 별로 없지만, 상당한 양의 명령어가 있으므로 그런대로 유용할 거라 생각됩니다. 페이지 불러오는데 시간이 좀 걸리니, 좀 기다려보세요.. 8)
http://khdp.org/asm/asm_inst.php
* Art is long, life is short *
Re: assembly 에서 lea 명령어가 뭔가요..?
lea 명령은 덧뺄셈 명령이라 생각하시면 됩니다. 즉, 소스 레지스터의 값에 인덱스만큼 더해서 데스티네이션 레지스터에 넣으라는 뜻이죠. 따라서 식으로 표현하면
%eax = %ebp + 0xfffffbf4
또는%eax = %ebp - 0x40c (2의 보수 취한 표현)
정도 되겠습니다. lea는 크게 2가지 용도, 즉 지역 변수의 포인터를 취할 때, 또는 간단한 사칙연산 최적화 코드의 일부로 사용됩니다. 위의 경우는 프레임 포인터 %ebp 레지스터에서 0x40c만큼 떨어진 위치에 있는 지역 변수의 포인터(&)를 취해서 fgets 함수에 넘겨주라는 뜻입니다.
혼동하면 안되는 것은 lea는 소스 레지스터가 가리키고 있는 곳의 값에 더하거나 빼는 것이 아니라 그 레지스터 값 자체에다 더하거나 뺀다는 점입니다.
음 틀린거 같은데..
앞쪽이 destination 아닌가요?
어셈블리어는 명령어불문하고 앞쪽이 destination인데 -_-
제가 틀렸나요?
아닙니다.
AT&T assembly 에서는 [source] [destination] 이고
Intel assembly 는 그 반대입니다.
그렇군요
감사합니다
두개의 operand를 갖는 assembly code 가 CPU arch
두개의 operand를 갖는 assembly code 가 CPU architecture 별로 다른 것이 아닙니다.
같은 CPU라도 어떤 assembler, disassembler 를 사용하느냐에 따라 다릅니다.
---
http://coolengineer.com
댓글 달기