मैं पढ़ रहा हूँ "कंप्यूटर सिस्टम्स: एक प्रोग्रामर दृष्टिकोण", अध्याय 3 mov
अनुदेश बताते हैं, और में एक किताब मुझे confuses स्पष्टीकरण देने के।mov निर्देश और पंजीयक - भ्रम!
एक समारोह देना (पेज 142 1 के संस्करण) समारोह के शरीर के
int exchange(int *xp, int y)
{
int x = *xp;
*xp = y;
return x;
}
विधानसभा कोड
movl 8(%ebp), %eax //Get xp
movl 12(%ebp), %edx //Get y
movl (%eax), %ecx //Get x at *xp
movl %edx, (%eax) //Store y at *xp
movl %ecx, %eax //Set x as return value
मुझे क्या confuses, क्या संग्रहित किया जा रहा है है, और जहां
यहाँ है मैं इसे कैसे समझता हूं:
movl 8(%ebp), %eax //Get xp
सीपीयू चाल (- मूल्य, नहीं पता दुकानों जोर देने के लिए)
मैं सही हूँ ढेर अप +8 बाइट (फ्रेम सूचक %ebp
से), उस स्थान पर संग्रहीत मूल्य, और दुकानों यह मान रजिस्टर %eax
पर ले जाता है? धन्यवाद!
instruction source, dest
इंटेल विधानसभा the opposite order है:
बहुत सच ...... – ruslik
तो दूसरे शब्दों में, क्योंकि '% ebp' स्टोर्स पॉइंटर, हम इसके नाम के चारों ओर कोष्ठक का उपयोग करते हैं, यह निर्दिष्ट करने के लिए कि हमें +% ebp' से + 8bytes को संग्रहीत मूल्य प्राप्त हो रहा है। इस मामले में, '8 (% ebp)' में सूचक '* xp' है। बाद में, 'movl (% eax),% ecx' में हम' xp' को उसी तरह से संदर्भित कर रहे हैं जैसा हमने असेंबली कोड – newprint
की पहली पंक्ति में किया था, अब सबकुछ सीधा हो गया है। पेंथेसिस भ्रम का स्रोत था! धन्यवाद ! – newprint