सीपीयू स्तर पर एक कार्यक्रम कैसे निष्पादित किया जाता है?


14

मैं जानता हूं कि यह एक बहुत ही सामान्य प्रश्न है। लेकिन मेरे मन में एक अलग कोण है। मैं यहाँ इसे स्पष्ट करने की कोशिश करूँगा।

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

हालाँकि इसे समझने की तुलना में टाइप करना आसान है। तो अगर सभी सीपीयू जोड़ रहा है, घटाना, आदि, तो एक कार्यक्रम कैसे है, कहो एक JAVA प्रोग्राम कह रहा है प्रिंट हैलो वर्ल्ड, इन अंकगणित संचालन के साथ निष्पादित?

मेरा मतलब है कि इस कार्यक्रम को कैसे सीपीयू के लिए एक अतिरिक्त के रूप में परिवर्तित किया गया है?

PS यदि यह प्रश्न इस वेबसाइट के लिए लागू नहीं है तो मैं क्षमा चाहता हूँ।

-----भाग दो-----

ठीक है। इस व्रत का उत्तर देने के लिए और इस उत्साह के साथ सभी को धन्यवाद। मैंने अपने प्रश्न को थोड़ा संशोधित करने और सभी उत्तरों पर टिप्पणी करने और उन्हें फिर से पूछने से बेहतर समझा।

तो यहाँ है।

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

इसके अलावा आप में से कई मेरे ध्यान में लाए हैं कि सीपीयू सिर्फ जोड़ से ज्यादा करता है। मैं इस से सहमत हूँ। मैंने अभी ऐसा नहीं लिखा है और इसे सभी तरह से मान लिया है। जो मैं समझता हूं, यह प्रक्रिया है:

  1. मेमोरी से निर्देश पढ़ें (डेटा और एड्रेस बसों और प्रोग्राम काउंटर सामान का उपयोग करके)

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

तो चरण 3 में जहां सीपीयू एक निर्देश देता है और एक अंकगणितीय ऑपरेशन करने का फैसला करता है (यहां हम यह मान रहे हैं कि वर्तमान अनुदेश को कूदने जैसा कोई अन्य ऑपरेशन नहीं किया जाना चाहिए..जबकि अंकगणितीय ऑपरेशन किए जाते हैं..तो हम उससे चिपक जाएंगे ) यह वह जगह है जहाँ मेरा विज़ुअलाइज़ेशन समाप्त होता है। कैसे मेरे कार्यक्रम से एक निर्देश सीपीयू के लिए सिर्फ एक अंकगणितीय ऑपरेशन है। यह उस अंकगणितीय ऑपरेशन को करता है और यह निर्देश उसके उद्देश्य को पूरा करता है।

मुझे उम्मीद है कि मैंने इस बार खुद को स्पष्ट कर दिया है।

PS मैं यहां एक बड़ी धारणा ले रहा हूं कि ALU केवल हमारे कार्यक्रमों में किए जाने वाले वास्तविक अंकगणितीय ऑपरेशन तक ही सीमित नहीं है, बल्कि यह सभी निर्देशों को क्रियान्वित करता है, जो अब द्विआधारी रूप में हैं, उन्हें जोड़कर या घटाकर, परिणाम देने के लिए कि उनका मतलब है उपज। यदि मैं नीचे दिए गए उत्तरों की तुलना में यहां गलत हूं तो मेरे प्रश्न का सही उत्तर दें।


मैं समझता हूं कि कंपाइलर प्रोग्राम को मशीन लैंग्वेज में बदल देता है। मैं सिर्फ एक अंकगणितीय ऑपरेशन के रूप में एक कार्यक्रम की कल्पना नहीं कर सकता। हालाँकि अगर प्रोग्राम खुद ही दो नंबर जोड़ने के बारे में है तो समझ में आता है, लेकिन नहीं तो..ये !! :)
user2827893

