2014-07-18 2 views
-1

설명서에 어셈블리 메서드가 호출 될 때 첫 번째 인수는 4(%esp)이어야합니다. 두 번째 인수가 8(%esp)에 있습니까?x86 어셈블리 gcc 호출 규칙 esp 레지스터

& 어셈블리 구문에서 gnus를 얻지 못하고 intel 구문과 동일한 다음 코드는 무엇입니까?

4(%esp) 

예를 들어 그것을 [esp + 4] 또는 [esp * 4]인가? 8(%esp)

+0

가능한 복제본 http://stackoverflow.com/questions/4003894/what-is-the-0x10-in-the-leal-0x10ebx-eax-x86-assembly-instruction, http://stackoverflow.com/ 질문/18650093/x86 어셈블리 용 구문에서 의미있는 괄호 안에있는 쉼표, http://stackoverflow.com/questions/26289472/cmp-in- 괄호와 함께 사용하는 x86과 –

답변

6

4(%esp)[esp + 4]에 해당하므로 첫 번째 인수를 가정하면 4 바이트, 두 번째 인수가 있어야합니다 - 다른 데이터 유형은 공간의 다른 양을 필요로한다. 4 바이트를 넘는 인수를 전달하면 다음 인수가 첫 번째 인수보다 4 바이트를 시작하는 크기의 공간에 압축 할 수 없습니다.

1

는 첫 번째 인수의 유형에 따라 달라집니다에

+0

내 어셈블리 메소드는 두 개의 인수를 취하고 둘 다'uint8_t' 유형이므로 첫 번째 인수를 얻기 위해'[esp + 4]'를 사용해야하고 둘째? –

+1

@Theamateurprogrammer 아니요, uint_8은 8 비트입니다. 따라서 4 바이트로 정렬 될 수 있습니다. 따라서 여전히 8 (% esp)입니다. – Simon

+0

@ 사이먼 그래서 [[esp + 4 + nthArgument * argumentLengthInBits]'를 사용해야합니까? –