2012-07-23 19 views
6

मैंने हाल ही में असेंबली सीखना शुरू कर दिया है और जैसा कि मैंने इंटरनेट पर देखा है, मैं देखता हूं कि अधिक से ज्यादा लोग कहते हैं कि असेंबली बेकार नहीं है, लेकिन यह उस भाषा में चीजों को प्रोग्राम करने का समय भी नहीं है जिसके लिए समय और प्रयास की आवश्यकता है उच्च स्तर की भाषाओं की तुलना में। क्या एक उच्च स्तरीय भाषा कार्यक्रम और निम्न स्तर के बीच की दक्षता वास्तव में आजकल ध्यान देने के लिए पर्याप्त ध्यान देने योग्य नहीं है, और क्या वहां एक और निम्न स्तर की भाषा है जो असेंबली जैसी व्यापक रूप से उपयोग की जाती है?असेंबली केवल निम्न स्तर की प्रोग्रामिंग भाषा है, और यदि नहीं तो यह सबसे व्यापक रूप से उपयोग किया जाता है?

+1

आप जो प्रश्न पूछ रहे हैं उसका एक हिस्सा कुछ ऐसी चीज के लिए पूछता है जो एक कठिन तथ्य से अधिक राय है। चाहे अतिरिक्त गति (लोग कह रहे हैं कि कंपाइलर्स इतने अच्छे हैं कि आप दशकों तक अतिरिक्त गति नहीं प्राप्त कर सकते हैं, यह अभी भी सत्य नहीं है) आप उस पर खर्च किए जाने वाले अतिरिक्त समय के लायक हैं, निर्भर करता है। लोकप्रिय राय यह है कि आपको जितना संभव हो उतना प्रदर्शन के साथ मैला होना चाहिए, और यह पुष्टि करता है कि "मूर के कानून अगले दशक में इसे तेजी से बनाएगा"। – harold

+0

यह वास्तव में, वर्तमान कंपाइलरों को हरा करने के लिए वास्तव में मुश्किल है। आप खुद से पूछ सकते हैं, क्या आप चाहते हैं कि मैं प्रोग्राम को अनुकूलित करने के लिए कई घंटे ($ 100/घंटा पर) खर्च करूं, या आप अपने $ 100 को अधिक रैम और अतिरिक्त सीपीयू पर खर्च करना चाहते हैं? हार्डवेयर सस्ता है, अच्छे प्रोग्रामर महंगे हैं। –

+0

@ बोपर्सन आप $ 100 प्रति घंटे कमाते हैं? किसी भी तरह, तर्क की वह पंक्ति केवल सॉफ्टवेयर के लिए काम करती है जिसे आप केवल स्वयं का उपयोग करने जा रहे हैं। अन्यथा एक लाख लोगों को अधिक रैम पर $ 100 खर्च करना होगा * या * बस अपने प्रतिद्वंद्वी के सॉफ़्टवेयर को अपने बजाय खरीद लें। – harold

उत्तर

10

एक उच्च स्तर की भाषा कार्यक्रम और एक कम स्तर एक के बीच दक्षता वास्तव में भी पर्याप्त ध्यान देने योग्य आजकल

अक्सर पर ध्यान देना नहीं है, compilers एक बहुत बेहतर विधानसभा से डेवलपर्स लिख सकते हैं उत्पन्न । कुछ डेवलपर्स हैं जो कंपाइलर को हरा सकते हैं। लेकिन निम्न स्तर के कोड लिखने के बाद विवरणों पर अधिक ध्यान देने की आवश्यकता है और लिखना और बनाए रखना कठिन है, यह आमतौर पर कोड के केवल एक छोटे विशिष्ट टुकड़े होते हैं जो दक्षता के लिए असेंबली में लागू होते हैं। अंतर ध्यान देने योग्य हो सकता है। लेकिन यदि डेवलपर्स झूठी-अनुकूलन करते हैं तो यह भी उल्लेखनीय नहीं हो सकता है।

मैं आपको माइकल Abrash's Graphics Programming Black Book पढ़ने की सलाह दूंगा - इसमें असेंबली और अनुकूलन + वास्तविक जीवन से अच्छी कहानियां हैं।

