C++ x64组件、ret寄存器和变量
我对x64组件比较陌生,我将它与VS2010结合使用。 我正努力从proc中获取返回值的句柄,但我真的找不到适合初学者的高质量文档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的值,有
.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()
{
coutret
不会更改寄存器,它不像接受操作数的Creturn
语句。根据调用约定,调用方需要寄存器eax
中的返回值。请在上阅读
mov[reg],MyByte
将是一种不受支持的内存到内存的移动,并且无论如何也不会执行您想要的操作。您可能希望mov reg,MyByte
不带括号,以便将值放入寄存器。不会mov reg,MyByte
将MyByte
的地址移动到reg
中。啊,感谢您的链接,谢谢对寄存器有很多了解,(mov al,MyByte起作用)。我将变量设置为寄存器的不正确大小。定义MyByte dword 11并使用mov eax,MyByte可以正确编译和输出。谢谢!根据Wiki,x64值在RAX
中返回: