2012-10-19 3 views
4

내 명령 줄 중 하나가 말한다 :는 조립 (% eax에, 4)

jmp *0x804a180(,%eax,4) 

그게 무슨 뜻 이죠? 첫 번째 쉼표 앞에 값이 없기 때문에 구체적으로 묻습니다. 주소가 의미하는 바가 정확히 무엇인지 확실하지 않습니다.

+2

불쾌감은 없지만 그게 무엇을 의미하는지 묻는 것은 확장 할 수 없다는 것을 의미합니다. 나는 AT & T 문법이 어리 석고 혼란 스럽다는 것을 알고 있지만 여러 웹 사이트에서도 분명히 문서화되어있다. – harold

답변

8

이 명령은 값이 %eax * 4 + 0x804a180으로 계산 된 주소에있는 위치로 점프합니다.

*은 AT & T 구문에서 간접 점프 및 호출을 나타내는 데 사용됩니다. 이것은 기본적으로 "이것의 가치 대신이 점이 가리키는 위치로 점프"하는 것을 의미합니다.

jmp myAddress # Jumps to the location myAddress 
jmp *myPointer # Jumps to the location contained at myPointer 

비어있는 값으로서,이를 0으로 & T 어드레싱 offset(%base, %index, multiplier)이다 AT의 전체 형태를 처리하지만, 이러한 값은 탈락 될 수있다 : 다음과 같은 명령어를 구별하는 것이 유용하다. 승수 (기본값은 1)를 제외한 각각의 기본값은 0입니다. 대부분의 경우, 그냥두면되지만, 인덱스가 있고 기본이없는 경우에는 쉼표가 있어야 어셈블러에서 그것은.

+0

대단히 감사합니다! – arc