और क्या वहां एक और निम्न स्तर की भाषा है जो असेंबली जैसी व्यापक रूप से उपयोग की जाती है?

असेंबलर शायद निम्नतम स्तर एप्लिकेशन प्रोग्रामिंग भाषा है। एकमात्र अन्य उपाय बाइनरी कोड हाथ से लिखना होगा, लेकिन बाइनरी ऑपकोड्स को शायद ही कभी "भाषा" कहा जा सके।

हालांकि, प्रोग्रामिंग सॉफ्टवेयर से परे चला जाता है। हार्डवेयर को भी प्रोग्राम किया जाना चाहिए। हार्डवेयर विवरण भाषाएं (एचडीएल) हैं जिनका उपयोग प्रोग्राम हार्डवेयर के लिए किया जा सकता है (यानी आप अपना स्वयं का सीपीयू बना सकते हैं)। सबसे लोकप्रिय एचडीएल भाषाएं Verilog और VHDL हैं।

+0

@kjh: आपका स्वागत है। मैंने अभी अमेज़ॅन पर पुस्तक के लिए एक हास्यास्पद कीमत देखी है। यह मुफ्त में ऑनलाइन भी उपलब्ध है, यहां - http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/graphics-programming-black-book-r1698 –

7

लेखन सभा सरल समय में उपयुक्त थी। वापस जब एक सी संकलक में कोड जनरेटर अभी तक बहुत स्मार्ट नहीं था और मशीन कोड के निष्पादन समय की भविष्यवाणी करना आसान था।

यह खत्म हो गया है और इसके साथ किया गया है, कोई भी मानव कोड कोड जेनरेटर में निर्मित स्मारक और न ही विस्तार पर इसके निरंतर ध्यान को हरा सकता है। जब आप कैश प्रीफेच डालते हैं तो वास्तव में जानने के लिए आवश्यक प्रकार की जानकारी ताकि डेटा सही समय पर उपलब्ध हो। और कैसे निर्देशों को ठीक करने के लिए आपको सही सुपर-स्केलेबिलिटी मिलती है। और nops को ठीक से सम्मिलित करें ताकि कूद लक्ष्य को गठबंधन किया जा सके। और यांत्रिक रूप से loops अनलॉक करने के लिए कैसे। और सिम द्वारा प्रदान की गई ऑटो-समांतरता का लाभ कैसे लें। आदि। और ऐसा करने के लिए सिर्फ एक बार नहीं, लेकिन कोड बदलते समय बार-बार ऐसा होता है।

3

उच्च स्तर की भाषाओं के कंपाइलर हर दिन बेहतर हो रहे हैं। पिछले असेंबलर चाल में प्रदर्शन में काफी वृद्धि हो सकती है। आजकल, कंपाइलर्स इन कई चालों को स्वयं लागू करते हैं।

उदाहरण हैं: बजाय विभाजित करने की स्थानांतरण, एक स्विच/मामले के लिए एक कूद-तालिका में कार्यक्रम काउंटर से छेड़छाड़, कार्यों को इनलाइन अगर वे केवल एक बार उपयोग किया जाता है, आदि

अभी भी optimalisation के लिए कमरे, है, लेकिन प्रदर्शन लाभ इतना कम होगा कि उच्च स्तर की भाषा का उपयोग करना और रखरखाव के लिए जाना बेहतर है।

3

खैर, "असेंबली" वास्तव में विभिन्न किस्मों का संग्रह है। यह उस आर्किटेक्चर पर निर्भर है जिसके लिए आप प्रोग्रामिंग कर रहे हैं। उदाहरण के लिए, एआरएम, या एमआईपीएस, या किसी भी आर्किटेक्चर के लिए असेंबली से x86 (और होगा) के लिए असेंबली बहुत अलग हो सकती है। यह इस तथ्य के कारण होता है कि असेंबली प्रोसेसर चलाने वाले बाइनरी कोड का एक-एक-एक अनुवाद है। चूंकि विभिन्न आर्किटेक्चर के पास विभिन्न निर्देश सेट होते हैं, इसलिए उनकी असेंबली भाषा भी अलग होती है।

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