मैं वर्तमान में इंटेल प्रोसेसर के लिए असेंबली सीख रहा हूं। के बाद से ढेर 'नीचे बढ़ता है', हम क्यों किसी विशिष्ट तत्वअसेंबली रजिस्ट्रार एएसपी और ईबीपी
[ebp + 8] ;; This will access the first param
मैं जानता हम पुराने ईबीपी मूल्य और वापसी पता छोड़ करने के लिए है तक पहुँचने के लिए जोड़ने के लिए करते हैं और यही कारण है कि हम 8 का उपयोग करें (है क्योंकि प्रत्येक 4 बाइट लंबा है)। यह थोड़े अजीब है।
_start:
;; what's ebp value here ?
push eax
push ebx
call someFunction ;; this will create a stack frame
+-----------+
| param1 |
+-----------+
| param0 | <--- this is [ebp + 8] (assuming mov ebp, esp)
+-----------+
|ret_address|
+-----------+
| ebp |
+-----------+ <--- esp
और यह भी जब हम स्थानीय लोगों के लिए स्मृति को आबंटित, हम घटाना करने के लिए है:
इसके अलावा, अगर ईबीपी के लिए esp एक बैकअप प्रतिलिपि है, मुख्य कार्य पूर्व में ईबीपी के मूल्य क्या है ईबीपी से ... कृपया एक गैर-संदिग्ध उत्तर दें। धन्यवाद!
एक मुख्य() फ़ंक्शन नियमित फ़ंक्शन से अलग नहीं है, इसका प्रस्ताव भी है। आपने अपने असेंबली स्निपेट में एक नहीं दिखाया, यकीन नहीं कि क्यों। स्थानीय लोगों के लिए स्थान esp समायोजित करके बनाया गया है, ebp नहीं। –
वही प्रश्न हैं: http://stackoverflow.com/questions/1395591/what-is-exactly-the-base-pointer-and-stack-pointer-to-what-do-theypoint, और अन्य से जुड़े यह – Abyx