2011-05-06 5 views
3

여기서 C 함수가 호출 될 때 어셈블리가 유지해야하는 레지스터에 대한 설명서를 찾을 수 있습니까?C 레지스터 호출 규칙

+0

프로세서/컴파일러 설명서에 있습니다. –

+2

컴파일러 도움말 또는 컴파일러 공급 업체 웹 사이트를 방문하십시오. – Erik

+0

컴파일러에서 이식 가능한 코드를 동일한 시스템 아래에있는 다른 코드로 옮길 수 없습니까? – misianne

답변

2

Dr Agner 안개 최적화 매뉴얼에는 32 비트와 64 비트 모두에 대한 모든 공통 시스템 및 컴파일러 규칙 (ABI)이 나란히 나열되어 있습니다. 그들은 또한 다른 많은 유용한 정보를 담고 있습니다 : 여기에서 얻을 수 있습니다 : http://www.agner.org/optimize/

+0

고마워요, 제가 정확히 무엇을 찾고 있었습니까. – misianne

4

원하는 것은 시스템의 C 응용 프로그램 바이너리 인터페이스입니다. "C ABI"및 아키텍처에 대한 Google, 그리고 그것을 찾을 수 있습니다. 예를 들어, here은 sparc의 경우 하나이고 here은 AVR의 관련 비트입니다.

0

두 가지 사용 규칙이 있지만 가장 일반적인 것은 CDECL입니다. 인수는 해당 링크에서 설명하는 순서대로 스택에 푸시되며 호출 수신자가 사용할 수있는 "스크래치"레지스터는 및 %edx입니다. 나머지는 스택에 보존해야합니다.

그러나 다른 사람들이 지적했듯이, 이것은 많은 규칙 중 하나 일뿐입니다. 프로그래밍중인 시스템의 설명서를 확인하십시오.

+0

이 답변은 인텔 플랫폼에서만 의미가 있습니다. 틀림없이 OQ가 사용하고있는 것일 수도 있지만 말하지는 않았습니다. –

+0

오른쪽; OP가 하드웨어를 진술하는 것이 중요하다고 생각하지 않는다면 아마 그는 자기 컴퓨터에서 놀고있을 것이라는 가정하에 놀고 있습니다. –

4

이것은 ABI (응용 프로그램 바이너리 인터페이스)라고합니다. 어디서 찾았 니? 아키텍처 및 운영 체제에 따라 다릅니다.

예 : Google for ABI x86_64 linux 64 비트 Linux 시스템에 대한 호출 규칙을 찾으려면.