2012-11-13 2 views
3

현재 간단한 C 코드 단편을 분석하여 어셈블리 언어와 다른 컴파일러 옵션의 효과를 배우려고합니다. 지금은 다음과 같은 명령을 통해 stumpled :이 주소를 해석하는 법 -0x80 (% rbp, % rax, 4)

mov %edx,-0x80(%rbp,%rax,4) 

는 내가 이해하지 못하는 것은 대상 주소 -0x80(%rbp,%rax,4)에 대한 표현이다. 명령어는 루프의 로컬 배열에 값을 할당합니다.

답변

6

기계 명령은 %edx의 내용을 %rbp + 4 * %rax - 0x80에 지정된 주소로 복사합니다. %rax이 해당 배열의 인덱스를 보유하고 있으며 %rbp - 0x80이 기본 주소 인 것으로 보입니다.

AT & T 구문을 더 잘 이해하려면 here을보십시오.

+0

답장을 보내 주셔서 감사합니다. 링크가 정말 도움이됩니다. –

7
-0x80(%rbp,%rax,4) = *(%rbp + %rax * 4 + (-0x80)) 

그래서 다음 insruction :

mov %edx,-0x80(%rbp,%rax,4) 

수단은 CPU 어드레스 (%rbp + %rax * 4 + (-0x80))에서 메모리 레지스터 %의 EDX 값을 이동할 수 있도록,이 & T 스타일 조립체이다.

+0

답장을 보내 주셔서 감사합니다. 바로 @ Fermat2357이 조금 더 일찍 ... –

+0

@ Fermat2357, 맞습니다. 고맙습니다. –

관련 문제