2010-09-16 22 views
6

अरे मैं सी में प्रोग्राम कर सकता हूं, पाइथन और पास्कल में थोड़ा सा और मैं वास्तव में असेंबली सीखना चाहता हूं। मैं 18 वर्ष का हूं और हाईस्कूल खत्म कर रहा हूं, प्रोग्रामिंग मेरा शौक है क्योंकि स्कूल का काम निश्चित रूप से एक चुनौती नहीं है।मैं असेंबली के साथ कहां से शुरू करूं?

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

अब कुछ प्रश्न हैं।

  1. विधानसभा में उदाहरण के लिए पूर्ण शुरुआती MASM के लिए हैं, मैं उन्हें एक एमुलेटर में चलाना चाहिए, किसी ने मुझसे कहा कि मैं अपने पीसी को नुकसान पहुंचा सकता है, तो मैं एक का उपयोग नहीं करते हैं, और हाँ जो एमुलेटर अगर चाहिए मैं उपयोग करता हूं?

  2. डेवलपर्स कैसे अपना असेंबली कोड पोर्टेबल बनाते हैं? इस विषय पर मुझे मिली एकमात्र जानकारी वायरस लिख रही है, क्योंकि असेंबली में लिखे गए वायरस पोर्टेबल होना चाहिए।

  3. एचएलए वास्तव में क्या है और क्या यह असली चीज है या सिर्फ एक एचएलएल शुरुआती असेंबली सिखाने में मदद करने के लिए असेंबली के रूप में छिपी हुई है?

  4. और स्पष्ट vxheaven और क्रैकर वेबसाइटों को छोड़कर असेंबली समुदाय कहां है?

मैं हाल ही में बहुत पढ़ रहा हूँ, लेकिन मैं जो लैटिन सीखने वाले किसी व्यक्ति की तरह लग रहा है, लेकिन वेटिकन के लिए इसे बनाने वाले अन्य लोगों लैटिन बात को पूरा करने के कभी नहीं होगा। मेरे दोस्तों जावा में सभी कार्यक्रम, लेकिन सी या सी ++ के बारे में परवाह नहीं करते हैं, उन्हें लगता है कि वे सब कुछ के लिए जावा का उपयोग कर सकते हैं। मैं इंटेल पर विंडोज 7 और उबंटू 10.0.10 चला रहा हूं। मैं केवल एक साल के लिए प्रोग्रामिंग कर रहा हूं ... क्या मैं जल्द ही असेंबली में डाइविंग कर रहा हूं? असेंबली सीखना चाहते हैं:

  1. सीपीयू के काम के बारे में और अधिक समझना चाहते हैं।
  2. एक चुनौती की तलाश में है।
  3. कुशल कोड लिखना सीखना चाहते हैं।
  4. छोटे एन तेज़ कार्यक्रम लिखना चाहते हैं।
  5. ओएस देव के बारे में अधिक जानना चाहते हैं जब मैंने असेंबली महारत हासिल की है।
  6. यदि मैं असेंबली मास्टर करता हूं, तो एचएलएल सीखना आसान होगा।
  7. किसी नौकरी के लिए आवेदन करते समय पेशकश करने के लिए कुछ करना चाहते हैं जो दूसरों के पास नहीं होगा।
  8. एवीआर में रुचि रखने के लिए उदाहरण के लिए Arduino, जो सी का उपयोग करता है और विधानसभा नहीं बल्कि एवीआर के बारे में और अधिक समझना चाहता है।

धन्यवाद। टी

उत्तर

0

जैसा कि आप एनआर में उल्लेख करते हैं। 8, मैं आपको एवीआर का उपयोग करने के लिए प्रोत्साहित करता हूं, क्योंकि यह सीखने और असेंबलर का उपयोग करने के लिए एक अच्छा मंच है।

क्यों?

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

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

+0

एक अच्छा जवाब है लेकिन मैं अभी भी माइक्रोकंट्रोलर से अधिक प्रोग्राम करने में सक्षम होना चाहता हूं। मुझे वर्चुअल बॉक्स की साइट मिली, यह अच्छा लगता है कि मैं इसे आजमा रहा हूं। दूसरों के लिए जो http://www.virtualbox.org/ Timo – Timo

+1

हां आना चाहते हैं, हां, वर्चुअलबॉक्स सुरक्षित प्रोग्रामिंग के लिए आपका सैंडबॉक्स/एमुलेटर है, लेकिन क्या आपने अपने एएसएम कोड में कोड ओवरहेड को भी ध्यान में रखा है।खिड़कियों में कंसोल के लिए "हैलो वर्ल्ड" लिखना? –

