2010-11-09 9 views
5

संभव डुप्लिकेट:
C/C++ function definitions without assemblyप्रिंटफ आंतरिक रूप से कैसे काम करता है।

हाय फिर से, मुझे पता है कि कैसे काम करता है printf आंतरिक ... आंतरिक रूप से मैं क्या अंतर्निहित प्रणाली कॉल मतलब चाहते/ISRs आदि तंत्र है उपयोग किया गया ... और परिवर्तनीय तर्क सूची के बारे में नहीं ...

कारण: मैं एफएएसएम का उपयोग कर रहा हूं लेकिन कंसोल i/o के लिए वहां बहुत कम है, मुझे पता है कि मैं पी का उपयोग कर सकता हूं सी पुस्तकालय से उपलब्ध rintf (मुझे नहीं पता कि यह कैसे एक अलग बिंदु है)

धन्यवाद।

+2

आप इसे खुला स्रोत कार्यान्वयन में देख कर प्राप्त कर सकते हैं – Andrey

+0

http://www.koders.com/c/fid4E0FA789459803C1E4369279B96E5C9B257941C8.aspx?s=printf#L7 – Andrey

+0

करने के लिए [printf के हार्डवेयर को समझना] (http समान: // stackoverflow.com/questions/2457656/understanding-the-hardware-of-printf) – jschmier

उत्तर

5

write(2) सिस्टम कॉल फ़ाइल वर्णनकर्ता STDOUT करने के लिए सेट के साथ प्रयोग किया जाता है (अपने मूल्य 1 है)।

असेंबली से सिस्टम कॉल करने के लिए, ईएक्स रजिस्टर को सिस्टम कॉल की आईडी पकड़नी है (मुझे लगता है कि write() की विशेष संख्या 3 है) और बाकी रजिस्टरों (ईबीएक्स, एक्क्स, ...) तर्क शामिल करना होगा। फिर int 80h आपके नियंत्रण से नियंत्रण को कर्नेल रूटीन पर स्विच करेगा जो सिस्टम कॉल को संभालता है।

उपरोक्त प्लेटफ़ॉर्म-विशिष्ट है, लेकिन लगभग सभी यूनिक्स-जैसे ऑपरेटिंग सिस्टम इस तरह काम करते हैं।

+0

सिस्टम कॉल [कार्यान्वयन] (http://en.wikipedia.org/wiki/System_call#Typical_implementations) आर्किटेक्चर विशिष्ट भी हो सकता है। सीआईएससी आर्किटेक्चर जैसे x86 समर्थन अतिरिक्त तकनीकों जैसे कि सिस्कल/सिसेन्ट या सिसेट/सिसेक्सिट "फास्ट" कंट्रोल ट्रांसफर निर्देशों को समर्थन देता है जो बिना किसी बाधा के ओवरहेड के नियंत्रण को तुरंत स्थानांतरित करने के लिए डिज़ाइन किए गए हैं। – jschmier

संबंधित मुद्दे