인라인 암 어셈블리에서 C로 선언 된 지역 변수에 액세스하려고합니다. 어떻게해야합니까?암 인라인 어셈블리에서 로컬 C 변수에 액세스하려면 어떻게해야합니까?
글로벌 변수는 다음과 같이
int temp = 0;
Function(){
__asm(
".global temp\n\t"
"LDR R2, =temp\n\t"
"LDR R2, [R2, #0]\n\t"
);
}
를 액세스 할 수 있습니다하지만 어떻게 로컬 변수를 액세스합니까? 로컬 변수에 대해 ".local"을 ".local"으로 변경하려고 시도했지만 오류 ('temp'에 대한 정의되지 않은 참조)가 발생했습니다. 사용중인 IDE는 KEIL입니다.
의견이 있으십니까? 미리 감사드립니다.
로컬 변수는 스택 또는 레지스터에 있습니다. 그것은 일종의 컴파일러 지원 없이는 그들을 옮기는 것이 어려울 것입니다. GCC 인라인 어셈블러는 레지스터에 등록합니다. 제 생각에 [Keil은 GCC에 기반을두고 있습니다] (http://www2.keil.com/mdk5/compiler/6/). '.local'은 정적 링크가있는 '전역'을 의미합니다. 'void foo (void) {static int bar;}'를 선언하면이 방법으로 bar에 접근 할 수 있습니다. 그러나 이는 'C'프로그래머에게는 '지역'의 일반적인 개념이 아닙니다. 그것은 '정적'입니다. –