हमें विधानसभा भाषा की आवश्यकता क्यों है?


27

हम ज्यादातर उच्च स्तरीय भाषा में कार्यक्रम लिखते हैं। इसलिए पढ़ाई के दौरान मैं विधानसभा की भाषा में आया। इसलिए एक असेंबलर असेंबली लैंग्वेज को मशीन लैंग्वेज में बदल देता है और एक कंपाइलर हाई लेवल लैंग्वेज के साथ ऐसा ही करता है। मैंने पाया कि असेंबली लैंग्वेज में निर्देश हैं जैसे कि r1 r3, एक चाल 5 आदि और यह अध्ययन करना कठिन है। तो असेंबली लैंग्वेज क्यों बनाई गई? या क्या यह वही थी जो उच्च स्तरीय भाषा से पहले भी आई थी? मैं अपने कंप्यूटर इंजीनियरिंग वर्ग में कोडांतरकों के बारे में क्यों पढ़ रहा हूं?


13
असेंबलर मानव-पठनीय मशीन कोड है, इसीलिए।
लेडी बाउर

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

जवाबों:


32

"तो विधानसभा भाषा क्यों बनाई गई?"

असेंबली लैंग्वेज को मशीन लेवल कोडिंग के लिए एक सटीक शॉर्टहैंड के रूप में बनाया गया था, ताकि आपको पूरे दिन 0s और 1s की गिनती न करनी पड़े। यह मशीन स्तर कोड के समान काम करता है: निर्देशों और ऑपरेंड्स के साथ।

"कौन सा पहले आया था?"

विकिपीडिया में प्रोग्रामिंग लैंग्वेज के इतिहास के बारे में एक अच्छा लेख है

"मैं अपने कंप्यूटर इंजीनियरिंग वर्ग में कोडांतरकों के बारे में क्यों पढ़ रहा हूँ?"

हालांकि यह सच है, आप शायद अपने आप को विधानसभा में अपने अगले ग्राहक के ऐप को नहीं लिखेंगे, अभी भी विधानसभा सीखने से बहुत कुछ हासिल करना है।

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

असेंबली भाषा प्रोसेसर के जितनी करीब होती है, उतनी ही आप प्रोग्रामर के रूप में प्राप्त कर सकते हैं इसलिए एक अच्छी तरह से डिज़ाइन किया गया एल्गोरिथ्म धधक रहा है - असेंबली गति अनुकूलन के लिए बहुत अच्छा है। यह प्रदर्शन और दक्षता के बारे में है। असेंबली भाषा आपको सिस्टम के संसाधनों पर पूरा नियंत्रण देती है। असेम्बली लाइन की तरह, आप रजिस्टरों में एकल मानों को धकेलने के लिए कोड लिखते हैं, मूल्यों या पॉइंटर्स को पुनः प्राप्त करने के लिए सीधे मेमोरी पतों से निपटते हैं। (स्रोत: codeproject.com )


29

हमें विधानसभा भाषा की आवश्यकता क्यों है?

खैर, वास्तव में केवल एक ही भाषा है जिसकी हमें कभी आवश्यकता होगी , जिसे "मशीन भाषा" या "मशीन कोड" कहा जाता है। यह इस तरह दिख रहा है:

0010000100100011

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

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

0010|0001|0010|0011

operation type  source register  other source  destination register
0010            0001             0010          0011

ये मूल्य इनसे मेल खाते हैं:

operation type 0010 = addition
source register 0001 = register 1
other source 0010 = register 2
destination register 0011 = register 3

तो यह ऑपरेशन 1 और 2 रजिस्टर में संख्याओं को जोड़ देगा और उस मूल्य को रजिस्टर 3 में डाल देगा। यदि आप सचमुच इन मूल्यों को सीपीयू में रखते हैं और इसे "जाना" बताते हैं, तो यह आपके लिए दो नंबर जोड़ देगा। ऑपरेशन "घटाना" यहां 0010 के बजाय 0011 या कुछ और हो सकता है। जो भी मूल्य सीपीयू एक घटाव करेगा।

