我对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的值,是否有某种默认的返回寄存器或者你能指定它吗?
#include <iostream>
using namespace std;
extern "C" int GetValueFromASM();
int main()
{
cout << "sup, asm said " <<GetValueFromASM()<<endl;
cin.get();
return 0;
}
此外,指令mov [reg],MyByte产生错误,你如何将变量放入寄存器?
答案 0 :(得分:1)
ret
不会更改寄存器,它不像采用操作数的C return
语句。根据调用约定,调用者期望寄存器eax
中的返回值。在msdn上阅读相关内容。
mov [reg], MyByte
将是一个内存到内存的移动,不支持,也不会做你想要的。您可能希望mov reg, MyByte
不带括号,以便将值放入寄存器。