assembly - What is the purpose of moving a register to itself as in "mov (%eax), eax"? -


जीसीसी के साथ सरल सी कोड को अलग करते समय मैं आया:

  mov (% eax) , Eax  

विधानसभा की मेरी समझ यह है कि जब आपके पास एक रजिस्टर के आसपास () है, तो आप कुछ संख्या मेमोरी एड्रेस को जोड़ रहे हैं, अर्थात, 0x4 (% eax) का मतलब रजिस्टर % eax से ऊपर 4 बाइट्स होगा।

यहां, हालांकि, () है, तो ऐसा लगता है कि वह रजिस्टर में मान की प्रतिलिपि बना रहा है।

मैंने पाया है कि % eax रजिस्टर को सामान्यतः चर लौटने के लिए उपयोग किया जाता है और यह पंक्ति तब होती है फ़ंक्शन कॉल के तुरंत बाद, मेरा अनुमान यह है कि यह निर्देश वास्तव में मशीन को कह रहा है कि जो कुछ भी % eax नामक फ़ंक्शन के लिए होता है (यानी, वापसी मान) और < कोड>% eax वर्तमान फ़ंक्शन के लिए रजिस्टर करें।

क्या यह सही है? यदि नहीं, तो मुझे क्या हुआ है, और यह वास्तव में क्या कर रहा है?

() में एंड एंड सिंटैक्स मेमोरी डीरेंसिंग को दर्शाता है, आपको शायद प्रभावी पता वाक्यविन्यास के बारे में पढ़ना चाहिए। समतुल्य सी कोड eax = * eax; होगा, जिसका अर्थ है कि वर्तमान में मान eax का पता लगाकर स्मृति से 4 बाइट लोड करें और eax प्राप्त किए गए मान के साथ।

फ़ंक्शन कॉल और रिटर्न रजिस्टरों के मूल्यों को प्रभावित नहीं करते हैं (स्टैक और निर्देश सूचक को छोड़कर), का eax का कोई धारणा नहीं है कॉलर या कैली।

पुनश्च: आप gdb को इंटॉल वाक्यविन्यास मोड में सेट डिससैंगमेंट-स्वाद इंटेल सेट कर सकते हैं में स्विच कर सकते हैं, अगर आप इससे खुश नहीं हैं ; टी।


Comments

Popular posts from this blog

java - org.apache.http.ProtocolException: Target host is not specified -

java - Gradle dependencies: compile project by relative path -

ruby on rails - Object doesn't support #inspect when used with .include -