तो एक कार्यक्रम इस तरह दिख सकता है (इसे समझने की कोशिश न करें, क्योंकि मैंने चीजों को समझाने के लिए मशीन कोड के इस विशेष संस्करण को बनाया है):

instruction 1: 0010000100100011
instruction 2: 0011000110100100
instruction 3: 0101001100010111
instruction 4: 0010001001100000

क्या यह पढ़ने के लिए चूसना है? निश्चित रूप से। लेकिन हमें सीपीयू के लिए इसकी आवश्यकता है । ठीक है, अगर हर मशीन कोड एक विशेष कार्रवाई से मेल खाती है, तो बस एक सरल "अंग्रेजी" शॉर्टहैंड बनाने की सुविधा देता है, और फिर एक बार हम समझते हैं कि कार्यक्रम क्या कर रहा है, इसे वास्तविक बाइनरी मशीन कोड में परिवर्तित करें और इसे चलाने के लिए सीपीयू को दें।

तो ऊपर से हमारा मूल निर्देश ऐसा लग सकता है:

(meaning)      operation type  source register  other source  destination register
(machine code) 0010            0001             0010          0011
("English")    add             r1               r2            r3

ध्यान दें कि इस अंग्रेजी संस्करण में मशीन कोड के लिए एक सटीक मैपिंग है । इसलिए जब हम इस "अंग्रेजी" की एक पंक्ति लिखते हैं, तो हम वास्तव में केवल मित्रवत और अधिक समझने योग्य मशीन कोड लिख रहे हैं।

खैर, यह विधानसभा भाषा है। इसलिए यह मौजूद है, और यह मूल रूप से क्यों बनाया गया था।

यह समझने के लिए कि हमें अब इसकी आवश्यकता क्यों है, उपरोक्त उत्तर पढ़ें, लेकिन इसे समझने की कुंजी यह है: उच्च स्तरीय भाषाओं में एक भी प्रतिनिधित्व नहीं है मशीन कोड है। जैसे C, या पायथन, या जो भी:

z = x + y

यह ऊपर से हमारे जोड़ की तरह लगता है, मानकर xरजिस्टर 1 में yहै, रजिस्टर 2 में है, और zरजिस्टर 3 में समाप्त होना चाहिए। लेकिन इस लाइन के बारे में क्या?

z = x * 2 + (y / 6) * p + q - r

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

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

1010010010001001
0010001000010000
0110010000100100
0010001011000010
0010100001000001
0100010100000001
0010010101000100
0010101010100000
0000100111000010

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

(@ राफेल की सलाह पर अतिरिक्त ध्यान दें: आप वास्तव में सीपीयू के उस काम को बाइनरी कोड के अलावा अन्य चीजों के साथ कर सकते हैं, जैसे टर्नरी (बेस 3) या दशमलव कोड, या एएससीआईआई। हालांकि, व्यावहारिक उद्देश्यों के लिए, हम वास्तव में बाइनरी के लिए फंस गए हैं।)


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

जोड़ के लिए धन्यवाद। मैं सहमत हूं, लेकिन विधानसभा के उद्देश्य को समझने के लिए इसे छोड़ दिया। मैं एक नोट जोड़ूंगा।
क्रिस कूपर

15

तो विधानसभा भाषा क्यों बनाई गई थी? या यह वही था जो उच्च स्तर की भाषा से पहले भी आया था?

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

मैं अपने कंप्यूटर इंजीनियरिंग वर्ग में कोडांतरकों के बारे में क्यों पढ़ रहा हूं?

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

यदि आप एक नज़र डालते हैं कि एक संकलक कोड कैसे लिखता है, तो सम्मेलनों को कॉल करने के लिए विकल्पों को देखना आम है जो विधानसभा को जाने बिना शायद समझा नहीं जा सकता है।

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


14

