2012-05-09 21 views
5

स्कूल में हमें सिखाया गया है कि कंपाइलर्स कंप्यूटर प्रोग्राम को कंप्यूटर प्रोग्राम में संकलित करते हैं। हमें यह भी सिखाया गया है कि मशीन भाषा में हार्डवेयर के लिए सीधे निर्देश होते हैं। फिर एक ही संकलित प्रोग्राम विभिन्न हार्डवेयर कॉन्फ़िगरेशन पर विभिन्न हार्डवेयर कॉन्फ़िगरेशन पर कैसे चला सकता है?विभिन्न मशीनों पर मशीन भाषा चलाने के लिए एक प्रोग्राम कैसे संकलित किया जा सकता है?

उत्तर

10

निर्भर करता है कि आप 'अलग हार्डवेयर' से क्या मतलब रखते हैं यदि यह एक ही प्रोसेसर (या एक ही परिवार जैसे इंटेल x86) है तो मशीन कोड निर्देश समान हैं।

अतिरिक्त हार्डवेयर विभिन्न बाह्य उपकरणों (स्क्रीन, डिस्क प्रिंटर आदि) तो ऑपरेटिंग सिस्टम, आप निर्देशों उन्हें ड्राइव करने के लिए

तो तुम्हारा मतलब का एक संगत सेट देकर उन विवरण छुपाता है कैसे आप एक प्रोग्राम चला सकते हैं है एक इंटेल x86 पर एआरएम सीपीयू के लिए, तो आप कुछ प्रकार के वर्चुअल मशीन एमुलेटर को छोड़कर नहीं कर सकते हैं जो प्रत्येक एआरएम निर्देशों को पढ़ता है और या तो उन्हें x86 में अनुवाद करता है या x86 funcs के सेट के समान कार्यक्षमता चलाता है और फिर रिटर्न वही जवाब जो एआरएम ने किया होगा।

संपादित करें: मुझे लगता है कि आप अलग-अलग एचडब्ल्यू के साथ पीसी का मतलब है - यानी विभिन्न परिधीय लेकिन एक ही प्रोसेसर परिवार?

हार्डवेयर से बात करने में विशिष्ट निर्देश शामिल नहीं होते हैं - यह ज्यादातर उन विशिष्ट स्थानों पर स्मृति को स्थानांतरित करने का विषय है जहां ऑपरेटिंग सिस्टम और/या डिवाइस ड्राइवर विशेष रूप से उस डिवाइस पर जाने वाले डेटा के लिए आरक्षित हैं। डॉस और बीआईओएस के पुराने दिनों में आप उस डेटा पर कार्य करने और एचडब्ल्यू को भेजने के लिए BIOS में एक विशिष्ट बिट कोड को कॉल करने के लिए एक इंटरप्ट को ट्रिगर करेंगे।

+0

धन्यवाद। मैं समझ नहीं पाया कि प्रोग्राम ओएस के एपीआई से कैसे जुड़ता है? मुझे लगता है कि एक अमूर्त स्तर है जो प्रोग्राम और प्रोसेसर के बीच बैठता है और यह कुछ निर्देशों को निष्पादित करता है और दूसरों को प्रोसेसर को पास करता है। और कौन सी भाषा (या भाषाएं) इन "वर्चुअल" निर्देशों में लिखी गई हैं? मैं उस प्रक्रिया के बारे में और कहां पढ़ सकता हूं? –

+0

यह विशिष्ट निर्देशों की बजाय स्मृति को ले जा रहा है। पुराने दिनों में यह आसान था - स्क्रीन एक निश्चित पते पर थी, आपने उस पते पर '65' लिखा था और 'ए' को टोपी कोने में दिखाई दिया था, आपने 1 को दूसरे स्थान पर लिखा था और यह उस char का रंग सेट करता था लाल। –

+0

संकलित किया गया एक सी प्रोग्राम वर्तमान मशीन पर मौजूद पुस्तकालयों से जुड़ा होगा। यहां तक ​​कि यदि प्रोसेसर आर्किटेक्चर समान है, तो यदि कंप्यूटर ए से निष्पादन योग्य कंप्यूटर बी में स्थानांतरित हो जाता है, तो क्या निष्पादन योग्य नहीं होगा यदि कंप्यूटर बी में कंप्यूटर ए के समान पुस्तकालय नहीं हैं? – Sophtware

4

एक एमुलेटर या वर्चुअल मशीन के साथ, इनमें से कोई भी फ्लाई पर मशीन भाषा का प्रभावी ढंग से अनुवाद करता है।

+0

तो क्या आपका मतलब है कि प्रक्रिया में किसी प्रकार का अनुकरण हमेशा उपयोग किया जाता है? –

+0

@BobbyMarinoff: ऐसी परिस्थितियों में जहां आपने एक सीपीयू आर्किटेक्चर के लिए कोड संकलित किया है और इसे एक अलग CPU आर्किटेक्चर पर चला रहे हैं, तो कुछ अनुवाद करना होगा। संक्षिप्त उत्तर के लिए –

0

मुझे लगता है कि यह कहना अधिक सटीक है कि देशी कंपाइलर प्रोसेसर के एक विशिष्ट निर्देश सेट को संकलित करते हैं। चूंकि प्रोसेसर के परिवार हैं जो पीछे की संगतता रखते हैं: 8086 - 80386 - 80486 - 80586 - ड्यूल कोर - क्वाड कोर ...; तो प्रत्येक प्रोसेसर अपने पूर्वजों के निर्देश चलाता है। यदि आप अपने कोड को प्रोसेसर आर्किटेक्चर में पोर्ट करना चाहते हैं, तो आपको निश्चित रूप से वर्चुअल मशीन या एमुलेटर की आवश्यकता है, जैसा कि पहले उल्लेख किया गया था।