Я написал функцию ассемблера для ускорения обработки изображений (изображения создаются с помощью CreateDIBSection).
Для Win32 ассемблерный код работает без проблем, но для Win64 происходит сбой, как только я пытаюсь получить доступ к данным моего массива.
Я помещаю соответствующую информацию в структуру, и моя ассемблерная функция получает указатель на эту структуру. Указатель структуры помещается в ebx / rbx, и с помощью индексации я считываю данные из структуры.
Есть идеи, что я делаю не так? Я использую nasm вместе с Visual Studio 2008, и для Win64 я устанавливаю «rel по умолчанию».
C ++ код:
struct myData {
tUInt32 ulParam1;
void* pData;
};
CallMyAssemblerFunction(&myData);
Код ассемблера:
Win32:
...
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!
...