2011-02-11 53 views
3

如何處理來自內聯彙編程序的函數中的引用?我想這C++內聯彙編:如何處理引用?

void foo(int& x) 
{ 
    __asm mov x, 10 
} 

int main() 
{ 
    int x = 0; 
    foo(x); 
    std::cout << x << std::endl; 
} 

但X仍然是0功能執行後,但是

int x = 0; 
__asm mov x, 10 
std::cout << x << std::endl; 

如何解決這一個正常工作?

謝謝。

+1

好問題 - 但請注意,你的代碼不符合C++,它依賴於一個編譯器擴展(Visual C++?),所以也許你可以修改你的標籤來反映這一點。 – 2011-02-11 10:49:05

+0

是的,它添加了相應的標籤。感謝提醒。 – ledokol 2011-02-11 10:49:56

回答

4

的引用是值語義的指針 - 彙編語言這些語義是無關緊要的,所以你留下一個指針:

void foo(int& x) 
{ 
    __asm { 
     mov eax, x 
     mov DWORD PTR [eax], 10 
    } 
} 

(當然,使用內聯彙編時,YMMV取決於編譯器,版本,優化等等所有通常的東西。)

2

引用本質上是一個指針,一個地址值,而不是值本身。因此,這適用於例如:

void foo(int& x) 
{ 
    __asm mov eax, x 
    __asm mov dword ptr [eax], 10 
} 

輸出:

10 
+0

嗯..我們需要dword ptr嗎? – ledokol 2011-02-11 10:54:29