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

时间:2011-02-11 10:46:23

标签: 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;
}

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

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

如何解决?

感谢。

2 个答案:

答案 0 :(得分:4)

引用是一个带有值语义的指针 - 在汇编语言中这些语义是无关紧要的,所以你留下了一个指针:

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

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

答案 1 :(得分:2)

引用本质上是一个指针,一个值的地址,而不是值本身。所以这适用于例如:

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

输出:

10