2012-06-07 1 views
5

인텔 플랫폼에서 BP은 스택 프레임의 시작을 가리키고 인수 [bp+0x??]과 로컬 변수 [bp-0x??]에 액세스하는 데 사용됩니다.ARM 프로세서에서 BP 레지스터 (프레임 포인터)와 동일한 기능을 수행 할 수 있습니까?

ARM에서 사용되는 레지스터는 무엇입니까? 또는 SP에만 기반한 주소 지정입니까?

[내가 직접보고 컴파일하고 분해 할 수있는 인프라가 없습니다. AAPCS를 참조하면 도움이되지 못했습니다.

+0

** AAPCS ** (2003)에는 해당 사항이 없습니다. 오래된 APCS **는 R11을 ARM 모드에서 'FP'로 사용합니다. ARM은 레지스터가 많기 때문에 일반적으로 스택/프레임을 통해 지역을 인덱싱 할 필요가 없습니다. –

답변

7

찾고있는 것은 프레임 포인터입니다. 일반적으로 R7은 THUMB 모드에서 프레임 포인터로 작동하고 R11은 ARM 모드에서 프레임 포인터로 작동합니다. 그러나 원할 경우 OS의 재량에 따라이 협약을 변경할 수 있습니다.

읽기 here

+3

이것은 ABI 문제이며 프로세서 문제는 아닙니다. (프로세서는 사용하는 레지스터를 신경 쓰지 않습니다.) 다른 OS는 다른 방식으로 일을 할 수 있습니다. –

+0

감사합니다. @ RaymondChen. 귀하의 (정확한)보기 –

+2

반영하도록 내 대답을 업데이트하고 스택 포인터 레지스터가 있으면 현대 컴파일러 실제로 프레임 포인터 (FP) 필요하지 않습니다; 스택의 레이아웃을 알고 있으므로 SP에서 액세스하여 FP에서 액세스해야하는 모든 항목을 얻을 수 있습니다. 따라서 FP는 컴파일러에 따라 실제로 선택적입니다. –

관련 문제