1
शायद आपको सीपीयू के वास्तविक अनुदेश सेट को देखना शुरू करना चाहिए, उदाहरण के लिए MC6502, Z80 जैसे बहुत ही सरल ... फिर देखें कि मेमोरी एक्सेस निर्देश, डेटा प्रोसेसिंग निर्देश, शाखाएं हैं ... आप तब अनुमान लगा सकते हैं कि वे कैसे हो सकते हैं किसी भी एल्गोरिथ्म को लागू करने के लिए संयुक्त।
TEMLIB

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

1
आप (लगता है) अभी भी IF (निर्णय लेने) और MOVE (डेटा को पढ़ने और संग्रहीत करने) को देखने से दृढ़ता से मना कर रहे हैं, प्रोग्रामिंग 99% IF और MOVE है। अंकगणित नगण्य है। आपके पहले उदाहरण (नमस्ते दुनिया) में कोई अंकगणित नहीं है।
edc65

1
1. मुझे लगता है कि यदि आप इस प्रश्न को संपादित करने के बजाय अपने नए भ्रम के साथ एक नया प्रश्न पूछते हैं, तो आपको अच्छे उत्तर मिलने की अधिक संभावना होगी। आपको अपने मूल प्रश्न के अच्छे उत्तर मिले, और आपका मूल प्रश्न ऐसा लगता है कि यह अपने आप खड़ा हो सकता है, इसलिए संपादन को हटाकर एक नया प्रश्न क्यों नहीं पूछा जाए? 2. उस ने कहा, मैं नया हिस्सा नहीं समझ सकता। नए हिस्से के बारे में आपका सवाल क्या है? जब आप कहते हैं, आप क्या मतलब है आप "इस जहाँ मेरे दृश्य समाप्त होता है" है चरण 3 को समझते हैं, या आप चरण 3 समझ में नहीं आता? यदि आप करते हैं, तो आप क्या नहीं समझते हैं?
DW

जवाबों:


7

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

यह आपको बताएगा कि ऑपरेटिंग सिस्टम को कॉल करके I / O जैसी किसी भी मुश्किल को लागू किया जाता है। जब आप स्रोत को लिनक्स कर्नेल में डाउनलोड कर सकते हैं और उसके साथ भी ऐसा ही कर सकते हैं, तो हुड के नीचे क्या चल रहा है: सब कुछ कंप्यूटर की मेमोरी की स्थिति में हेरफेर कर रहा है, उदाहरण के लिए चल रही प्रक्रियाओं की सूची, या फिर हार्डवेयर का उपयोग करके बात करना विशेष मेमोरी पते जो इसे नियंत्रित करते हैं या विशेष CPU निर्देशों का उपयोग करते हैं जैसेin औरout x86 पर । आम तौर पर, हालांकि, केवल विशेष कार्यक्रम जिन्हें डिवाइस ड्राइवर कहा जाता है, विशेष हार्डवेयर से बात करेंगे, और ओएस सही ड्राइवर को हार्डवेयर का उपयोग करने के लिए अनुरोध भेजेगा।

