C++ x64组件、ret寄存器和变量

C++ x64组件、ret寄存器和变量,c++,assembly,64-bit,C++,Assembly,64 Bit,我对x64组件比较陌生,我将它与VS2010结合使用。 我正努力从proc中获取返回值的句柄,但我真的找不到适合初学者的高质量文档 .data MyByte db 10 .code GetValueFromASM proc mov rax, 28 mov rbx , 19 lea rax, MyByte mov rax, 10 mov eax, 11 mov ecx, 100 ret GetValueFromASM endp end > RET指令是在我的C++前端打印Eax的值,有

我对x64组件比较陌生,我将它与VS2010结合使用。 我正努力从proc中获取返回值的句柄,但我真的找不到适合初学者的高质量文档

.data
 MyByte db 10

 .code
GetValueFromASM proc
mov rax, 28
mov rbx , 19
lea rax, MyByte
mov rax, 10
mov eax, 11
mov ecx, 100

ret
GetValueFromASM endp
end
<> > RET指令是在我的C++前端打印Eax的值,有没有某种类型的默认返回登记表,或者您可以指定它吗?p>
#include <iostream>

using namespace std;

extern "C" int GetValueFromASM();

int main()
{
    cout << "sup, asm said " <<GetValueFromASM()<<endl;

    cin.get();
    return 0;
}
#包括
使用名称空间std;
外部“C”int GetValueFromASM();
int main()
{

cout
ret
不会更改寄存器,它不像接受操作数的C
return
语句。根据调用约定,调用方需要寄存器
eax
中的返回值。请在上阅读


mov[reg],MyByte
将是一种不受支持的内存到内存的移动,并且无论如何也不会执行您想要的操作。您可能希望
mov reg,MyByte
不带括号,以便将值放入寄存器。

不会
mov reg,MyByte
MyByte
的地址移动到
reg
中。啊,感谢您的链接,谢谢对寄存器有很多了解,(mov al,MyByte起作用)。我将变量设置为寄存器的不正确大小。定义MyByte dword 11并使用mov eax,MyByte可以正确编译和输出。谢谢!根据Wiki,x64值在
RAX
中返回: