我编写了一个汇编函数来加速图像处理的一些事情(图像是用 CreateDIBSection 创建的)。
对于 Win32,汇编代码可以正常工作,但对于 Win64,我一尝试访问我的数组数据就会崩溃。
我把相关信息放在一个结构中,我的汇编函数得到一个指向这个结构的指针。将结构指针放入 ebx/rbx 并通过索引从结构中读取数据。
知道我做错了什么吗?我将 nasm 与 Visual Studio 2008 一起使用,对于 Win64,我设置了“默认 rel”。
C++ 代码:
struct myData {
tUInt32 ulParam1;
void* pData;
};
CallMyAssemblerFunction(&myData);
汇编代码:
赢32:
...
push ebp;
mov ebp,esp
mov ebx, [ebp + 8]; pointer to our struct
mov eax, [ebx]; ulParam1
mov esi, [ebx + 4]; pData, 4 byte pointer
movd xmm0, [esi];
...
Win64:
...
mov rbx, rcx; pointer to our struct
mov eax, [rbx]; ulParam1
mov rsi, [rbx + 4]; pData, 8 byte pointer
movd xmm0, [rsi]; CRASH!
...