उदाहरण के लिए यदि मैंने कुल्हाड़ी को धक्का दिया [एसपी] अक्ष के मेरे मूल्य या कुल्हाड़ी के बाद शब्द को इंगित करता है? यह वास्तविक मोड से सुरक्षित मोड में भी अलग है? मैं यह पूछता हूं क्योंकि आर्ट ऑफ़ असेंबली बुक स्पॉट पॉइंट्स को डेटा धक्का देने के लिए स्पष्टीकरण देता है और बताता है, और इस पृष्ठ पर OSDev Wiki - Stack यह सचित्र है क्योंकि यह अंतिम धक्का डेटा के बाद खाली शब्द को इंगित करता है।x86 जहां स्टैक पॉइंटर पॉइंट?
उत्तर
विकिपीडिया here का कहना है:
ढेर एक परोक्ष decrementing (धक्का) और incrementing (पॉप) ढेर सूचक के साथ किया जाता है। 16-बिट मोड में, यह निहित स्टैक पॉइंटर को एसएस के रूप में संबोधित किया जाता है: [एसपी], 32-बिट मोड में यह एसएस: [ईएसपी] है, और 64-बिट मोड में यह [आरएसपी] है। ढेर सूचक वास्तव में पिछले मूल्य कि जमा हो गया था, इस धारणा के तहत है कि इसके आकार से मेल खाएगी के प्रोसेसर (यानी, 16, 32, या 64 बिट्स) के ऑपरेटिंग मोड की डिफ़ॉल्ट चौड़ाई मैच के लिए अंक पुश/पॉप/कॉल/रेट निर्देश।
इस तरह मेरी माई-बैक मेमोरी कहती है कि यह भी काम करता है।
sub esp, 4
mov [esp], eax
तो एक धक्का के बाद, esp
धक्का दिया मूल्य का पता आयोजन करेगा: करने के लिए
ठीक है धन्यवाद, लेकिन क्या आपको कोई विचार है कि ओएसडीवी विकी स्टैक के अंत के बाद एएसपी को क्यों दिखाती है। क्या यह एक गलती है? – user1180619
आप इसे आजमा सकते हैं। ढेर पर कुछ अजीब पुश करें और फिर देखें कि [esp] एक ही मूल्य है या नहीं। यह सुनिश्चित करने के लिए कि यह दुर्घटना नहीं है, कई मानों के साथ इसे आज़माएं। –
@ user1180619: ढेर ऊपर उल्टा काम करते हैं।वे उच्च पते पर शुरू होते हैं, और वहां से काम करते हैं। पता नहीं क्यों, लेकिन ऐसा ही है। – Linuxios
push eax
बराबर है।
मुझे लगता है कि मैं समझता हूं कि ओपी इस सवाल क्यों पूछ रहा है। एसपी से पहले चर 8 बाइट क्यों नहीं है और 4 नहीं?
के बाद कुछ शोध मैं this पाया जो इंगित करता है कि:
सपा + 0 वर्ष ईबीपी सपा 4 वर्ष EIP (अनुदेश सूचक)
इसलिए है, स्वाभाविक रूप से, पहले पैरामीटर में है सपा + 8।
x86_64 में ढेर बिंदु रजिस्टर% आरएसपी जो कम 32 बिट भाग में% के रूप में अच्छी तरह से knowned में है esp
के अनुसार ली Meador की और कोरी नेल्सन जवाब, अंतिम मान पर ढेर सूचक अंक कि धक्का दिया गया था।
इंटेल 64 और IA-32 आर्किटेक्चर सॉफ्टवेयर डेवलपर की मैनुअल खंड 2 से (2 ए, 2 बी & 2C):
: निर्देश सेट संदर्भ, AZ, PUSH शिक्षा का वर्णन से पहली पंक्ति के रूप पालन पढ़तास्टैक पॉइंटर को कम करता है और फिर स्टैक के शीर्ष पर पर स्रोत ऑपरेंड स्टोर करता है।
- 1. बेस स्टैक पॉइंटर
- 2. एमआईपीएस: एक स्टैक पॉइंटर ($ एसपी) और स्टैक
- 3. x86 असेंबलर: फ़्लोटिंग पॉइंट की तुलना
- 4. "यह" पॉइंटर स्टैक ट्रेस
- 5. विभिन्न स्टैक पॉइंटर (जीसीसी)
- 6. पॉइंटर-टू-पॉइंटर क्रैश होता है जहां पॉइंटर
- 7. स्टैक पर एक इंट पॉइंटर कैसे बनाएं?
- 8. x86
- 9. x86 असेंबली
- 10. x86 linux
- 11. x86
- 12. जीडीबी मुझे बताता है कि x86-64 पर 4 पॉइंटर एक पॉइंटर क्यों है?
- 13. x86
- 14. x86
- 15. x86
- 16. x86
- 17. x86
- 18. x86
- 19. क्या ईबीपी रजिस्टर (बेस फ्रेम पॉइंटर) केवल x86 में डिबगिंग के लिए है?
- 20. स्टैक
- 21. पॉइंट वैल्यू
- 22. जोर देने/सीयूडीए चेतावनियों को हल करना "क्या पॉइंटर पॉइंट इंगित नहीं कर सकता ..."
- 23. जहां कॉल स्टैक में भूमिका जांच की जानी चाहिए?
- 24. थ्रेड-सुरक्षित सी ++ स्टैक
- 25. स्मार्ट पॉइंटर रिकर्सिव डिलीट
- 26. पॉइंटर-टू-पॉइंटर
- 27. सी - फ्लोटिंग पॉइंट राउंडिंग
- 28. एक पॉइंट
- 29. पॉइंटर
- 30. पॉइंटर
इंटेल संदर्भ मैनुअल में प्रत्येक निर्देश के लिए छद्म कोड शामिल है। अपने प्रश्न का उत्तर देने के लिए, यह ढेर पर सबसे ऊपर मूल्य को इंगित करता है। – DCoder