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
Post a Comment