Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;内联汇编:如何处理引用?_C++_Visual C++_Assembly_Reference_Inline Assembly - Fatal编程技术网

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

C++ C++;内联汇编:如何处理引用?,c++,visual-c++,assembly,reference,inline-assembly,C++,Visual C++,Assembly,Reference,Inline Assembly,如何处理来自内联汇编程序的函数中的引用?我在试这个 void foo(int& x) { __asm mov x, 10 } int main() { int x = 0; foo(x); std::cout << x << std::endl; } void foo(int&x) { __asm mov x,10 } int main() { int x=0; foo(x); std::cout引用本质上是一个指针,一个值的地

如何处理来自内联汇编程序的函数中的引用?我在试这个

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

int main()
{
    int x = 0;
    foo(x);
    std::cout << x << std::endl;
}
void foo(int&x)
{
__asm mov x,10
}
int main()
{
int x=0;
foo(x);

std::cout引用本质上是一个指针,一个值的地址,而不是值本身。例如:

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

10

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

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

(当然,YMMV取决于编译器、版本、优化等。当使用内联汇编时,所有的东西都是一样的)。< /P>好的问题-但是请注意,您的代码不符合C++,它依赖于编译器扩展(VisualC++)?所以也许你可以修改你的标签来反映这一点。是的,它是..添加了相应的标签。谢谢提醒。嗯..我们这里需要dword ptr吗?

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