2009-06-19 15 views
10

ऐसा लगता है कि डिवाइस चालकों, या ओएस कर्नेल आदि के मूल के अलावा आजकल कोई भी असेंबली का उपयोग नहीं करता है। किसी को भी इसका ज्ञान है कि वर्तमान में अन्य चीजों के लिए इसका इस्तेमाल किया जा रहा है?किस प्रकार की परियोजनाएं (स्पष्ट ओएस सामान के अलावा) असेंबली भाषा का उपयोग करती हैं?

मेरा मतलब है पीसी-शैली और बड़े हार्डवेयर, किशोर छोटे प्रोसेसर के साथ एम्बेडेड सामान नहीं।

+1

एम्बेडेड सामानों को सुस्त करने की कोई ज़रूरत नहीं है, कुछ क्वाड कोर कॉर्टेक्स और इसी तरह के एम्बेडेड माइक्रोकंट्रोलर हैं जो आपके विशिष्ट खुदरा पीसी को धूम्रपान कर सकते हैं। यहां तक ​​कि इन अनुप्रयोगों के अधिकांश भाग के लिए सी/सी ++ भी हैं, इस तथ्य के आधार पर थोड़ी अधिक असेंबली के साथ कि विकास दल शायद सभी असेंबली जानता है। – marr75

+0

मुझे बर्बाद करने का कोई इरादा नहीं था, यह सिर्फ मेरी जिज्ञासा पीसी/सर्वर दुनिया के लिए विशिष्ट थी। – JCCyC

उत्तर

8

Boost, जैसा कि आधुनिक सी ++ है, निम्न स्तर के प्रदर्शन-महत्वपूर्ण बिट्स जैसे atomic shared counters के लिए इनलाइन असेंबली का उपयोग करता है।

संपादित करें: जैसा कि @TokenMacGuy सही ढंग से नोट करता है, "प्रदर्शन" यहां एक गलत शब्द है। बूस्ट उन चीजों के लिए असेंबली भाषा का उपयोग करता है जो मानक सी ++ जैसे परमाणुओं (और कंपाइलर इंट्रिनिक्स कुछ कारणों से उपलब्ध नहीं हैं)

+0

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

+1

मुझे आश्चर्य है कि आपके चाचा का निर्देश सेट क्या है, risc :)? –

+0

@JCCyC, याह जहां कोड प्रति पंक्ति एक कमांड था और स्तंभों में स्वरूपित था ... –

3

मुझे विश्वास है कि Folding @ होम समानांतर कंप्यूटिंग परियोजना अधिकतम गति के लिए अनुकूलित विधानसभा कोड का उपयोग करता है *

  * ध्यान दें:। यह अर्थ नहीं है विधानसभा हमेशा तेजी से तो सी/C++ है।

8

कम या ज्यादा स्पष्ट रूप से, संकलक बैक-एंड और गतिशील रीकंपलिंग सीपीयू सिमुलेटर जैसे संबंधित प्रौद्योगिकियों के लिए असेंबली प्रोग्रामिंग की आवश्यकता होती है।

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

संपादित करें: इन दिनों खेल एक GPU में उनकी गणना की सबसे अधिक है। इन गणना संसाधनों में से अधिकतर प्राप्त करना हमेशा ओपनजीएल या डायरेक्टएक्स का उपयोग करना संभव नहीं है, और इन प्रोसेसर के विक्रेताओं को अपने हार्डवेयर से अधिक निचोड़ने के लिए कई टूल प्रदान करते हैं। यद्यपि क्यूडा या ओपनसीएल अच्छी तरह से ज्ञात शब्द हैं, फिर भी वे जीपीयू हार्डवेयर पर अपेक्षाकृत उच्च स्तर के अमूर्तता पर हैं, जो एक ऐसी भूमिका में भर रहे हैं जो ठेठ (वॉन न्यूमैन) सीपीयू पर सी की भूमिका के समान है। इन उत्पादों के लिए developerpages पर एक नज़र डालें और आपको GPU गणना संसाधनों का सर्वोत्तम उपयोग करने के लिए दर्जनों तरीके मिलेंगे, और अमूर्तता के प्रत्येक स्तर पर।

+0

आजकल गेम प्रोग्रामिंग का बहुमत सी या सी ++ में किया जाता है। प्रमुख शेष अपवाद कोड होंगे जो सिम इकाइयों (जैसे एक्स 360 के वीएमएक्स या सेल एसपीयू) का लाभ उठाते हैं, हालांकि इन मामलों में भी इनलाइन असेंबली के बजाय पुस्तकालयों या कंपाइलर इंट्रिनिक्स का उपयोग अक्सर किया जाता है। – Whatever

+0

ध्यान में रखते हुए कि गेम प्रोग्रामिंग में काम का बड़ा हिस्सा GPU- बाध्य और डिस्क-I/O बाध्य है, अधिकांश समय असेंबली आपको उस क्षेत्र में बहुत अधिक लाभ नहीं पहुंचाती है। दूसरी तरफ, गेम प्रोग्रामिंग में, आप कोड रखरखाव के बारे में बहुत चिंता नहीं करते हैं, इसलिए असेंबली के प्राथमिक नुकसान में से कोई भी लागू नहीं होता है। – jkerian

+0

@ जो कुछ भी: मेरा यह अनुमान लगाने का मतलब नहीं था कि गेम पूरी तरह से असेंबली में लिखे गए हैं। मुझे उम्मीद है कि कम से कम कुछ और अभिव्यक्ति में गेम लिखे गए हैं, और कोड के केवल बहुत ही गर्म क्षेत्रों को असेंबली भाषा में बदल दिया गया है .. – SingleNegationElimination

0

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

+1

लेकिन यह आमतौर पर ग्राफिक्स प्रोसेसर में उपलब्ध निर्देशों को लिख रहा है, न कि पीसी असेंबली भाषा। – Nosredna

+0

@ नोस्रेना: हाँ, यह उस उदाहरण के लिए सही है। –

+1

यहां तक ​​कि शेडर्स उच्च स्तर की भाषाओं (सीजी, एचएलएसएल, जीएलएसलांग) में भी लिखे गए हैं। – Whatever

1

आखिरी बार जब मैं असेंबलर में आया तो मैं क्वैक I स्रोत कोड को हैक करने के लिए उपयोग करता था। जॉन गणैक द्वारा एमएएसएम में सभी गणित पुस्तकालयों (विशेष रूप से डॉट उत्पादों के लिए कुछ भी) लिखा गया था। यह सामान फ़्लोटिंग-पॉइंट गहन था, और उस समय सी फ्लोटिंग ऑपरेशंस के लिए विशेषज्ञ रूप से हस्तनिर्मित एएसएम के रूप में उतना अच्छा नहीं था। इसके अलावा, चूंकि कंप्यूटर बहुत अधिक CPU-limited थे, और चूंकि क्वैक ने सीपीयू को प्रतिपादन के लिए उपयोग किया था, इसलिए प्रत्येक ऑपरेशन mattered, इसलिए एएसएम ने सबसे अच्छा काम किया।

0

मुझे लगता है कि सबसे प्रमुख कार्यक्रम जहां असेंबलर का उपयोग किया जाता है बूट-लोडर हैं।

+0

मैं इसे "स्पष्ट ओएस सामान" के तहत फाइल करूंगा। – JCCyC

+0

तकनीकी रूप से, यह ओएस का हिस्सा नहीं है (उदाहरण के लिए लिनक्स देखें), लेकिन मुझे आपका मतलब है;) –

0

मैंने एक बड़े आवेदन के लिए दिन में आईबीएम 370 असेंबलर लिखा था (विक्रेता बेचा गया उत्पाद , बड़ी कंपनियों द्वारा उपयोग किया जाता है) जो ऑपरेटिंग सिस्टम में हुक से जानकारी एकत्रित करता है। हालांकि, मैं केवल सादा जेन प्रोग्रामिंग कर रहा था: स्क्रीन, रिपोर्ट, आदि, असेंबलर में। यह आश्चर्यजनक रूप से तेजी से भाग गया, लेकिन पूरी तरह से असेंबलर में था।मुझे यकीन है कि यह अभी भी चल रहा है और विंडोज़ और लिनक्स प्लेटफ़ॉर्म के लिए सॉफ़्टवेयर की विशिष्टता के मुकाबले कीमतों के लिए आज बेचा गया है।

+0

आईबीएम 370 में सबसे प्यारा असेंबलर प्रोग्रामिंग मैंने कभी किया था। निर्देश सेट को आसान हाथ असेंबलर प्रोग्रामिंग के लिए डिज़ाइन किया गया था, और असेंबलर दिन के लिए बहुत अच्छा था। –

0

