मैं कुछ कोड पढ़ रहा था और यह सुनिश्चित करें कि इस लाइन करताmovq विधानसभा समारोह
movq (%rsp), %rsp
धन्यवाद
नहीं थामैं कुछ कोड पढ़ रहा था और यह सुनिश्चित करें कि इस लाइन करताmovq विधानसभा समारोह
movq (%rsp), %rsp
धन्यवाद
नहीं थाmovq
(यह मानते हुए आप 86 के बारे में बात कर रहे हैं) एक quadword की एक चाल है (64 बिट मूल्य)। यह विशेष निर्देश:
movq (%rsp), %rsp
बहुत सारे कोड की तरह दिखता है जो ढेर फ्रेम के माध्यम से चलेंगे। यह विशेष निर्देश मौजूदा स्टैक पॉइंटर द्वारा इंगित क्वाडवर्ड को पकड़ता है, और इसे स्टैक पॉइंटर में लोड करता है, इसे ओवरराइट करता है।
उदाहरण के द्वारा, इस कोड अनुक्रम (वास्तविक कोड के आधार पर, और इंटेल में नहीं बल्कि कि एटी & टी प्रारूप) लगातार 16 बाइट्स मूल्य जब तक इसकी सामग्री से ढेर सूचक लोड होगा परे यह 0.
है576 cmpq [rsp+0x10],0x0
582 jz 594
588 movq rsp,[rsp]
592 jmp 576
594 ...
यह संभव है यह ढेर फ्रेम चलने कोड हो सकता है लेकिन यह असामान्य यह कुछ यह आम तौर पर के लिए उपयोग नहीं किया जाता के लिए ढेर सूचक suborning किया जाएगा के बाद से हो रहा है नहीं हो सकता।
यह असामान्य स्टैक फ्रेम में असामान्य रूप से स्टैक पॉइंटर और बेस पॉइंटर शामिल है, लेकिन आम तौर पर केवल एक स्तर (यानी, फ़ंक्शन से वापसी) के लिए जाना जाता है।
ऊपर दिखाए गए कोड के प्रकार के लिए जहां आप कई स्तरों को स्थानांतरित करना चाहते हैं, तब तक केवल स्टैक पॉइंटर का उपयोग करने के लिए तेज़ी से तेज़ हो जाता है जब तक कि आप कहां न हों, तब बेस पॉइंटर को बंद करें (कॉलिंग कॉन्फ़्रेंस अक्सर इसे बदलने से पहले वर्तमान आधार सूचक को धक्का दें, ताकि एक साधारण पॉप पुराने मूल्य को पुनर्प्राप्त कर सके)।
यह एक 64 बिट मूल्य mov है। Movq में "क्यू" की वजह से इसकी 64 बिट क्वाड और क्वाड 64 बिट है।
ऐसे movl जिसमें एल 32 बिट है के रूप में अन्य उदाहरण नहीं हो सकता है।
लेकिन movq (% आरएसपी),% आरएसपी ATT सिंटेक्स के उपयोग के मामले में ..
movq (% आरएसपी),% आरएसपी -> movq opcode कहा जाता है, (% आरएसपी) स्रोत कहा जाता है या src और% rsp को गंतव्य या dst कहा जाता है।
यह क्या करता है कि यह रजिस्टर में दिखता है% आरएसपी अपना मूल्य प्राप्त करता है और स्मृति के लिए जाता है [ब्रैकेट "()" का मतलब उस मान के मेमोरी वैल्यू में जा रहा है] और फिर इसे% आरएसपी में निर्दिष्ट करता है।
जबकि दोनों एक ही रजिस्टर कर रहे हैं अंतर यह है कि% आरएसपी परिवर्तन का मूल्य।
ईजी: कहते हैं की सुविधा देता है% आरएसपी मूल्य 22 है लेकिन% आरएसपी की स्मृति 30.
है इस निर्देश का movq (% आरएसपी),% आरएसपी का उपयोग
% आरएसपी के नए मूल्य 30 है दोबारा क्योंकि (% आरएसपी) को% आरएसपी का मान मिलता है जो 22 मानता है और फिर (% आरएसपी) मेमोरी वैल्यू 30 पर जाता है और फिर इसे गंतव्य पर% आरएसपी पर निर्दिष्ट करता है, जो% आरएसपी स्वयं होता है।
इस के बाद से आरएसपी रजिस्टर केवल (IA32 आर्किटेक्चर पर, और मैं एक और वास्तुकला आरएसपी का उपयोग करता है याद नहीं है) 64-बिट में मौजूद है, 64-बिट निश्चित रूप से है। इसके उद्देश्य का विश्लेषण भी उचित लगता है। – Zooba