2012-04-15 1 views
-1

나는 몇 가지 코드를 통해보고 나를 당황 2 개 라인을 발견 :혼란 추가 명령은

add -0x4(%esi,%ebx,4),%eax 
cmp %eax,(%esi,%ebx,4) 

내가 표준 add src,dstcmp x1,x2에 익숙해이고 나는이 선이 무엇인지 정말 모르겠어요 실제로.

나는 그것이 모드 주소 기본 + (인덱스 * 스케일) + 변위를 사용하고 GCC

+0

질문을 편집하여 사용중인 특정 어셈블러에 대한 자세한 내용을 포함하면 도움이됩니다. 나는이 구문을 인식하지 못한다. 비록 내가 추가해야만하지만, 어셈블러에 대해 집중적으로 다루어 본 이래로 오랜 시간이 걸렸다. –

답변

2

로 컴파일되어 있다고 생각합니다. 적어도 나는 그렇게 생각한다. AT & T 구문에 익숙하지 않습니다. 나는 인텔 구문이있을 거라고 생각 : 그것은 정수 (4 바이트 값)의 배열에 색인처럼

add eax,[esi + ebx*4 - 4] 
cmp [esi + ebx*4],eax 

이 보인다. 이 같은 총에 일부 배열 요소에서 값을 추가 할 것을 C에서 상상 : 이제

int a[100]; 
int i = 10; 
int total = 0; 
total += a[i-1]; 

esi 배열의 주소를 보유하게, ebxi의 값을 보유하고 eax는 개최 값 33. 당신은 얻을 것이다 : 비교 명령은 결과의 경우 (eax에)보고 테스트하고

add eax,[esi + ebx*4 - 4] 

하는 배열의 다음 값과 같습니다. C 예에서는 totala[i]과 비교하는 것과 같습니다.

+1

정확합니다. AT & T 구문 기본 사항 : http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html – DCoder