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
}
}