मेरे एएसएम विवरण के बारे में थोड़ा अस्पष्ट है, लेकिन मुझे लगता है मैं तुम्हें एक सामान्य विचार दे सकते हैं।
ईएसपी: स्टैक पॉइंटर, ईबीपी: बेस पॉइंटर।
movl $1f, (%0)
मान 0x1f को पैरामीटर 0 (से) में ले जाएं।
movl %%esp, 4(%0)
रजिस्टर ईएसपी की सामग्री को + 4 से ले जाएं।
movl %%ebp, 8(%0)
रजिस्टर ईबीपी की सामग्री को + 8 से स्थानांतरित करें।
movl 8(%1), %%ebp
पंजीकरण (ई +8) की सामग्री को ईबीपी में ले जाएं।
movl 4(%1), %%esp
पंजीकरण ईएसपी में (+ 4) की सामग्री को ले जाएं।
jmp *(%1)
(से) में निहित पते पर जाएं।
"1:" एक कूद लेबल है।
"+ एस" एक "स्रोत" (पढ़ा गया) पैरामीटर, "डी" एक गंतव्य (लिखना) पैरामीटर घोषित करता है। कथन के अंत में रजिस्टरों की सूची "क्लॉबर" सूची है, जो संभवतः एएसएम कोड द्वारा संशोधित रजिस्टरों की एक सूची है, इसलिए संकलक स्थिरता बनाए रखने के लिए कदम उठा सकता है (यानी, ईसीएक्स पर अभी भी वही मूल्य नहीं है पहले जैसा)।
मुझे लगता है कि coco_ctx का अर्थ है "कोको संदर्भ"। तो: फ़ंक्शन "से" संरचना में वर्तमान स्टैक फ्रेम को सहेजता है, और "टू" संरचना में सहेजे गए स्टैक फ्रेम को सेट करता है। असल में, यह वर्तमान फ़ंक्शन से दूसरे फ़ंक्शन में कूदता है।
यही सही है कर रहे हैं के बारे में थोड़ा और अधिक सीख सकते हैं। यह सिर्फ एक समारोह से दूसरे में कूद नहीं रहा है, हालांकि: यह एक पूरे कॉल स्टैक से दूसरे में कूद रहा है; यह निष्पादन संदर्भों को पूरी तरह से स्विच कर रहा है। (इसके अलावा, गोश लेकिन जीसीसी इनलाइन असेंबली सिंटैक्स विचित्र है।) – Crashworks
यह एटी एंड टी सिंटैक्स (http://wiki.osdev.org/Opcode_syntax) सी फंक्शन-कॉल-जैसे वाक्यविन्यास में लपेटा गया है (http://wiki.osdev.org/Inline_Assembly)। आप इसे विश्वास नहीं करेंगे लेकिन मैं वास्तव में इसे "मानक" इंटेल वाक्यविन्यास पर पसंद करता हूं। ;-) – DevSolar
क्या संदर्भ स्विच सी ++ के लिए भी काम करता है या क्या मुझे इस के लिए कुछ अलग लिखना है? – jameszhao00