2010-01-31 12 views
10

मुझे 8086 असेंबली और एमआईपीएस असेंबली सीखना है। इसके अलावा, मैं नियमित अभिव्यक्ति सीख रहा हूं, फिर मैं जानना चाहता हूं:नियमित अभिव्यक्तियां और असेंबली

  • मैं उन पर नियमित अभिव्यक्तियों का उपयोग कैसे कर सकता हूं?
+2

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

उत्तर

9

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

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

उसने कहा, यह असंभव नहीं है! असली भाषा के छोटे छोटे सबसेट्स का समर्थन करना शुरू करें, जिन्हें आप समर्थन देना चाहते हैं, और फिर अपना रास्ता तैयार करें। chapter 16 of Assembly Language Programming देखें कि आप अपना नियमित अभिव्यक्ति इंजन कैसे बना सकते हैं, इसकी विस्तृत निगरानी के लिए। आपको अच्छी तरह से समझने की आवश्यकता होगी कि वे कैसे काम करते हैं (जो यह अध्याय आपको देगा) और असेंबली की ठोस समझ भी है (इसके लिए पहले अध्याय देखें)।

+2

@ नाथन कैम्पोस: फॉलो-अप: जबकि मैं चुनौती लेने की आपकी इच्छा की सराहना करता हूं, अगर आप केवल 8086 असेंबली सीख रहे हैं, तो यह लगभग निश्चित रूप से आपके वर्तमान कौशल स्तर के लिए एक बेहद उन्नत विषय होने जा रहा है। यदि आप ऐसा कुछ चाहते हैं जो अभी भी चुनौतीपूर्ण होगा, तो पहले अपने हाथों को एक सरल सबगोल पर आज़माएं (शायद केवल स्ट्रिंग से एक राज्य मशीन बनाना, उदाहरण के लिए)। –

+0

मुझे 8086 असेंबली बहुत पता है, लेकिन एमआईपीएस सीखना। **; -) ** –

1

रेगुलर एक्सप्रेशन कि एक छोटे से विचित्र सवाल लगता है, एक उच्च स्तर की भाषा प्रकृति के Regex के कर रहे हैं, यह नट और बोल्ट के स्तर पर मौजूद नहीं है विधानसभा में मौजूद नहीं, कर ...

संपादित करें: नाथन, here वह लिंक है जो आपके लिए ब्याज का हो सकता है। पृष्ठ के निचले भाग तक नीचे स्क्रॉल करें;)

उम्मीद है कि यह मदद करता है, सर्वश्रेष्ठ संबंध, टॉम।

+0

वे प्रथम श्रेणी के निर्माण के रूप में मौजूद नहीं हो सकते हैं, लेकिन इसका मतलब यह नहीं है कि यह एक "विचित्र प्रश्न" है। नियमित अभिव्यक्ति सी # में पहले श्रेणी के निर्माण के रूप में मौजूद नहीं है, लेकिन मुझे लगता है कि कुछ लोग कहेंगे कि यह एक बुरा विचार है कि रेगेक्स ढांचे में हैं। –

+0

@ जॉन: मैं सहमत हूं ... हाँ, लेकिन मैं यह नहीं कह रहा था कि ऐसा करना असंभव है, बल्कि यह रजिस्टरों का उपयोग करके स्पष्ट रूप से संदर्भ और पैटर्न मिलान के रूप में प्राप्त करने के लिए एक दर्दनाक चीज़ होगी ... यह कुछ मस्तिष्क- तनाव ... आपका जवाब बिल्कुल यह बताता है! यह पूछने के लिए सिर्फ एक असामान्य सवाल है ... इसलिए मेरी कहानियां 'विचित्र सवाल' – t0mm13b

+0

मेह! उस लिंक को चेक किया गया, यह वह नहीं है जिसे आप ढूंढ रहे हैं! क्षमा करें नाथन :( – t0mm13b

1

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

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

0

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

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

0

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

3

इस प्रयास करें: AsmRegEx - regular expression engine

यह FASM में लिखा है। दुर्भाग्यवश, ऐसा लगता है कि परियोजना अब और प्रगति नहीं करेगी ...

+0

यह बहुत बढ़िया है, मैं इसे देख लूंगा। धन्यवाद। **: -) ** –

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