पर कनवर्ट करें मैं एक सीपीपी प्रोजेक्ट पर काम कर रहा हूं। परियोजना को 64 बिट में माइग्रेट करने की आवश्यकता है। इसमें कुछ इनलाइन असेंबली कोड शामिल हैं जो x64 पर संकलित नहीं हो सकते हैं।इनलाइन असेंबली कोड को 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;
}
मैं इस "ASM धक्का वैल" विस्थापित करने के लिए ढेर, सारणी का प्रयोग किया है, लेकिन काम नहीं किया: इस समारोह जो विधानसभा कोड होता है। हालांकि, यह किसी संकलन त्रुटि को फेंक नहीं देता है लेकिन तर्क काम नहीं करता है।
तो, मैं पूछना चाहता हूं, मैं "__asm पुश वैल" के बजाय सी ++ में क्या उपयोग कर सकता हूं। किसी भी तरह की सहायता को आभार समझेंगे।
निश्चित रूप से यह कार्यक्रम में एकमात्र असेंबली निर्देश नहीं है? आप धक्का मूल्य का उपयोग कैसे करते हैं? इस पल के लिए आपकी मदद करने के लिए पर्याप्त जानकारी नहीं है। –
आपको अधिक कोड दिखाना होगा ताकि हम जान सकें कि स्टैक पर धक्का दिया गया मूल्य के साथ क्या किया जा रहा है। –
मानक सी ++ में इनलाइन असेंबली भाषा या सीपीयू के स्टैक को सीधे संशोधित करने के लिए कोई भी ऑपरेशन शामिल नहीं है .... यदि आप समझते हैं कि आपका फ़ंक्शन बाद में स्टैक के साथ क्या कर रहा है तो आपको उपयोगी सलाह का अधिक मौका है? यदि यह फ़ंक्शन कॉल या किसी चीज़ के लिए मूल्य तैयार कर रहा है, तो तर्कों की आपूर्ति करने का कोई और तरीका हो सकता है। यह आपके ओएस और/या कंपाइलर के लिए अत्यधिक विशिष्ट है, जिसे आपने नहीं बताया है। –