C++内联汇编:如何处理引用?

led*_*kol 4 c++ assembly reference inline-assembly visual-c++

如何处理内联汇编器中函数的引用?我正在尝试这个

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

int main()
{
    int x = 0;
    foo(x);
    std::cout << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但是函数执行后 x 仍然是 0,但是这个工作正常

int x = 0;
__asm mov x, 10
std::cout << x << std::endl;
Run Code Online (Sandbox Code Playgroud)

怎么解决呢?

谢谢。

Zoo*_*oba 5

引用是具有值语义的指针 - 在汇编语言中,这些语义是不相关的,因此您只剩下一个指针:

void foo(int& x)
{
    __asm { 
        mov eax, x
        mov DWORD PTR [eax], 10
    }
}
Run Code Online (Sandbox Code Playgroud)

(当然,YMMV 取决于编译器、版本、优化等。使用内联汇编时的所有常见内容。)