C++ 内联汇编 : how to deal with references?

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

如何解决?

谢谢。

最佳答案

引用是一个具有值语义的指针——在汇编语言中这些语义是无关紧要的,所以你只剩下一个指针:

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

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

关于C++ 内联汇编 : how to deal with references?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4968105/

相关文章:

c++ - C++ 中的多线程 SDL 错误

c++ - 如何在C++ Visual Studio中使用替代代码符号

visual-studio-2010 - Visual C/C++ 2010 上的 LAPACK

windows - 你能在 Windows 中直接调用任务吗?

assembly - 如何使用 NASM 在汇编中添加两个 Quad 字?

c - 组装:推 vs movl

使用链表的 C++ 堆栈

C++显示在txt文件中找到的唯一日期及其相关价格

c++ - GCC 默认导出所有符号与 MSVC 默认不导出任何内容之间的设计原理是什么?

模板模板的 C++ 构造函数