x64汇编,ret寄存器和变量

时间:2014-03-23 18:17:38

标签: 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的值,是否有某种默认的返回寄存器或者你能指定它吗?

#include <iostream>

using namespace std;

extern "C" int GetValueFromASM();

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

    cin.get();
    return 0;
}

此外,指令mov [reg],MyByte产生错误,你如何将变量放入寄存器?

1 个答案:

答案 0 :(得分:1)

ret不会更改寄存器,它不像采用操作数的C return语句。根据调用约定,调用者期望寄存器eax中的返回值。在msdn上阅读相关内容。

mov [reg], MyByte将是一个内存到内存的移动,不支持,也不会做你想要的。您可能希望mov reg, MyByte不带括号,以便将值放入寄存器。