+0

अच्छा बिंदु उस बारे में नहीं सोचा था। – Timo

0

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

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

यदि मैं आप थे और मैं निम्न स्तर पर जाना चाहता था तो मैं निश्चित रूप से ग्राफिक्स हार्डवेयर में खोदना चाहता था। यह एक आधुनिक जीपीयू के साथ आप क्या कर सकते हैं जादू के करीब है।

या सी ++ में महान होना सीखें। Boost.org या गेम प्रोग्रामिंग साइट देखें। यह आपको बहुत चुनौती और आपको जितनी भी गति की आवश्यकता होगी।

+0

"असेंबली भाषा अनुकूलित करना अतीत की बात है।" यह सच नहीं है, यह सिर्फ बहुत कम आवश्यक है। कोई आम तौर पर आजकल असेंबली में कोड के बड़े हिस्से नहीं लिखता है, लेकिन + अनुकूलन + कोड के लिए, यह अभी भी मूल्यवान है। शायद ही आवश्यक है, लेकिन अभी भी। – PhiS

+0

मैं इस बात से असहमत नहीं हूं कि आप चरम मामलों में कुछ आंतरिक लूप को अनुकूलित कर सकते हैं जो संकलक आपके लिए कर सकता है। मैं सुनहरा "डेमो" युग में था, जहां हमने शुद्ध असेंबली में 9 5% लिखा था, लेकिन यह एक अलग खेल था। हार्डवेयर सरल और बहुत धीमा था, इसलिए हासिल करने के लिए बहुत कुछ था। अब हमारे पास एक जवान आदमी है, जो अपने हाथों को गंदे बनाना चाहता है और "अतीत की बात" के साथ मेरा क्या मतलब है कि असेंबली शुरुआती नब्बे के दशक में युवा महत्वाकांक्षी प्रोग्रामर के लिए काम करना था। असेंबली अब सीमा नहीं है। जीपीयू, फोन ऐप या इसके बजाए कुछ और अच्छा हो जाओ। – Holstebroe

6

1) आप वास्तव में एक असेंबली प्रोग्राम चलाने से अपने सिस्टम को "नुकसान" नहीं कर सकते हैं, कह सकते हैं, सी। एक आधुनिक ओएस पर, सबसे खराब आप आमतौर पर समाप्त हो जाते हैं, जो आपकी प्रक्रिया को क्रैश कर रहा है। हालांकि, असेंबली कोड से अनजाने में आपकी प्रक्रिया को क्रैश करना थोड़ा आसान हो सकता है। यदि आप एक एमुलेटर से उपयोगी प्राप्त करना चाहते हैं, तो केवल सैंडबॉक्स प्रदान करने के बजाय बोच या क्यूईएमयू देखें, उनके पास सहायक डिबगिंग टूल हैं। आप एक वीएम के बिना ठीक हो जाएंगे, हालांकि, अपने नियमित ओएस के साथ अपने नियमित ओएस पर + परीक्षण कोड लिखना।

2) आप वास्तव में नहीं करते हैं। आप ओएस में पोर्टेबल बना सकते हैं (लेकिन उसी सीपीयू के साथ) जैसे कि आप इसे सी के लिए करते हैं, लेकिन क्रॉस-सीपीयू असेंबली सिर्फ समझ में नहीं आता है (यदि आप ऐसा करना चाहते हैं, तो आप सी या .NET या जावा बाइटकोड का भी उपयोग कर सकते हैं)।

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

4) http://www.asmcommunity.net/board/, http://board.flatassembler.net :) - आईआरसी चैनलों से दूर रहें। इसके अलावा, usenet alt.lang.assembly से दूर रहें, यह सब कुछ कुछ व्यक्तियों द्वारा नष्ट कर दिया गया है।

सीखने विधानसभा के लिए अपने कारणों की एक जोड़ी के लिए के रूप में:

6.If मैं विधानसभा गुरु, सीखने अधिक एचएलएल आसान होगा।

जरूरी नहीं है, और यदि आप एचएलएल में खोदने से पहले "बहुत अधिक" करते हैं तो यह भी कठिन हो सकता है। मुझे लगता है कि कुछ मशीन आर्किटेक्चर ज्ञान बेहतर सॉफ्टवेयर लिखने का कारण बन सकते हैं, लेकिन केवल तभी जब आप छोटे अप्रासंगिक विवरणों पर हर समय जुनून न सीखें।

7।किसी नौकरी के लिए आवेदन करते समय पेशकश करने के लिए कुछ करना चाहते हैं जो दूसरों के पास नहीं होगा।

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

+0

