| |||
| Home > 인라인 및 임베디드 어셈블러 사용 > sp, lr 또는 pc에 액세스하는 레거시 인라인 어셈블러 | |||
RVCT v1.2 이하의 컴파일러에서는 인라인 어셈블러 코드에서(인라인 어셈블러 참조)에서 sp(r13), lr(r14)
및 pc(r15)에 액세스할 수 있었습니다. Example 6.8에서는 레거시 인라인 어셈블리
코드에서 lr을 사용할 수 있는 방법을 보여 줍니다.
Example 6.8. lr을 사용하는 레거시 인라인 어셈블리 코드
void func()
{
int var;
__asm
{
mov var, lr /* get the return address of func() */
}
}
레거시 코드가 인라인 어셈블리에서 lr을 사용하는 경우 lr에 함수의
반환 주소가 반드시 포함되지는 않습니다. 예를 들어 다른 용도로 lr을 사용할 수
있는 특정 빌드 옵션이나 최적화가 있습니다. RVCT v2.0 이상의 컴파일러에서는 sp, lr 또는
pc를 다음과 같이 사용하는 경우 아래와 유사한 오류를 보고합니다.
C 또는 C++ 소스 파일 내에서 이러한 레지스터에 액세스해야 하는 경우 다음을 수행할 수 있습니다.
임베디드 어셈블러(임베디드 어셈블러 참조)를 사용합니다.
인라인 어셈블러에서 다음 내장 함수를 사용합니다.
__current_pc()pc 레지스터에 액세스할 때 사용합니다.
__current_sp()sp 레지스터에 액세스할 때 사용합니다.
__return_address()lr 레지스터에 액세스할 때 사용합니다.
자세한 내용은 다음 항목을 참조하십시오.
Compiler Reference Guide의 4-66페이지의 명령어 내장 함수