AT&T 어셈블리에서

declspec의 이미지

at&t 어셈블리 문법에서

lea (%esi), %ecx

이런 코드가 있다고 할때. 이거는 결국

mov %esi, %ecx

랑 똑같은거 아닌가요? 차이점이 있나요?

그리고 mov 0x08(%esp, 1), %ebx
이런 코드가 있는데, 여기서 %esp 오른쪽에 있는 1 은 뭔가요??

AT&T 어셈블리 문법들과
인텔 어셈블리 문법들에 대해서
쉽고 구체적으로 잘나온 책 없을까요?

그리고 movl 은 4바이트, movw 는 2바이트 movb 는 1바이트를
이동하는 l, w, b 등의 접미사가 있는데
이 접미사를 생략하고 그냥 mov 이렇게 하면
언제나 4바이트씩 옮기는건가요? 그렇다면 movl 은 왜필요한건지..?

태훈의 이미지

http://www.intel.com/design/processor/manuals/253666.pdf
http://www.intel.com/design/processor/manuals/253667.pdf

를 참고하셔서 삼아서 모르는 명령어(어셈코드)가 나올때마다 찾아보세요.

mov(b,w,l)은 AT&T 어셈블러에서 지원해주는 접미사 같군요.

mov 명령어는 오퍼랜드에 따라 연산 단위가 결정됩니다.

mov ax, bx   /* 16 비트 연산. */
mov eax, ebx /* 32 비트 연산. */
mov rax, rbx /* 64 비트 연산. */

Just do it!