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

发布于 2024-10-17 05:49:54 字数 346 浏览 2 评论 0原文

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

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;

如何解决这个问题?

谢谢。

How to deal with references in function from inline assembler? I'm trying this

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

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

but x is still 0 after function execution, however this one works fine

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

How to solve that?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遗忘曾经 2024-10-24 05:49:54

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

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

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

A reference is a pointer with value semantics - in assembly language these semantics are irrelevant, so you are left with a pointer:

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

(Of course, YMMV depending on the compiler, version, optimisations, etc. all the usual stuff when using inline assembly.)

〗斷ホ乔殘χμё〖 2024-10-24 05:49:54

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

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

输出:

10

Reference is essentially a pointer, an address of the value, not the value itself. So this works for example:

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

Output:

10
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文