Встроенный ассемблер

Я делаю 64-битную миграцию, и мне нужно перенести встроенный код сборки на cpp. Вот он код

void ExternalFunctionCall::callFunction(ArgType resultType, void* resultBuffer)
{
    // I386

    // just copy the args buffer to the stack (it's already layed out correctly)
    int* begin = m_argsBegin;
    int* ptr = m_argsEnd;
        while (ptr > begin) {
            int val = *(--ptr);
            __asm push val
        }
    }

Я хочу перенести этот __asm push val в cpp. Эта функция вызывается четыре раза, и для каждого вызова мы получаем разные значения m_argsBegin и m_argsEnd (и m_argsBegin, и m_argsEnd являются динамическими массивами). Этот цикл while выполняется 4 раза для каждого вызова этой функции callFunction. Таким образом, в общей сложности 4x4 = 16 значений должны храниться в «НЕПРЕРЫВНОЙ ячейке памяти», это то, что «__asm push val», я думаю. Мне нужно реализовать это в C ++. Я пробовал все возможные способы (стек, массив, список Lnked, очередь даже разделил это в отдельный файл asm, но ни один не работает) Кто-нибудь может помочь?

Я разделил эту встроенную функцию сборки на отдельный файл сборки. Вот код:

.386
 .model c,flat
  public callFunction_asm

CSEG segment public 'CODE'

 callFunction_asm PROC
    push ebp
    mov ebp, esp 
    mov ecx, [ebp+8] ;val
    push dword ptr [ecx]
    mov esp, ebp
    pop ebp
 RETN
 callFunction_asm ENDP
CSEG ends
END

где callFunction_asm - внешняя функция, я объявил ее как:

extern "C" void callFunction_asm (int val);

и я называю эту функцию как:

while (ptr > begin) {
        int val = *(--ptr);
        callFunction_asm(val); //possible replacement
    }

но даже это не работает, кто-нибудь может сказать, где я иду не так. Я новичок в кодировании сборки.

Ответы на вопрос(1)

Ваш ответ на вопрос