मैं 'मजेदार' के लिए विंडोज़ पर x64 असेंबली सीख रहा हूं। MSDN documentation for the x64 calling convention on Windows का कहना है:Win64 एबीआई में, क्या आरक्षित तर्क स्टैक स्पेस सामान्य उद्देश्य भंडारण के लिए उपयोग किया जा सकता है?
फोन करने वाले कॉल प्राप्त करने वाला पैरामीटर के लिए जगह आवंटित करने के लिए जिम्मेदार है, और हमेशा 4 रजिस्टर मानकों के लिए पर्याप्त स्थान आवंटित चाहिए, भले ही कॉल प्राप्त करने वाला है कि कई मापदंडों जरूरत नहीं है। यह सी unprototyped कार्यों, और vararg सी/सी ++ कार्यों का समर्थन करने की सादगी में सहायता करता है।
जैसा कि मेरे कार्यों सी unprototyped कार्यों नहीं हैं या varargs C/C++ काम करता है, इसका मतलब मैं हमेशा अपने समारोह के भीतर सामान्य प्रयोजन भंडारण के लिए (सही एक फोन के बाद rsp
के असंशोधित मूल्य मानकर) [rsp+32]
करने के लिए [rsp+8]
उपयोग कर सकते हैं करता है , स्थानीय चर के लिए पसंद है?
स्पष्ट उत्तर के लिए धन्यवाद के बारे में माफी चाहता हूँ। हालांकि इनबाउंड पैरामीटर को संशोधित करना 'mov rcx, anyvalue' होगा क्योंकि तर्क 'आरसीएक्स' के माध्यम से पारित किया गया है, यही कारण है कि मैं '[rsp + 8]' के बारे में अनिश्चित था। – Trillian
लेकिन आपको इनबाउंड पैरामीटर को फैलाने की भी अनुमति है। यही कारण है कि आरक्षित जगह, सब के बाद है। 'शून्य निष्पादन (int arg1) {/ * spill: mov [rsp + 8], rcx */arg1 = anyvalue;/* mov [आरएसपी +8], किसी भी समय * /} ' –