विश्वविद्यालय में मैंने कंप्यूटर आर्किटेक्चर और असेंबली भाषा प्रोग्रामिंग में अनिवार्य पाठ्यक्रम लिया है। मुझे असेंबली भाषा काफी समय ले रही है और समझने में मुश्किल है। मैं अभी भी समझ नहीं पा रहा हूं कि विधानसभा भाषा क्यों सिखाई जाती है। मैंने अपने प्रशिक्षक से एक ही सवाल पूछा और उसने मुस्कुराया और कहा कि आपको भविष्य में पता चल जाएगा। लेकिन मेरे पास एक प्रकृति है कि एक बार प्रश्न मेरे दिमाग को उत्तेजित करने के बाद मैं जवाब के लिए इतने लंबे समय तक इंतजार नहीं कर सकता। इसलिए मैं पूछना चाहता हूं कि अगर हमें बहुत शक्तिशाली, तेज़ और कुशल प्रोग्रामिंग भाषाएं हैं और शीर्ष पर ऐसी भाषाएं विभिन्न प्रकार के टूल प्रदान करती हैं जो प्रोग्रामिंग को आसान बनाती हैं तो हमें अभी भी असेंबली भाषा की आवश्यकता क्यों होती है। तो क्यों?यदि हमारे पास परिष्कृत उपकरण की पेशकश करने वाली उच्च स्तरीय भाषाएं हैं तो असेंबली भाषा की अभी भी आवश्यकता क्यों है?
उत्तर
कुंजी कार्यों के लिए अभी भी मशीन कोड की आवश्यकता है, उदा। इस तरह के डिवाइस ड्राइवर को
- हार्डवेयर विशिष्ट कोड,
- कम स्तर कोड जहां प्रदर्शन के लिए महत्वपूर्ण है आदि
अक्सर, विधानसभा भाषा उच्च स्तर की भाषाओं में मिश्रित किया जा सकता है, जैसे सी, जहां विधानसभा को सी कोड में इनलाइन जोड़ा जा सकता है।
यह कहा गया है कि अंतर्निहित हार्डवेयर आर्किटेक्चर को समझने के लिए अभी भी एक अच्छा विचार है, भले ही आप उच्च स्तर की भाषा में प्रोग्रामिंग करेंगे, क्योंकि यह आपको ढेर, ढेर, पॉइंटर्स इत्यादि के बारे में जानकारी देगा।
एक बहुत अच्छा कारण यह है कि सभी प्रोग्रामिंग भाषाएं कंप्यूटर का काम करने का एक अमूर्त हैं। सिद्धांत रूप में, उच्च स्तरीय भाषाओं के लिए, अमूर्तता का अर्थ है कि प्रोग्रामर को कंप्यूटर के ब्योरे के बारे में चिंता करने की ज़रूरत नहीं है।
लेकिन abstraction is always leaky, उदा। अधिकांश (यदि नहीं सभी) उच्च-स्तरीय भाषाएं स्वचालित रूप से सीपीयू कैश (जैसे कैश-कोहेरेंसी और झूठी साझाकरण) के लिए बहुत अच्छी तरह अनुकूलित नहीं होती हैं और कुशल मल्टीथ्रेडिंग हमेशा मुश्किल होती है। इसका मतलब है कि यदि प्रदर्शन महत्वपूर्ण है, तो प्रोग्रामर को अपना कोड अलग-अलग लिखना पड़ सकता है।
प्रदर्शन प्राप्त करने का सबसे अच्छा तरीका यह समझकर है कि मशीन कैसे काम करती है ताकि प्रोग्रामर बड़े आर्किटेक्चरल ट्रांसफॉर्मेशन कर सके जो एक कंपाइलर आसानी से नहीं कर सकता है। उदाहरण के तौर पर, यह सुनिश्चित करना कि धागे 64 बाइट्स (कैश लाइनों पर झूठी साझाकरण को कम करने के लिए) में डेटा संसाधित करते हैं, या सरणी-ऑफ-स्ट्रक्चर ⇔ स्ट्रक्चर-ऑफ-एरेज़ ट्रांसफ़ॉर्मेशन करते हैं।
सभा (और कुछ हद तक सी) इन प्रदर्शन विवरण सीखने का एक बहुत अच्छी तरह से है, क्योंकि यह वास्तव में बहुत आसान समझने के लिए कंप्यूटर क्योंकि आप पर नियंत्रण वास्तव में क्या हर कदम पर होता है कि वास्तव में क्या कर रहा है बनाता है।
(टपकाया अमूर्त बिंदु भी विशिष्ट/कस्टम हार्डवेयर घटकों तक पहुँचने के लिए लागू होता है।)
आपके लिए प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। अब यह मेरे लिए असेंबली भाषा की जरूरत स्पष्ट है। –
उच्च स्तरीय भाषाओं हार्डवेयर के बारे में लगभग कुछ भी नहीं पता है और अक्सर यह तक पहुँचने का कोई तरीके हैं। यही वह जगह है जहां असेंबली बचाव के लिए आता है। दूसरा उपयोग कोड का आकार/गति अनुकूलन है। –
यह सवाल लगता है जैसे यह http://programmers.stackexchange.com पर बेहतर फिट बैठता है। संक्षेप में: क्योंकि सभी उच्च स्तरीय भाषाओं को स्वचालित रूप से एएसएम में संकलित किया जा रहा है। इससे आपको अंतिम परिणाम पर कोई नियंत्रण नहीं मिलता है, कंप्यूटर वास्तव में क्या करता है। और जबकि कंपाइलर्स अच्छे होते हैं, वे सभी छोटी सी चालों को नहीं जानते और पूर्णता के लिए कोड अनुकूलित कर सकते हैं।यदि आप अधिकतम प्रदर्शन चाहते हैं, तो आपको प्रत्येक छोटे विवरण में कंप्यूटर क्या करता है, इस पर पूर्ण नियंत्रण की आवश्यकता होती है, जो एक उच्च स्तरीय भाषा आपको नहीं देती है। – deceze
धन्यवाद एलेक्स और धोखा –