पूर्णांक तुलना आंतरिक रूप से कैसे काम करती है?


18

उदाहरण के लिए जब दो सी की तुलना एक सी की तरह भाषा में होती है:

if (3 > 2) {
    // do something
}

यह निर्णय कैसे लिया जाता है कि 3 आंतरिक रूप से किए गए 2 (सच) या अधिक (झूठे) से अधिक है?


19
वर्तमान उत्तर मामले के लिए ठीक है जब तुलना चर अभिव्यक्ति के बारे में है, लेकिन एक अस्वीकरण का अभाव है कि कई आधुनिक संकलक आपके कोड के टुकड़े को देखेंगे, पता लगाएँ कि अभिव्यक्ति हमेशा सच होगी (शाब्दिक के कारण) और बस ifपूरी तरह से अनदेखा करें कोडिंग के लिए सीधे जा रहे हैं do something
SJuan76

3
के संभावित डुप्लिकेट कैसे करूं कंप्यूटर काम?

3
@ श्रीमान मैं असहमत हूँ। किसी भी "यह काम कैसे करता है" प्रोग्रामिंग जांच को उस प्रश्न के लिए संक्षिप्त किया जा सकता है, लेकिन यह उन्हें डुप्लिकेट नहीं बनाता है।
user1643723

1
@ user1643723 यह तब होता है जब विचाराधीन फ़ंक्शन एक विशिष्ट ओपकोड होता है।
क्राइसिस -ऑन स्ट्राइक-

1
@ user1643723 यह सवाल पूछ रहा है कि एक कंप्यूटर एक बुनियादी ऑपरेशन कैसे करता है, और शीर्ष उत्तर तर्क गेट्स और लॉजिक टेबल पर चर्चा करता है। दो विषय जो कि बड़े लक्ष्य के शीर्ष उत्तर में शामिल हैं, जो आपके प्रश्न का उत्तर भी देता है।

जवाबों:


61

खरगोश छेद नीचे सभी तरह, एह? ठीक है, मैं इसे आज़माऊँगा।

चरण 1. सी से मशीन की भाषा में

C संकलक आपकी तुलना को मशीन भाषा में संग्रहीत opcodes में बदल देता है । मशीन भाषा संख्याओं की एक श्रृंखला है जो सीपीयू निर्देशों के रूप में व्याख्या करता है। इस मामले में दो ऑपकोड होंगे: "कैरी के साथ घटाना" और "कैरी इज़ जम्प"। दूसरे शब्दों में, 2 को एक निर्देश में 3 से घटाया जाता है, और अगला निर्देश यह देखने के लिए जांचता है कि क्या यह बह निकला है। संख्या 2 और 3 को उन स्थानों पर लोड करने के लिए दो निर्देशों से पहले किया जाएगा जहां उनकी तुलना की जा सकती है।

MOV AX, 3    ; Store 3 in register AX
MOV BX, 2    ; Store 2 in register BX
SUB AX, BX   ; Subtract BX from AX
JC  Label    ; If the previous operation overflowed, continue processing at memory location "Label"

उपरोक्त में से प्रत्येक में एक द्विआधारी प्रतिनिधित्व है; उदाहरण के लिए, के लिए कोड SUBहै 2Dहेक्स, या 00101101बाइनरी में।

चरण 2. ALU को ऑपकोड

अंकगणित opcodes चाहते ADD, SUB, MUL, और DIVबुनियादी पूर्णांक गणित एक का उपयोग कर प्रदर्शन ALU या अंकगणित तर्क इकाई सीपीयू में बनाया गया। कुछ opcodes द्वारा नंबर रजिस्टरों में संग्रहीत किए जाते हैं ; अन्य ऑपकोड्स चिप को निर्देश देते हैं कि समय पर रजिस्टरों में जो कुछ भी संग्रहीत किया जाता है, उस पर गणित करने के लिए ALU को कॉल करें।

नोट: इस बिंदु पर हम किसी भी चीज़ से परे हैं कि कोई भी सॉफ्टवेयर इंजीनियर इस बारे में चिंता करेगा कि क्या सी जैसे 3 जीएल के साथ काम करना है ।

चरण 3. ALU, अर्ध-योजक और पूर्ण-योजक

क्या आप जानते हैं कि आपके द्वारा जाने वाले सभी गणितीय संचालन को NOR संचालन की एक श्रृंखला तक कम किया जा सकता है । और यह ठीक है कि कैसे ALU काम करता है।

