2013-02-15 8 views
3

어셈블리 할당 작업을하고 있으며, 대부분 어셈블리에 대해 잘 알고 있습니다. 또는 적어도이 과제를 수행하기에 충분합니다. 그러나이 mov 진술은 나를 걸고있다. 누군가이 mov 문이 어떻게 레지스터 값을 조작 하는지를 설명 할 수 있다면 정말 고맙겠습니다."mov (% ebx, % eax, 4), % eax"는 어떻게 작동합니까?

MOV (%의 EBX %의 EAX, 4) %의 EAX

P.S. 나는 기본 검색을 통해이 특정 유형의 mov 문을 찾을 수 없었기 때문에 방금 놓친 경우에 사과하고 질문을 다시합니다.

+1

이 질문은 분명 중복입니다. 둘러 보죠. [docs] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)를 확인 했습니까? 그들은이 물건을 꽤 잘 설명합니다. 그러나 이러한 책에서 쉽게 찾을 수 있도록 Intel 형식 어셈블리로 변환 할 수 있습니다. –

+0

나는 그것이 될 것이라고 생각했지만 적절한 볼 곳을 찾는 데 도움을 주셔서 감사합니다. – Scalahansolo

+0

위키 백과의 [GAS 구문 주소 지정 모드 구문] (http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax#Address_operand_syntax) 및 [x86 태그 위키]의 기타 링크 (https://stackoverflow.com)를 참조하십시오./tags/x86/info) –

답변

5

AT에 & T 어셈블리 모드 형식 주소 전체 메모리는 다음과 같습니다 사건에 대한 그래서

offset(base, index, width) 

:

eax = *(uint32_t *)((uint8_t *)ebx + eax * 4 + 0) 
:

offset = 0 
base = ebx 
index = eax 
width = 4 

명령이 같은 것을 것을 의미

C와 유사한 의사 코드입니다.

+0

왜 여기에'uint8_t'가 있습니까? – 0xAX

+0

포인터 계산. –

+0

예,하지만 왜 특히 uint8입니까? ebx, eax 등의 모든 레지스터는 정보가 상위 3 바이트에서 손실되었는지 여부에 관계없이 32 비트입니까? 나는'leal 0x2004 (% ebx), % eaxx '를 가지고 있기 때문에 묻고있다. 그러나 디버거에서 leal 0x4 (% ebx), % eax'를 볼 수있다. – 0xAX