न्यूथ के अनुसार, एल्गोरिदम की दक्षता का अध्ययन करते हुए। उन्होंने अपनी पुस्तकों में उल्लेख किया है कि अध्ययन करने का कोई बेहतर तरीका नहीं है कि कैसे एल्गोरिदम असेंबली में लिखने से काम करता है।

0

कभी-कभी कुछ विशेषताएं उच्च स्तर की भाषा में लागू नहीं होती हैं, और इनलाइन असेंबली का उपयोग इसके बजाय किया जाता है। सी ++ लाइब्रेरी क्यूटी में कुछ इनलाइन असेंबली है, उदाहरण के लिए; मेरा मानना ​​है कि यह वस्तु आत्मनिरीक्षण प्रणाली के हिस्से के लिए प्रयोग किया जाता है।

इसके अतिरिक्त, glibc (gcc के लिए सी लाइब्रेरी) ऑप्टिमाइज़ेशन के लिए असेंबली का उपयोग करता है। आईआईआरसी सॉफ्टवेयर आधारित फ्लोटिंग-पॉइंट गणित कार्यान्वयन में से एक में असेंबली में लिखे गए महत्वपूर्ण भाग हैं।

असेंबली सीखने के प्राथमिक कारणों में से एक, हालांकि, डिबगिंग है। कुछ मौकों पर, मैंने खुद को उन परिस्थितियों में प्राप्त कर लिया है जहां असेंबली नहीं जानती थी, मुझे विशेष रूप से चिपचिपा समस्या को डीबग करने से रोक दिया होता।

1

यदि आप अपने सी/सी ++ स्रोत के असेंबली आउटपुट को देखते हुए बहुत समय बिताते हैं, तो आप बहुत जल्दी नोटिस करेंगे कि सबसे अच्छे अनुकूलन कंपेलर भी अच्छे असेंबली प्रोग्रामर की तुलना में बेहतर असेंबली करते हैं। फ़ंक्शन को इनलाइन करने के बारे में निर्णय, लूप को कैसे संभालें, पोस्ट बनाम पूर्व वृद्धि (जो कि कई कंपाइलर्स तय करते हैं कि अब आपके लिए कैसे संभालना है)। सर्वश्रेष्ठ भाग्यशाली एक कंपाइलर को आउटमार्ट करना जिसमें एक बड़ा समुदाय इसे विकसित कर रहा है और एक बेहतर क्षमता है कम से कम सामान्य परिस्थितियों में, आपके से पते और परिभाषाओं का प्रबंधन करने के लिए।

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

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

1

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

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

1

उपयोगिता कार्य जो उच्च स्तरीय भाषा का समर्थन करने की अपेक्षा नहीं करता था। एक पुराना उदाहरण तब से है जब मैं आरएसएक्स -11 एम पर फोरट्रान के साथ काम करते हुए सी और यूनिक्स की कुछ नस्लों को प्राप्त करने का प्रयास कर रहा था। मैं चारों ओर स्वरूपण तारों को पास करना चाहता था और सरल सी शैली का उपयोग करना चाहता था। Printf() को ऑपरेशन जैसे कुछ कलाकारों को करने की आवश्यकता होती है। फोरट्रान में इस अवधारणा में इतनी कमी नहीं थी() और rcast() को असेंबलर में लिखा गया था। कार्यान्वित अन्य कार्यों को स्थानांतरित किया गया था() और क्लोन()। इन्हें दक्षता के लिए इतना नहीं किया गया क्योंकि वे फोरट्रान की मानसिकता के बाहर अवधारणाओं को विस्तारित कर रहे थे।

2

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

बस एक किस्सा रूप
2

: रोलर कोस्टर टाइकून क्रिस सॉयर (wikipedia reference) द्वारा 86 विधानसभा में पूरी तरह से लिखा गया था (या लगभग)।

0

लगभग हर भाषा में कोड निर्धारित करने वाली दर (स्मृति प्रबंधन के लिए जो कुछ भी आवश्यक है) के बाद स्मृति को स्थानांतरित करने के लिए रनटाइम (-library) द्वारा नियमित रूप से उपयोग किया जाता है। मूव(), memcpy इत्यादि के साथ-साथ प्राइमेटिव्स जैसे बाइट (स्ट्रैचर) आदि की खोज करना।

ये अक्सर संरेखण का शोषण करने के लिए विशेष समर्पित कोड के साथ असेंबलर में भी लिखे गए हैं।

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