Конвертировать встроенный ассемблерный код в C ++
Я работаю над проектом cpp. Проект необходимо перенести на 64 бит. Он содержит некоторый встроенный ассемблерный код, который не может быть скомпилирован на x64. Это функция, которая содержит код сборки:
void ExternalFunctionCall::callFunction(ArgType resultType, void* resultBuffer)
{
#if defined(_NT_) || defined(__OS2__)
// I386
// just copy the args buffer to the stack (it's already layed out correctly)
int* begin = m_argsBegin;
int* ptr = m_argsEnd;
int arr[1000], i=0;
while (ptr > begin) {
int val = *(--ptr);
__asm push val
}
void* functionAddress = m_functionAddress;
// call the function & handle the return value. use __stdcall calling convention
switch (resultType) {
case voidType:
__asm {
call functionAddress
}
break;
case pointerType:
case int32Type:
__asm {
call functionAddress
mov ebx, resultBuffer
mov dword ptr [ebx],eax
}
break;
case floatType:
__asm {
call functionAddress
mov ebx, resultBuffer
fstp dword ptr [ebx]
}
break;
case doubleType:
__asm {
call functionAddress
mov ebx, resultBuffer
fstp qword ptr [ebx]
}
break;
}
Я использовал стек, массив для переноса этого «asm push val», но не работал. Хотя, это не выдает никакой ошибки компиляции, но логика не сработала.
Итак, я хочу спросить, что я могу использовать в C ++ вместо "__asm push val". Любая помощь будет оценена.