2011-11-02 2 views
4

gcc의 인라인 어셈블리에서 다음 시그니처의 함수를 호출하려고합니다. 어떻게해야합니까?gcc 인라인 어셈블리에서 함수 호출

int some_function(void * arg); 
+4

베어 본 (bare bones) C에서 먼저 gcc -S를 사용하여 필요에 맞출 수있는 템플릿 코드를 얻으십시오. –

+0

Paul R, 멋진 솔루션이지만 좀 더 일반적인 목적의 솔루션을 원합니다. – MetallicPriest

+5

인라인 어셈블리에서 함수를 호출하면 안됩니다. GCC는 코드를 해석하지 않으므로 함수 호출이 없다는 전제하에 스택 프레임을 설정하지 않는 등의 오류가 발생할 수 있습니다. – ughoavgfhw

답변

9

일반적으로 당신이

void *x; 
asm(".. code that writes to register %0" : "=r"(x) : ... 
int r = some_function(x); 
asm(".. code that uses the result..." : ... : "r"(r), ... 

처럼 뭔가를 할 것입니다, 당신은 모든에서 인라인 어셈블리의 함수 호출을하고 싶지 않습니다. 그렇게하면 호출 규칙이나 스택 프레임 관리의 세부 사항에 대해 걱정할 필요가 없습니다.