माइक्रोप्रोग्रामिंग बनाम मशीन भाषा प्रोग्रामिंग


10

मैं माइक्रोप्रोग्रामिंग स्तर बनाम मशीन भाषा स्तर के बीच थोड़ा भ्रमित हूं। उदाहरण के लिए:

  1. निष्पादित होने के दौरान दोनों प्रकार के कार्यक्रम कहां रहते हैं?
  2. क्या या तो 1: 1 से विधानसभा भाषा के लिए मैपिंग सही-ऑप निर्देश है?
  3. या तो प्रोसेसर आर्किटेक्चर द्वारा परिभाषित किया गया है?

4
यदि आपने इसे अभी तक नहीं पढ़ा है, तो [विकिपीडिया] [1] लेख देखें; यह बहुत अच्छा है। [१]: en.wikipedia.org/wiki/Microcode
शॉन जे। गोफ

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

1
नहीं, मैं माइक्रोकोड के बारे में ले रहा हूं। मैं सीपीयू इंटर्नल का अध्ययन कर रहा हूं और माइक्रोकोड जैसी सबसे निचली परतों को समझने की कोशिश कर रहा हूं।

जवाबों:


7

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

निष्पादित होने के दौरान दोनों प्रकार के कार्यक्रम कहां रहते हैं?

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

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

क्या या तो 1: 1 से विधानसभा भाषा के लिए मैपिंग सही-ऑप निर्देश है?

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

लेकिन सामान्य रूप से "शुद्ध" विधानसभा भाषा को प्रोसेसर के मैनुअल में निर्देश सेट तालिका का उपयोग करके सीधे मशीन कोड में परिवर्तित किया जा सकता है।

मुझे यकीन नहीं है कि "सही-सलामत निर्देशों" से आपका क्या मतलब है। शायद आप संदर्भ की व्याख्या कर सकते हैं।

या तो प्रोसेसर आर्किटेक्चर द्वारा परिभाषित किया गया है?

प्रोसेसर आर्किटेक्चर द्वारा मशीन कोड और माइक्रोकोड दोनों के प्रारूप को परिभाषित किया गया है।


'ट्रू-ऑप' द्वारा, मेरा मतलब है कि निर्देश जो सिंथेटिक या छद्म विधानसभा भाषा के निर्देश नहीं हैं। दूसरे प्रश्न के लिए, मेरा मतलब यह पूछना था कि क्या माइक्रोकोड निर्देश विधानसभा भाषा के लिए सही निर्देश देता है।

@Louis - सामान्य तौर पर कोई प्रकाशित असेंबली कोड नहीं है जो माइक्रोकोड में 1: 1 अनुवाद है। इंटेल और एएमडी (और अन्य) अपने माइक्रोकोड मालिकाना रखते हैं, क्योंकि यह प्रोसेसर की आंतरिक वास्तुकला में बहुत मजबूत अंतर्दृष्टि देता है। मैंने सुना है कि कुछ विशेष उद्देश्यों के लिए वे इस पर जानकारी देने के लिए तैयार हैं, उदाहरण के लिए, शोधकर्ता ताकि वे कुछ अनुप्रयोगों के लिए मशीन से अंतिम 1% प्रदर्शन प्राप्त कर सकें, लेकिन अधिकांश भाग के लिए प्रकाशित युक्ति मशीन कोड और सामान्य वास्तुकला विवरण शामिल हैं।
एडम डेविस

8

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

आओ हम कहते हैं कि आप एक MARIE निर्देश सेट के साथ काम कर रहे हैं और आप एक x, y फ़ंक्शन चाहेंगे, लेकिन आर्किटेक्चर केवल एक x जोड़ने की अनुमति देता है (जो अभी x में रजिस्टर में वर्तमान में क्या जोड़ता है) ताकि आप एक माइक्रोकोड निर्देश जोड़ सकें:

LOAD x //Load x into the register
ADD y //Add y to the value in the register

अब जब आपका मशीन भाषा कोड कहता है:

ADD x,y

यह ADD फ़ंक्शन को ROM (आपके माइक्रोकोड) में जोड़ा गया है और इसे निष्पादित करता है। यह बहुत अच्छा है क्योंकि यह आपके अनुदेश सेट को बढ़ाता है, जो अधिक पठनीय मशीन कोड की अनुमति देता है, और चूंकि आपका माइक्रोकोड रोम में संग्रहीत है, इसलिए यह RAM से LOAD और ADD को कॉल करने की तुलना में थोड़ा तेज है।

मैं एक ऐसी कंपनी में काम करता था जो वास्तव में अपने पुराने सिस्टम पर बहुत तेज गति से कस्टम माप करने के लिए माइक्रोकोड लिखती थी। हालांकि, FPGAs में प्रगति के साथ वे उन पर स्विच कर चुके हैं, जो बहुत तेज़ हैं (चूंकि आप वास्तव में ROM के बजाय हार्डवेयर में "कस्टम निर्देशों" को लागू कर रहे हैं)।


आपने माइक्रोकोड कैसे लिखा और निष्पादित किया?
एरिक कप्लून

@ ErikAllik आप केवल अपने कंप्यूटर को खरोंच से बनाकर कर सकते हैं।
user253751

5

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

उदाहरण के लिए, राज्य # 1 में 8-बिट सीपीयू के लिए एक माइक्रोकोड निर्देश निर्दिष्ट कर सकता है कि आउटपुट प्रोग्राम काउंटर के दोनों हिस्सों के लिए सक्षम हो। सक्रिय होना चाहिए (जिससे प्रोग्राम काउंटर ऊपरी और निचले आंतरिक पते की बस में आउटपुट हो सकता है), प्रोग्राम-काउंटर-इन्क्रीमेंट सिग्नल सक्रिय होना चाहिए, बाहरी पता कुंडी संकेत सक्रिय होना चाहिए (इसलिए बाहरी पता बस आंतरिक को ट्रैक करेगा) और रैम-रीड सिग्नल सक्रिय होना चाहिए, और नियंत्रक को # 2 पर स्विच करना चाहिए।

राज्य # 2 में, बाहरी डेटा बस को आंतरिक प्राथमिक डेटा बस को खिलाना चाहिए, और अनुदेश रजिस्टर, जो उस बस से पढ़ता है, को लोड किया जाना चाहिए। कार्यक्रम काउंटर को एड्रेस बस के दोनों हिस्सों पर आउटपुट से पहले होना चाहिए, और एक अन्य रैम-रीड जारी किया गया है। अनुदेश रजिस्टर के 5-7 बिट्स को राज्य नियंत्रक के 0-2 बिट्स में लोड किया जाना चाहिए, राज्य रजिस्टर के बिट 3 को तब तक सेट किया जाना चाहिए जब तक कि निर्देश रजिस्टर के 1-7 बिट्स सभी सेट न हों, और राज्य रजिस्टर के अन्य बिट्स स्पष्ट होना चाहिए, शुद्ध परिणाम यह है कि अगला राज्य # 7- # 15 होगा।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.