X64基本数据表达---自己的一些感悟.
#include "stdafx.h"#include <Windows.h>
struct mypass
{
int a;
int b;
char szName;
INT64 attible;
};
写一个简单的demo然后我们可以得出一点小的结论
实验证明:结构体内的数据,int 为4字节长度,char数组按4字节对齐,int64占用8位,传参方式:_stdcall 的方式的参数传递依次为 :R9,R8,RDX,RCX参数还是从右往左返回值跟32位一样,仍然保存在*ax寄存器里比如:HWND myhwnd = ::FindWindowEx(NULL, NULL, mystr, L"test");
000000013F515D78lea r9,
000000013F515D7Flea r8,
000000013F515D86xor edx,edx
000000013F515D88xor ecx,ecx
000000013F515D8Acall qword ptr
000000013F515D90mov qword ptr ,rax而float类型则通过mmx寄存器来进行传递,占用长度与32位相同仍为4字节float myfloat = 3.1415;
000000013F8E5D23movss xmm0,dword ptr
000000013F8E5D2Bmovss dword ptr ,xmm0
float mydest = myfloat;
000000013F8E5D33movss xmm0,dword ptr
000000013F8E5D3Bmovss dword ptr ,xmm0
//========================================================================================================
float myfloat = 3.1415;
000000013F765D73movss xmm0,dword ptr
000000013F765D7Bmovss dword ptr ,xmm0
float mydest = round(myfloat);
000000013F765D83movss xmm0,dword ptr
000000013F765D8Bcall round (013F761401h)
000000013F765D90movss dword ptr ,xmm0浮点型参数xmm0...8?用来传递浮点类型,如果有返回值则结果保存在xmm0里以上为初探X64做的笔记希望可以帮到坛友.
页:
[1]