सीपीयू कैसे जानता है कि वास्तव में कमांड और निर्देशों का क्या मतलब है?


73

एक प्रोसेसर कैसे जानता है 'अलग-अलग कमांड का क्या मतलब है?

मैं विधानसभा स्तर के आदेशों जैसे MOV, PUSH, CALL, आदि के बारे में सोच रहा हूँ ...


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

मुझे वह टिप्पणी समझ में नहीं आती। एक सीपीयू "मेमोरी से निर्देश" प्राप्त करता है, पते के लिए उनसे पूछकर। केवल सीपीयू "सेंड" (साधारण शब्दों में, कम से कम) कमांड को डेटा डिलीवर करने के लिए मेमोरी में कमांड करता है, और I / O बसों पर, I / O उपकरणों को संचालित करने के लिए कमांड करता है।
डैनियल आर हिक्स

किसी भी सीपीयू के दिल में कुछ तर्क है कि (शाब्दिक रूप से) एक सरल प्रक्रिया को चलाने के लिए कड़ी मेहनत की जाती है: निर्देश पते के रजिस्टर से मूल्य लें, इसे मेमोरी में भेजें, उस निर्देश को पुनः प्राप्त करें जो मेमोरी रिटर्न करता है, और फिर इसे और अधिक में जाम करें हार्डवेयर्ड लॉजिक का जटिल घोंसला जो "समझता है" कि निर्देश का अर्थ क्या है और इसे कैसे निष्पादित करना है। ओह, और कहीं न कहीं अनुदेश का पता रजिस्टर बढ़ा है।
डैनियल आर हिक्स

पाठकों को इस सवाल में दिलचस्पी हो सकती है कि कंप्यूटर कैसे काम करता है? पर कंप्यूटर विज्ञान
राफेल

जवाबों:


88

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

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

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

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


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


2
ठीक है, मुझे यह मिल गया है, मुझे लगता है :) इसलिए कमांड बिट्स "स्विच" को टॉगल करता है जो प्रोसेसर को उस डेटा के साथ कुछ चीजें करेगा जो इसे प्राप्त करता है?
साइमन वेरबेके

4
@Simon Verbeke, बिल्कुल सही। वे बस प्रोसेसर में विद्युत संकेतों के प्रवाह को निर्देशित करने के लिए स्विच टॉगल करते हैं (जो इसे अधिक कमांड को फिर से लोड करने के लिए भी निर्देशित कर सकते हैं!)। स्विच सादृश्य अच्छा है, क्योंकि सब कुछ डिजिटल है (या तो तर्क 1/0, या सच / गलत)। बस आप जानते हैं, तर्क स्तर एक वास्तविक वोल्टेज है। यह निर्दिष्ट करना अभियंता पर निर्भर करता है कि 0 या 1 क्या है (उदाहरण के लिए, एक तर्क 1 को तब 2 वोल्ट के रूप में निर्दिष्ट किया जा सकता है)।
ब्रेकथ्रू

1
"बाइनरी समतुल्य निर्देश" जिसमें कंपाइलर या असेंबलर सब कुछ उबालता है जिसे ओपकोड कहा जाता है। यदि आप MIS या ARM जैसे RISC आर्किटेक्चर के opcode संरचना पर एक नजर डालते हैं, तो आप देख सकते हैं कि opcode के मैप में विभिन्न बिट्स से लेकर विशिष्ट ऑपरेशन कैसे होते हैं। अपनी लंबी उम्र और समय को फिर से बढ़ाने की प्रवृत्ति के कारण इंटेल में अब एक सरल मानचित्रण संरचना नहीं है।
लॉरेंस

3
नहीं, मैं x86 आर्किटेक्चर के दीर्घायु और समय-और-फिर-समय-विस्तार के कारण कह रहा था, माइक्रो-ऑपरेशन के लिए opcodes में व्यक्तिगत बिट्स की मैपिंग कट-एंड-ड्राई नीट नहीं है जैसे कि यह MIPS या ARM में है एक हद तक ( d.umn.edu/~gshute/spimsal/talref.html देखें , उदाहरण के लिए, इंटेल opcodes ऐसा कुछ नहीं हैं)। मुझे नहीं लगता कि "RISC" की बहुत धारणा थी जब इंटेल ने 1978 में x86 CPUs की शुरुआत की थी।
लॉरेंस

5
यह ध्यान दिया जाना चाहिए कि केवल कुछ सीपीयू ही माइक्रोकोडेड हैं। कुछ (अधिकतर छोटे उपकरण) असेंबली ऑपकोड से सीधे संचालित होते हैं। यह वास्तुकला पर निर्भर करता है।
नकली नाम

37

प्रोसेसर वास्तव में 'नहीं जानता' कि कमांड क्या हैं। कमांड केवल बाइनरी पैटर्न हैं जो प्रोसेसर को ऐसा करने का कारण बनते हैं जो हम कमांड का मतलब बताते हैं।

उदाहरण के लिए, एक ADD-R1-in-R2 ऑपरेशन ALU (अंकगणित और तर्क इकाई) तक पहुंचने के लिए 1 और 2 के रजिस्टरों का कारण होगा, ALU विभिन्न अन्य सामानों के बजाय योजक के आउटपुट का उपयोग करने का कारण बनता है, और कारण ALU का आउटपुट रजिस्टर 2 में मूल्य को बदलने के लिए। इन सभी चीजों को प्राप्त करने के लिए सरल तर्क सर्किट हैं ( मल्टीप्लेक्स , योजक , काउंटर , ...), हालांकि असली प्रोसेसर बहुत जटिल अनुकूलन का उपयोग करते हैं।

यह आप जैसे पूछ रहे हैं कि जब आप ब्रेक दबाते हैं तो एक कार को धीमा करना जानता है। कार को पता नहीं है, ब्रेक पैडल सिर्फ अप्रत्यक्ष रूप से नियंत्रित करने के लिए होता है कि पहियों के खिलाफ हार्ड पैड कैसे दबाए जाते हैं।


5
कारों के साथ अच्छा सादृश्य ब्रेक पेडल।
rjmunro

10

उदाहरण के लिए, एक निर्देश जो x86 / IA-32 प्रोसेसर को तत्काल 8-बिट मान को एक रजिस्टर में स्थानांतरित करने के लिए कहता है। इस निर्देश के लिए बाइनरी कोड 10110 है जिसके बाद 3-बिट आइडेंटिफायर है जिसके लिए रजिस्टर का उपयोग करना है। AL रजिस्टर के लिए पहचानकर्ता 000 है, इसलिए निम्न मशीन कोड AL रजिस्टर को 01100001 डेटा के साथ लोड करता है।

10110000 01100001

इस बाइनरी कंप्यूटर कोड को हेक्साडेसिमल में निम्नानुसार व्यक्त करके अधिक मानव-पठनीय बनाया जा सकता है

B0 61

यहां, B0 का अर्थ है 'AL में निम्नलिखित मान की एक प्रति ले जाएं', और 61 मान 01100001 का एक हेक्साडेसिमल प्रतिनिधित्व है, जो दशमलव में 97 है। इंटेल असेंबली लैंग्वेज इस तरह के निर्देशों के लिए mnemonic MOV (चाल का एक संक्षिप्त नाम) प्रदान करती है, इसलिए उपरोक्त मशीन कोड विधानसभा भाषा में निम्नानुसार लिखा जा सकता है, यदि आवश्यक हो तो एक व्याख्यात्मक टिप्पणी के साथ अर्धविराम के बाद। यह पढ़ना और याद रखना बहुत आसान है।

http://en.wikipedia.org/wiki/Assembler_language

दूसरे शब्दों में, जब आप अपने असेंबली प्रोग्राम को 'असेंबल' करते हैं, जैसे कि आपके निर्देश

MOV AL, 61h

उन संख्याओं में परिवर्तित हो जाते हैं, जिन्हें CPU एक विशेष अर्थ में जोड़ता है और फिर उसी के अनुसार कार्य करता है।


2
यह भी ध्यान देने योग्य है कि इस विशेष बिट पैटर्न के लिए मेमनोनिक प्रतीक "mov" का असाइनमेंट पूरी तरह से मनमाना था । मैं सिद्धांत रूप में एक असेंबलर लिख सकता था, जो उस निर्देश को "ओओफ़" कहता था और यह याद रखने के लिए कठिन होने के साथ-साथ काम भी करेगा।
dmckee

6

सुझाए गए पढ़ने:

CS152 से पाठ्यक्रम नोट भी देखें: यूसी बर्कले में कंप्यूटर आर्किटेक्चर एंड इंजीनियरिंग , एक कोर्स जिसमें छात्र सीपीयू लागू करते हैं।

यदि आप "घर-निर्मित सीपीयू" के लिए Google करते हैं, तो आपको कई उपहार मिलेंगे।


4

चरम सबसे न्यूनतम स्तर पर, सभी सीपीयू जोड़ सकते हैं। इसके अलावा, यह घटाना, गुणा और भाग कर सकता है (जैसे कि ये एक अलग तरीके से जोड़ रहे हैं)। सीपीयू इसका उपयोग मेमोरी ऐड्रेस में परिवर्धन लागू करके मेमोरी में डेटा को स्थानांतरित करने के लिए करता है।

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


7
तार्किक संचालन जैसे AND, OR, और NOT, साथ ही बिटशिफ्टिंग जोड़ने की तुलना में अधिक मौलिक हैं। जोड़ना वास्तव में इन कार्यों के संदर्भ में व्यक्त किया जा सकता है। वास्तव में असतत आईसी (टेक्सास इंस्ट्रूमेंट्स एलएस श्रृंखला) हैं जो इन कार्यों को करने के अलावा कुछ नहीं करते हैं और उनमें से एक प्रकार के सीपीयू का निर्माण करना संभव है। Google "पोंग योजनाबद्ध" यह देखने के लिए कि कोई गेम, उदाहरण के लिए, सीपीयू के बिना कैसे बनाया जाता है।
लॉरेंस

मेरा मतलब एक और सॉफ्टवेयर पॉइंट से है :) हाँ हार्डवेयर / लॉजिक के हिसाब से आपके पास NAND और NOR गेट्स की एक पागल राशि है। अच्छी बात।
n0pe

2

मैंने programmers.stackexchange.com पर संबंधित उत्तर दिया है, देखें कि कंप्यूटर कैसे काम करते हैं? जहाँ मैं कंप्यूटर के बारे में संक्षेप में सब कुछ जमीन से ऊपर चला गया कि कैसे कंप्यूटर इलेक्ट्रॉनों को स्थानांतरित करने के निर्देशों की व्याख्या करता है।

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