विशेष रूप से, यदि आप प्रिंट करते हैं, तो "हैलो, दुनिया!" आपका कंपाइलर उस निर्देश के एक सेट में बदल जाएगा जो स्ट्रिंग को एक विशेष स्थान में लोड करता है (उदाहरण के लिए, स्ट्रिंग में बाइट्स की संख्या को स्ट्रिंग से फाइल डिस्क्रिप्टर नंबर 1 में लिखने के लिए मेमोरी में लोड करना , जो मानक है आउटपुट। उस बिंदु पर, OS यह देखता है कि वह प्रक्रिया क्या है 'फ़ाइल नंबर 1 है और यह तय करें कि इसका क्या अर्थ है। यदि मानक आउटपुट के लिए लिखता है तो आपकी स्क्रीन पर प्रिंट हो जाता है, कुछ प्रक्रियाएँ होंगी जैसे बाइट्स को बफर में कॉपी करना, जिसे तब आपके टर्मिनल प्रोग्राम द्वारा पढ़ा जाता है, जो कि विंडोिंग सिस्टम को बताता है कि कौन सा फ़ॉन्ट किस जगह पर डाला जाए। विंडोिंग सिस्टम ठीक वही तय करता है जो उसे दिखना चाहिए, और डिवाइस ड्राइवर को स्क्रीन पर पिक्सल डालने के लिए कहता है, जो वह करता है वीडियो मेमोरी बदलकर।%rdi रजिस्टर ) और callनिर्देश के साथ एक लाइब्रेरी फ़ंक्शन को कॉल करना । यह लाइब्रेरी फ़ंक्शन लूप के साथ स्ट्रिंग की लंबाई पा सकता है, फिर सिस्टम कॉल को कॉल कर सकता हैwrite()


साभार @ लोरेहेड यह स्पष्टीकरण अच्छा wrt नमस्ते दुनिया उदाहरण दिखता है।
user2827893 5

5

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

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

अंत में, आपका सीपीयू केवल कुछ अन्य चिप को सुंदर बताता है कृपया मॉनिटर पर सिग्नल को संशोधित करें ताकि यह "हैलो वर्ल्ड" जैसा दिखाई दे।

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

यदि आपका CPU अब H से उच्च के लिए सभी लाइनों को सेट करता है, तो 7-खंड H को प्रदर्शित करेगा, हालाँकि H एक संख्या नहीं है जिसे CPU जोड़े या घटाएगा।

अब, यदि सभी परतें सहमत हैं कि 7-सेगमेंट-डिस्प्ले एच (उच्च करने के लिए 5 विशिष्ट लाइनें) सेट करने के लिए क्या आवश्यक है, तो जावा कंपाइलर इसे प्रदर्शित करने के लिए कोड बना सकता है एच। यह बेशक असुविधाजनक है - इसलिए परतें शुरू होती हैं सार करने के लिए। सबसे निचली परत इससे शुरू होगी: "यो, 26 अक्षर होते हैं, चलो प्रत्येक अक्षर को संख्याएँ असाइन करते हैं - कैसे हम 'H' नंबर '72' अक्षर देते हैं? तो आप मुझे केवल" प्रदर्शन पत्र 72 "बता सकते हैं? "सेट लाइन 309 ऊँची, सेट लाइन 310 ऊँची, सेट लाइन 498 ऊँची, सेट लाइन 549 ऊँची, सेट 3 ऊँची" के बजाय। और इसलिए प्रत्येक परत जानकारी को सार करने लगती है, कुछ परिणाम कैसे प्राप्त करें, इसलिए आपको इसकी आवश्यकता नहीं है। उनकी परवाह करना।

तो हाँ, यह संख्याओं या बिट्स के एक हुइयूज्यूप मैपिंग के लिए बोला जाता है, सीपीयू वास्तव में प्रक्रिया कर सकता है, जिसका अर्थ है कि श्रृंखला में हर कोई सहमत था।


3

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

क्लास में, हम डिस्टिल करते चले गए कि रजिस्टरों पर वास्तविक लॉजिक गेट्स में रिसिस्टर-ट्रांसफर नोटेशन! यह खुद लिखता है: हर उस चीज को देखें, जिसके पास गंतव्य के रूप में 'ए' रजिस्टर है, और कोड ए = (केस 1) या (केस 2) ... और जो राशि-उत्पाद या उत्पाद के रूप में अभिव्यक्त किया जाता है।

केवल कोर्स के अंत में मुझे पता चला कि यह एक वास्तविक सीपीयू था: पीडीपी -8 यदि मैं सही ढंग से याद करता हूं।

आज आप एक प्रोग्रामेबल लॉजिक एरे चिप में गेट डायग्राम को फीड कर सकते हैं।

यह इसका सार है: एक रजिस्टर AND और OR गेट्स के परिणाम के साथ सेट होता है जो अन्य रजिस्टरों में वापस जाता है। शामिल करने के लिए एक मान opcode मूल्य है।

तो कल्पना करें: A: = (opcode == 17 & X + Y) | (opcode == 18 & X + Z | ... | ...

आधुनिक cpus अधिक जटिल हैं, पाइपलाइनों और busses के साथ, लेकिन एक एकल ALU जैसे व्यक्तिगत सबयूनिट उस तरह से काम करते हैं।


2

आप यहाँ CPU पर विचार कर रहे हैं, लेकिन 'हैलो वर्ल्ड' चलाते समय एक और घटक शामिल है: डिस्प्ले!

सीपीयू के लिए, मेमोरी में एक मूल्य दी गई संख्या के रूप में बिट्स (0 और 1) के रूप में दर्शाया जाता है।

यह स्क्रीन पर अक्षरों में कैसे बदल जाता है एक और कहानी है: डिस्प्ले में मेमोरी भी है। इस मेमोरी (ग्राफिक मेमोरी) को स्क्रीन पर 'पिक्सल' में मैप किया जाता है। प्रत्येक पिक्सेल एक मूल्य के साथ एन्कोडेड होता है: यदि यह एक बहुत ही बुनियादी मोनोक्रोम डिस्प्ले है, तो मूल्य सिर्फ तीव्रता है, रंग प्रदर्शित करने के लिए मूल्य लाल ग्रीन और ब्लू (RGB) का एक संयोजन है जिसे कई अलग-अलग तरीकों से एन्कोड किया जा सकता है।

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

इसलिए, जैसा कि कोड संकलित है, इसमें ओएस लाइब्रेरी से आने वाली सभी प्रकार की चीजें शामिल हैं, जिनमें ये फ़ॉन्ट / चार सेट आदि शामिल हैं .. जो सीपीयू को यह जानने की अनुमति देते हैं कि ग्राफिक्स मेमोरी में क्या लिखना है। (यह काफी जटिल है, लेकिन यह सामान्य विचार है: संकलक में आपके 'हैलो वर्ल्ड' कोड की तुलना में बहुत अधिक कोड शामिल हैं, आयातित पुस्तकालयों के माध्यम से अकेले)

अंत में, वहाँ बहुत सारी चीजें हो रही हैं जैसा कि आपको संदेह है, लेकिन आपको वह सब कोड लिखने की ज़रूरत नहीं है।


1

यहाँ सैद्धांतिक कंप्यूटर विज्ञान के क्षेत्र से आपके प्रश्न के लिए एक औपचारिक दृष्टिकोण है।

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

जैसा कि आप पहले से ही जानते हैं कि लगभग कुछ भी सीपीयू द्विआधारी प्रतिनिधित्व में प्राकृतिक संख्याओं पर गणना करता है, आप यह तर्क दे सकते हैं कि सीपीयू हर कल्पनीय कार्यक्रम को अंजाम दे सकते हैं।

नोट: यह अत्यधिक सरलीकृत है, लेकिन, मेरी राय में, एक अच्छा अंतर्ज्ञान देता है।


1

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

जब एक ALU "अंकगणित करता है," जो वास्तव में इसका अर्थ है कि उसने कंप्यूटर की स्थिति को इस तरह से बदल दिया है जो अंकगणित के हमारे नियमों के अनुरूप है। यह सब किया कुछ बिट बदल गया था। यह सॉफ्टवेयर के पीछे का अर्थ है जो बताता है कि हमें इसके अतिरिक्त या घटाव के बारे में क्यों सोचना चाहिए। सीपीयू यह नहीं जानता कि यह क्या कर रहा है। यह बस एक राज्य से दूसरे राज्य में बदलता है, और यह सब (कम से कम जब तक स्काईनेट पर कब्जा नहीं हो जाता है)।

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

आईओ वास्तव में अलग नहीं है या तो, यह सिर्फ बिट्स बदल रहा है। केवल मामूली अंतर यह है कि उन बिट्स को ट्रांजिस्टर से जोड़ा जाता है जो अंततः आपकी स्क्रीन पर पात्रों को रोशन करने के लिए नेतृत्व करते हैं। अगर मैं कुछ दशकों में वापस आ सकता हूं जब "हैलो वर्ल्ड" वास्तव में सरल था, तो एक मेमोरी स्पेस था, जहां यदि आपने "हैलो वर्ल्ड" के लिए ASCII वर्णों के अनुरूप बिट्स लिखे थे, तो उन पात्रों को सीधे प्रदान किया जाएगा। स्क्रीन। आजकल यह थोड़ा अधिक जटिल है, क्योंकि हमारे पास ग्राफिक्स कार्ड और ऑपरेटिंग सिस्टम हैं जो इसके साथ गड़बड़ करते हैं, लेकिन मूल विचार एक ही है। आपके पास ट्रांजिस्टर का एक सेट है जो या तो चालू या बंद है, जो स्क्रीन पर एक पिक्सेल प्रदर्शित करने के लिए सर्किटरी से जुड़ा हुआ है। हम सही सेट करते हैं, और ऐसा लगता है कि स्क्रीन पर "हैलो वर्ल्ड" दिखाई देता है।

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


0

सीपीयू इस तरह काम करते हैं:

  • वर्तमान निर्देश प्राप्त करें, वेतन वृद्धि "वर्तमान निर्देश" सूचक।

  • इसे डीकोड करें (जैसे पता करें कि यह निर्देश सीपीयू को क्या करने के लिए कह रहा है)

  • इसे निष्पादित करें (निर्देश क्या कहता है) - वर्तमान अनुदेश सूचक को संशोधित किया जा सकता है यदि अनुदेश कुछ "कूद" जैसा है।

  • हमेशा के लिए दोहराएं

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

कई प्रकार के निर्देश हैं, उनमें से अधिकांश का एक उदाहरण है:

  • "हटो" निर्देश। ये X को दूसरे X पर कॉपी कर सकते हैं, जहाँ X मेमोरी (RAM), एक रजिस्टर, या I / O स्पेस में एक पता है यदि CPU ऐसी धारणा का समर्थन करता है।

  • स्टैक हेरफेर के निर्देश, जिसमें पॉप इन रजिस्टर, स्टैक पर पुश रजिस्टर इत्यादि शामिल हैं, ये "चाल" निर्देशों का एक विशेष मामला है जो "स्टैक पॉइंटर" रजिस्टर का उपयोग और अद्यतन करते हैं।

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

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

  • शाखा निर्देश हैं जो एक मेमोरी पते पर कूदते हैं यदि विशिष्ट झंडे सेट किए जाते हैं। उपरोक्त "शून्य" ध्वज याद है? यह "यदि समान" ध्वज के रूप में भी दोगुना हो जाता है, तो आप BEQकई सीपीयू जैसे निर्देशों को देखते हैं जो वास्तव में "शून्य" ध्वज सेट होने पर शाखाएं बनाते हैं।

  • तार्किक संचालन करने वाले निर्देश (और, या, नहीं), शिफ्ट बिट्स और टेस्ट बिट्स। वे सीपीयू के आधार पर गणित के निर्देशों जैसे झंडे को प्रभावित कर सकते हैं।

  • बिना शर्त कूदने वाले निर्देश।

  • निर्देश जो कूदते हैं और स्टैक पर रिटर्न एड्रेस (एक "कॉल") को सहेजते हैं, और अन्य निर्देश जो स्टैक से एक पते को पॉप करते हैं (एक "रिटर्न")।

  • विशेष निर्देश जो सीपीयू को रोकते हैं, सीपीयू की पहचान करते हैं, या बाधित हैंडलर कहते हैं।

  • "कोई ऑपरेशन नहीं" - लगभग सभी सीपीयू में एक "नो-ऑप" निर्देश होता है जो बस साइकिल का उपभोग करता है और आगे बढ़ता है।

यह वास्तव में सिर्फ एक उदाहरण है, कम प्रकार के निर्देशों के साथ सीपीयू और अधिक के साथ सीपीयू हैं।

मुद्दा यह है कि सीपीयू में गणित के निर्देशों के अलावा कई प्रकार के निर्देश हैं। एक उच्च-स्तरीय भाषा में सब कुछ ऊपर के प्रकारों के लिए टूट गया है और उनमें से केवल गणित या ALU- प्रकार के निर्देश होंगे।

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