मैं स्टैक ओवरफ़्लो पर विश्वास करता हूं वहां बहुत से लोग हैं जो सहायक होने के लिए पर्याप्त असेंबली जानते हैं। –

+0

@ जॉर्ज: वास्तव में सच है, लेकिन SO "असेंबली समुदाय" नहीं है - यह प्रश्न/उत्तर परस्पर संपर्क पर केंद्रित है, जबकि मंच/संदेशबोर्ड के अन्य मूल्य हैं। – snemarch

1

यहाँ जाता है ...

  • 86 आदर्श नहीं है:
    • बहुत कम 3-सेशन निर्देश (lea आमतौर पर 3-सेशन एड IIRC के रूप में प्रयोग किया जाता है)। मुझे 3-ऑप निर्देश पसंद हैं।
    • 86 मशीन कोड माइक्रो-ऑप्स है कि वास्तव में सीपीयू पर चलने से बहुत अलग है। प्रीप्रोकैसिंग का एक बड़ा ढेर किया गया है; जो असेंबली आप देखते हैं वह आपको बहुत कम बताती है कि सीपीयू वास्तव में कैसे काम करता है।
    • बहुत सारी असेंबली सलाह ("यह निर्देश तेज है") थोड़ा पुराना है। स्पष्ट रूप से आप धीमे निर्देशों से छुटकारा पाने के लिए बाइनरी-अनुवाद x86 से x86 तक कुछ प्राचीन x86 ऐप्स को तेज़ी से बना सकते हैं।
  • विधानसभा जरूरी आप "तेजी से कोड" लिखने के लिए नहीं सिखा देगा। जब कोई जाता है "ओह, यह $ big_function धीमा है, इसलिए मैं इसे खुद को असेंबली में लिखूंगा", आमतौर पर यह धीरे-धीरे धीमा हो जाता है। पढ़ना असेंबली और धीमी बिट्स को स्पॉट करना उपयोगी है; फिर आप संकलक को मदद करने के लिए कोड को ट्विक कर सकते हैं (भले ही यह उतना आसान हो "ओह, जीसीसी ने ध्यान नहीं दिया कि उस फ़ंक्शन कॉल का परिणाम निरंतर है")।
  • विधानसभा शायद आप छोटे कोड (मानव कोड गोल्फ में काफी अच्छा कर रहे हैं) लिखते हैं, लेकिन क्योंकि तुम सी क्रम शामिल करने के लिए की जरूरत नहीं है सबसे बड़ी अंतरिक्ष की बचत अक्सर है की सुविधा देता है। मनुष्य कॉलिंग सम्मेलनों का पालन न करने से भी दूर हो सकते हैं।
  • ऑपरेटिंग सिस्टम काफी हद तक विधानसभा में लिखा नहीं कर रहे हैं (यह/केवल पता लगाने के लिए लोग हैं, जो विधानसभा में एक पूरे ओएस लिखा है कि यह धीमी थी वह जगह है जहाँ मैं उस व्यक्ति के बारे में एक किस्सा की खुदाई)। कुछ बिट्स हैं, जिनमें से सबसे बड़ा बूट लोडर है (जो x86 पर है, अभी भी 16-बिट "असली मोड" में है)। मैं किसी ऐसे व्यक्ति को जानता हूं जिसने अपने बूट लोडर में चीजें प्रोग्राम की हैं; यह मजेदार लगता है (लेकिन आप इसे वीएम में चलाने के लिए चाहते हैं, अगर केवल एक ही समय में आप इंटरनेट का उपयोग कर सकते हैं)।
  • विधानसभा शायद सबसे नौकरियों के साथ तुम्हारी मदद करेगा नहीं (लेकिन मैं एक जगह है कि मेरी CV में $ list_of_languages ​​देखना चाहता था के लिए काम नहीं होता बस के रूप में मुझे एक नई जगह के लिए काम नहीं करेंगे जो मुझे ठुकरा दिया क्योंकि मैं मैंने कुछ शौकिया असेंबली की है)।
  • असेंबली पोर्टेबल नहीं है। यहां तक ​​कि सिस्टम जो एक ही सीपीयू का उपयोग करते हैं, अक्सर एक अलग एबीआई (उदाहरण के लिए "क्लासिक" मैक ओएस बनाम मैक ओएस एक्स) का उपयोग करते हैं।

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

मैं एक माइक्रोकंट्रोलर पर कुछ भी कभी नहीं किया है, लेकिन यह एआरएम देव बोर्ड (संभवतः सबसे मजेदार मैं अपने पूरे सीएस पाठ्यक्रम में था) का उपयोग कर के समान लगता है।

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