2013-06-25 9 views
1

PPC 어셈블리를 배우고 있지만 서브 루틴 호출에 대한 다음 내용을 이해하는 데 어려움을 겪고 있습니다.PowerPC 어셈블리 : 여러 개의 인수를 전달하고 반환하는 방법은 무엇입니까?

인수를 서브 루틴에 전달하는 데 사용할 수있는 레지스터는 무엇입니까? 나는 R3에서 R12라고 생각해? 레지스터가 부족한 경우 어떻게 인수를 전달합니까? 이것에 대한 코드 예를 볼 수 있을까요?

반환 값을 되돌릴 때 R3 만 사용할 수 있습니까? 내가 아는 바로는이 레지스터를 사용하여 단일 값을 반환 할 수 있습니다. 더 많은 값을 반환해야한다면 그 값에 대한 포인터를 반환 할 것입니다. 이 코드 예제를 볼 수도 있습니다.

답변

2

어셈블리 언어로 작성하는 경우 원하는대로 할 수 있습니다. 호출 컨벤션에 따라야하는 외부 코드 (아마도 라이브러리, 아마도 시스템 호출)와 상호 작용하기를 원하는 경우 일뿐입니다. 일부 아키텍처에는 여러 가지 ABI가 있으므로 조심해야합니다.

정확히 기억한다면 거의 모두가 32 비트 PowerPC에 동일한 호출 규칙을 사용하므로 this Apple reference에 알아 두어야 할 모든 것이 있어야합니다. 언급 한대로 매개 변수는 일반적으로 R3-R10에 전달되고 반환 값은 R3에 저장됩니다. This tutorial은 같은 것을 나타냅니다.