Sto lavorando su un progetto cpp. Il progetto deve essere migrato a 64 bit. Contiene un codice assembly Inline che non può essere compilato su x64. Questa è la funzione che contengono il codice assembly:Converti codice assembly inline in C++
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;
}
ho usato pila, matrice di migrare questa "asm spinta val", ma non ha funzionato. Sebbene, non genera alcun errore di compilazione ma la logica non ha funzionato.
Quindi, voglio chiedere, Cosa posso usare in C++ invece di "__asm push val". Qualsiasi aiuto sarà apprezzato.
Sicuramente questa non è l'unica istruzione di assemblaggio nel programma? Come si usa il valore spinto? Per il momento non ci sono abbastanza informazioni per aiutarti. –
Avrai bisogno di mostrare più codice in modo da poter sapere cosa si sta facendo con il valore inserito nello stack. –
Il C++ standard non include il linguaggio assembly inline o qualsiasi operazione per modificare direttamente lo stack della CPU .... Hai più possibilità di consigli utili se spieghi cosa sta facendo la tua funzione con lo stack in seguito? Se sta preparando i valori per una chiamata di funzione o qualcosa del genere, potrebbe esserci un altro modo per fornire gli argomenti. È probabilmente altamente specifico per il tuo sistema operativo e/o compilatore, che non hai specificato. –