2013-08-29 2 views
0

다음은 어셈블리 코드의 4 행입니다. 나는 그들을 이해하려고 노력하고있다. (이것은 인텔 syntex이다.)어셈블리 코드에 대한 설명

– mov eax, ebx 
    – mov eax, [ebx] 
    – mov eax, [ebx+ecx*X] (X=1, 2, 4, 8) 
    – mov eax, [ebx+ecx*X+Y] (Y= one byte, 0-255 or 4 bytes, 0-2^32-1) 

1) 첫 줄 EBX의 값이 레지스터 EAX 등록간에 복사한다. 2) 두 번째 줄은 ebx 레지스터의 값을 메모리 주소로 teat하면 해당 메모리 주소로 이동합니다. 해당 메모리 주소의 값을 eax 레지스터에 복사합니다. 3) 세 번째 줄은 ebx 레지스터의 값을 메모리 주소로 취급합니다. ecx * X를 추가하면 새 주소가 생성되고 새 주소로 이동하여 값을 가져 와서 eax에 복사합니다. 4) 4 번째 줄을 가져올 수 없습니다.

누구나 확인할 수 있습니까? 지침에 대해 이해 한 내용이 올바른 것입니까? 그들이 정확하지 않다면 친절히 설명해주십시오. 또한 4 행을 설명하십시오.

미리 감사드립니다.

+0

왜 그런가? 4 번 줄은 2 번과 3 번 줄과 같은 거래입니다. 여러 가지를 추가하여 주소를 만듭니다. – harold

답변

0

1-3)

당신의 가정은 나에게 올바른 본다.

4) 4 번째 줄을 가져올 수 없습니다.

절대 오프셋이 추가된다는 것을 제외하고는 3 번째 것과 같습니다. 예를 들어 : 0으로 ebx을 설정하면

mov eax,[ebx+ecx*4+arrays] 

arrays: 
array1: dd 0,1,2,3 
array2: dd 3,2,1,0 

당신은 array1ecx:th 요소를 읽었다. ebx을 16 (4 * sizeof (dword))으로 설정하면 ecx:th 요소는 array2입니다.

+0

감사합니다. 설명을 통해 나를 이해할 수있었습니다. – narayanpatra

0

는 x86 오프셋 계산을위한 식이고,

하여 예에서, ebx베이스가
Offset = Base + (Index * Scale) + Displacement 

, ecx 인덱스이고 X 스케일이고 Y가 변위된다. (3)과 (4)는 (3)이 단지 (4) 인 것과 같다고 생각할 수 있습니다.