मुझे एक कम व्यावहारिक पहलू जोड़ने दें। यह (शायद) एक ऐतिहासिक कारण नहीं बल्कि आज आपके लिए एक कारण है।

असेंबली (उच्च-स्तरीय भाषाओं की तुलना में) नग्न है । यह कुछ भी नहीं छिपाता है (जो सॉफ्टवेयर में किया जाता है), और यह इस अर्थ में सरल है कि इसमें अपेक्षाकृत छोटा, निश्चित संचालन का सेट है।

यह सटीक एल्गोरिदम विश्लेषण के लिए सहायक हो सकता है। शब्दार्थ और नियंत्रण प्रवाह इतना सरल है कि सभी ऑपरेशन (या अपेक्षित संख्या) की गणना, संक्रमण गणना (संभावना) के साथ नियंत्रण प्रवाह ग्राफ की व्याख्या करके किया जा सकता है। नूथ अपनी टीएओसीपी पुस्तकों में महान प्रभाव के लिए ऐसा करता है, कुछ सबसे कठोर एल्गोरिदम का विश्लेषण करता है।

किस्सा: मेरे सहयोगी ने वास्तव में इस उद्देश्य के लिए जावा बाइटकोड को पढ़ना सीख लिया है।


4

यहाँ उत्तर हैं:

ये सभी उत्तर इस ओर इशारा करते हैं:

  • स्पीड / मेमोरी ऑप्टिमाइजेशन
  • यह समझना कि मशीन कैसे काम करती है
  • इसलिए Noob प्रोग्रामर एक्सपर्ट बन गए
  • यदि आप असेंबली जानते हैं, तो आप जानते हैं कि अपनी हाई लवल भाषा के लिए कंपाइलर कैसे लिखें
  • आदि

1
क्या आप इन सभी विचारों को साझा करते हैं? आपका अनुभव क्या है? (विशेष रूप से, आइटम मेरे लिए कई दशकों से पुराना "तो Noob प्रोग्रामर्स विशेषज्ञों बन" लगता है।)
राफेल

woah woah आपको इस विषय पर इतना मार्मिक नहीं होना है। मैं सिर्फ उसके डुप्लीकेट प्रश्न के उत्तर लिंक कर रहा हूं। और "सो नोब प्रोग्रामर्स बन एक्सपर्ट्स" को यहां सबसे ज्यादा वोट दिया गया था । जाओ उसके साथ मुझसे बहस मत करो =)
कॉम्पिट जूल

1
मैं स्पर्श नहीं कर रहा हूं, मैं आपके उत्तर को एक अच्छा बनाने में आपकी मदद करने की कोशिश कर रहा हूं (यह वर्तमान में नहीं है, जैसा कि आप केवल कुछ संसाधनों से लिंक करते हैं, जिनमें से कोई भी पूरी तरह से प्रश्न का उत्तर नहीं देता है)। तुलनात्मक तरीके से अपने स्वयं के विचारों को शामिल करना उस छोर पर पहला कदम है। (ध्यान दें कि एक बहिष्कृत फैशन में संबंधित राय से, आप उनके लिए एक मूल्य प्रदान करते हैं; दूसरे शब्दों में, आपको यह तर्क करने में सक्षम होना चाहिए कि आप राय को पर्याप्त मान क्यों देते हैं (पुनः) पोस्ट एक उत्तर के रूप में है।)
राफेल

खैर मेरा अनुभव है कि मैं वास्तव में कुछ उच्च स्तरीय प्रोग्रामिंग भाषाओं के अभ्यस्त होने के बाद असेंबली भाषा सीखने से नफरत और संघर्ष कर रहा हूं। और मैं उन लोगों को जानता हूं जो अच्छे प्रोग्रामर हैं या जानते हैं कि C ++ / C पहले से ही ASM में अच्छी तरह से प्रोग्राम कर सकते हैं। मुझे नहीं लगता था कि मेरी राय मेरे जवाब में पोस्ट करने के लिए पर्याप्त थी, इसलिए मैंने ...
कॉम्पिट जूल

