में एएसएम प्रक्रिया के अंत में कौन सी सीपीयू रजिस्टरों को पुनर्स्थापित किया जाना है असेंबली कोड में डेल्फी प्रक्रिया या फ़ंक्शन लिखते समय, कौन से रजिस्टरों को सहेजा जाना चाहिए और प्रक्रिया के अंत में मूल मूल्य पर पुनर्स्थापित किया जाना चाहिए?डेल्फी
एक और डेल्फी प्रक्रिया या इनलाइन (इनलाइन) असेंबली कोड से फ़ंक्शन कॉल करते समय, मैं अन्य कार्यों को रजिस्टरों के साथ क्या करने की उम्मीद कर सकता हूं? कौन से रजिस्ट्रार अपने मूल मूल्यों पर बहाल किए जाएंगे और जो नहीं हो सकता है?
(जाहिर है, एक ही जवाब दोनों सवालों पर लागू होगा)
मैं डेल्फी के default calling convention संभालने कर रहा हूँ। मुझे पता है कि 0 -32-बिट रिटर्न मानों के लिए उपयोग किया जाता है। और SysUtils.pas में एएसएम कोड को देखते हुए, ऐसा लगता है कि EBX
, ESI
और EDI
धक्का और बहाल किए जाते हैं, लेकिन अन्य नहीं हैं। हालांकि, मुझे इसके बारे में कोई दस्तावेज नहीं मिल रहा है।
यह सही जानकारी है। और यदि परिणाम एक इंट 64 है, तो यह ईएक्स/ईडीएक्स जोड़े में स्थित है। –
@ ए बॉचेज: बहुत सच है। –
असल में, रजिस्टरों में क्या है कॉलिंग सम्मेलन पर निर्भर करता है। कुछ भी "stdcall" और "cdecl" असेंबलर फ़ंक्शंस लिखने से मना नहीं करता है, जो पैरामीटर पास करने के लिए रजिस्टरों का उपयोग नहीं करते हैं। रजिस्टर में क्या है, स्टैक पर क्या है (और एफपीयू रजिस्टर में क्या है) पैरामीटर प्रकार पर निर्भर करता है। ईबीएक्स, ईएसआई, ईडीआई प्रक्रिया के अंदर बदला जा सकता है, जब तक कि वे सहेजे और ठीक से बहाल हो जाएं। निश्चित रूप से ईबीपी और ईएसपी को छूना कहीं अधिक खतरनाक है। –