2013-10-21 2 views
0

디버깅이 필요한 할당 작업을 수행 중입니다. & T 어셈블리입니다. 나는 다음 두 줄에 문제가있어, 약간의 설명을 요구하고 싶다. , I는 "-8 + %esi + (%ebx*4) + %eax"으로이를 해석하고IA32 어셈블리 설명

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

%esi는 사용자가 입력 한 값을 가지고 있다는 것을 알고 모두 %eax%ebx 첫번째 라인 2.

같다. %ebx이 2이므로이 값은 %esi + %eax입니다. 따라서 본질적으로 add 라인은 입력 값에 2를 더합니다.

내가 알고있는 두 번째 줄은 %eax-0x4(%esi,%ebx,4)을 비교합니다. 이 시점에서 %eax%esi + 2 동일하고, 이전의 논리를 다음과 오른쪽의 값은 두 번째 줄을한다는 것을 의미가 %esi + 2을 비교하고, %ebx 여전히

내가 올바른 오전 경우 2. 동일하기 때문에 %esi + 4로 평가 것 -4 + %esi + (%ebx*4) 동일 %esi + 4 이는 모든 입력 값에 대해 참일 수 없습니다. 그러나 임무에 따라 사실이어야합니다. 번역에서 어디에서 잘못 될까요?

+0

더 많은 코드를 붙여 넣으십시오. 아마도 esi 또는 ebx를 업데이트하는 루프가있을 것입니다. –

답변

1

이들은 메모리 피연산자입니다.

add -0x8(%esi,%ebx,4),%eax 

eax esi + ebx*4 - 8의 어드레스에 저장된 값을 추가한다.

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

eax으로 esi + ebx*4 - 4 어드레스에 저장된 값을 비교.

+0

고마워, 그게 전부 야! – cHam

관련 문제