ALU केवल बाइनरी नंबर के साथ काम करना जानता है, और केवल OR, NOT, AND, और XOR जैसे तार्किक कार्य कर सकता है। बाइनरी जोड़ और घटाव का कार्यान्वयन तार्किक संचालन की एक श्रृंखला के साथ पूरा किया जाता है, एक निश्चित तरीके से एक सब-सिस्टम में जोड़ा जाता है, जिसे एक योजक के रूप में जाना जाता है । ये सबसिस्टम "आधे-योजक" के एक नेटवर्क से बने होते हैं जो दो बिट्स पर काम करते हैं और उनके एकल-बिट योग और एकल-बिट कैरी फ़्लैग का निर्धारण करते हैं। इन्हें एक साथ जोड़कर, ALU 8, 16, 32 आदि बिट्स के साथ संख्याओं पर संचालन कर सकता है।

आधा एडर

घटाव के बारे में क्या? घटाव इसके अलावा का एक और रूप है:

A - B = A + (-B)

ALU गणना करता है -Bलेने के द्वारा दो के पूरक की B। एक बार जब इसे ऋणात्मक में बदल दिया जाता है, तो योजक के मूल्य को जमा करने पर घटाव ऑपरेशन में परिणाम होगा।

चरण 4: अंतिम चरण: ऑन-चिप ट्रांजिस्टर

योजक के संचालन विद्युत घटकों के संयोजन का उपयोग करके कार्यान्वित किए जाते हैं जो "लॉजिक गेट्स" बनाने के लिए बातचीत करते हैं, जैसे कि ट्रांजिस्टर-ट्रांजिस्टर लॉजिक या टीटीएल में पाया जाता है , या सीएमओएस में । कुछ उदाहरणों के लिए यहां क्लिक करें कि ये कैसे वायर्ड हैं।

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

कुछ अतिरिक्त नोट:

  1. आपके द्वारा लिखा गया कोड वास्तव में संकलक द्वारा पूर्ववर्ती होगा और रन टाइम पर निष्पादित नहीं किया जाएगा, क्योंकि यह केवल स्थिरांक से बना होता है।

  2. कुछ कंपाइलर मशीन कोड को संकलित नहीं करते हैं, लेकिन अभी तक एक और परत पेश करते हैं, जैसे कि जावा बाइटकोड या .NET मध्यवर्ती भाषा। लेकिन अंत में यह सब मशीन भाषा के माध्यम से निष्पादित हो जाता है।

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


3
एफडब्ल्यूआईडब्ल्यू, टीटीएल का संदर्भ देना भ्रामक हो सकता है क्योंकि लगभग कोई आधुनिक प्रोसेसर टीटीएल सिग्नलिंग का उपयोग नहीं करते हैं, अधिकांश 5 वी बीजेटी के बजाय सीएमईटी एफईटी और कम वोल्टेज का उपयोग करते हैं।
whatsisname

2
CMOS निश्चित रूप से TTL की तुलना में एक बेहतर संदर्भ होगा, जैसा कि @whatsisname बताता है, क्योंकि न केवल यह आधुनिक प्रोसेसर में जाने के लिए अधिक सटीक है, बल्कि यह वैचारिक रूप से बहुत सरल भी है।
जूल्स

3
@JackAidley का यही हिस्सा है: "दूसरे शब्दों में, 2 को एक निर्देश में 3 से घटाया जाता है, और अगला निर्देश यह देखने के लिए जांचता है कि क्या यह बह निकला है।"
कुतुलुमाइक

1
नाइटपैकिंग: मुझे लगता है CMPकि इस्तेमाल किया जाएगा, नहीं SUB- लेकिन फिर वह कमोबेश " SUBपरिणाम को नजरअंदाज किया जाता है और केवल झंडे सेट किए जाते हैं"
हेगन वॉन एटिजन

5
आपकी आधी- और पूर्ण-योजक की परिभाषाएँ गलत हैं। एक आधा योजक दो 1-बिट इनपुट लेता है और योग और रिटर्न देता है। एक पूर्ण योजक एक अतिरिक्त कैरी-इन इनपुट लेता है लेकिन अभी भी केवल एक बिट है। एन-बिट योजक बनाने के कई तरीके हैं, सरलतम रिपल-कैरी योजक है जो एन पूर्ण योजक की सिर्फ एक श्रृंखला है। बड़े एनएस के लिए अभ्यास में यह बहुत बुरा है इसलिए आधुनिक सीपीयू डिजाइनों में अधिक जटिल डिजाइन का उपयोग किया जाता है।
वू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.