आपका पहला लिंक टूट गया है।
होला सो ईदु फेलिज नवाडीद

1

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

इसे काटें या इसे छोड़ें
यदि आप असेंबली को ग्रो करते हैं तो आप जानते हैं कि एक वास्तविक कंप्यूटर कैसे काम करता है।
विधानसभा में शामिल हैं:

  • निर्देश सीखना और उनका क्या मतलब है (डुह)।
  • निर्देश क्या करते हैं, वे क्या नहीं करते और उनके सभी दुष्प्रभावों को समझना
  • सीखना कि सीपीयू निर्देशों को कैसे संसाधित करता है
    • पाइपलाइन कैसे काम करती है।
    • क्या multiscalar मतलब है?
    • CPU कोर क्या है।
    • कैश कैसे काम करता है।
    • समझ कैसे चक्र गणना करने के लिए
    • Agner Fog की शिक्षाओं को सीखना
  • समझ कैसे संकलक कोड उत्पन्न करते हैं और वे कई बार कैसे विफल होते हैं।
  • अच्छी तरह से परिभाषित और बहुत विशिष्ट समस्याओं का अनुकूलन।

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


जब तक आप असेंबली (और इस प्रकार ऑपरेटिंग टेबल पर सीपीयू) आप रैम मशीन (या ट्यूरिंग मशीन हॉरर भगवान ना करे ) के सार के चंगुल से मुक्त नहीं होंगे, तब तक आपको बदबूदार सार की जरूरत नहीं है

L33t Hax0r 5k1llz
असेंबली आपको यह समझने में भी मदद करती है कि 133thax0r सुरक्षा योजनाओं को कैसे पराजित करता है। (प्रश्न: एएसएलआर काम क्यों नहीं करता ? क्योंकि mov rax,fs:[28h]इसे तोड़ता है )।

0.1%
यह असेंबली का ज्ञान नहीं है जो मायने रखता है, लेकिन मशीन का ज्ञान उस मामलों पर काम कर रहा है।
यदि आप मशीन को जानना चाहते हैं, तो आपको इसे समझना चाहिए और इसका मतलब है कि मशीन की भाषा बोलना।

यदि आप नहीं तो आप अमूर्त के साथ फंस रहे हैं।
यह विज्ञान है और यह अच्छा है, लेकिन यह पूरी तस्वीर कभी नहीं है।

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

क्योंकि यह मज़ेदार है।


1
एक लेख में अधिकांश शब्द का उपयोग जो मैंने कभी भी किया है
rekciltnuc

-1

अपने आप को तिथि करने के लिए, मैंने पहली बार आईबीएम सिस्टम 32 का उपयोग करके आरपीजी II सीखा, और बाद में 370 पर एपीएल सीखा। मैं सभी आकार और गति के बारे में था। मेरा मंत्र छोटा और तेज था। असेंबली वहाँ की सबसे कॉम्पैक्ट और सबसे तेज़ भाषा है। मैं सी और असेंबली दोनों में परीक्षण कार्यक्रम बनाऊंगा। जहां C कार्यक्रमों के लिए 100 Kb की आवश्यकता होती है, एक समतुल्य विधानसभा कार्यक्रम अक्सर कम होता है कि 5 Kb। सी कंपाइलर के आउटपुट का अध्ययन करते समय मुझे ऐसा कोड मिलेगा जो पैरामीटर की जांच करेगा और जांच करेगा और संभावित त्रुटियों के लिए सशर्त जांच करेगा जो कि अक्सर दुर्लभ और विदेशी और काफी अनावश्यक थे, जिनमें से सभी को समय लगा, लेकिन सबसे बड़ी मेमोरी ब्लोट बिल्कुल सब कुछ गुजर रहा था से और स्टैक से।

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


1
"उच्च स्तर की भाषाओं के लिए सुलभ" भी क्या मतलब नहीं है?
डेविड रिचेर्बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.