मूल रूप से हर आधुनिक कंप्यूटर एक बिट-पुश मशीन है। आमतौर पर यह डेटा के समूहों में बिट्स को चारों ओर धकेलता है, जिसे बाइट्स, वर्ड्स, डीआईडीएस या क्यूवर्ड कहा जाता है।
एक बाइट में 8 बिट्स होते हैं, एक शब्द 2 बाइट्स (या 16 बिट्स), एक डॉर्ड 2 शब्द (या 32 बिट्स) और एक क्वॉर्ड 2 डीआईडीएस (या 64 बिट्स)। ये बिट्स की व्यवस्था करने का एकमात्र तरीका नहीं हैं। 128 बिट और 256 बिट हेरफेर भी होता है, अक्सर SIMD के निर्देशों में।
विधानसभा निर्देश रजिस्टरों पर काम करते हैं और मेमोरी पते आमतौर पर उपरोक्त रूपों में से एक में काम करते हैं।
ALU (अंकगणितीय तर्क इकाइयाँ) बिट्स के ऐसे बंडलों पर काम करती हैं जैसे कि वे पूर्णांक (आमतौर पर दो के पूरक प्रारूप) का प्रतिनिधित्व करते हैं, और FPUs जैसे कि वे जहां फ्लोटिंग पॉइंट वैल्यू (आमतौर पर IEEE 754-स्टाइल float
और double
)। अन्य भाग ऐसे कार्य करेंगे जैसे कि वे किसी प्रारूप, वर्ण, तालिका प्रविष्टियाँ, CPU निर्देश, या पते का बंडल डेटा हैं।
एक सामान्य 64 बिट कंप्यूटर पर, 8 बाइट्स (64 बिट्स) के बंडल पते होते हैं। हम इन पतों को एक हेक्स प्रारूप (जैसे 0xabcd1234cdef5678
) में पारंपरिक रूप से प्रदर्शित करते हैं , लेकिन यह मनुष्य के लिए बिट पैटर्न को पढ़ने का एक आसान तरीका है। प्रत्येक बाइट (8 बिट) को दो हेक्स वर्णों के रूप में लिखा जाता है (प्रत्येक हेक्स चरित्र - 0 से एफ - 4 बिट्स का प्रतिनिधित्व करता है)।
वास्तव में क्या चल रहा है (वास्तव में कुछ स्तर के लिए) यह है कि बिट्स हैं, आमतौर पर एक रजिस्टर में संग्रहीत या मेमोरी बैंक में आसन्न स्थानों में संग्रहीत किया जाता है, और हम उन्हें किसी अन्य मानव का वर्णन करने का प्रयास कर रहे हैं।
एक पॉइंटर के बाद मेमोरी कंट्रोलर से हमें उस स्थान पर कुछ डेटा देने के लिए कहा जाता है। आप आम तौर पर एक निश्चित स्थान पर एक निश्चित संख्या में बाइट्स के लिए मेमोरी कंट्रोलर से पूछेंगे (अच्छी तरह से, स्थानों की एक सीमा, आमतौर पर सन्निहित), और यह विभिन्न तंत्रों के माध्यम से दिया जाता है जो मुझे नहीं मिलेगा।
कोड आमतौर पर डेटा को लाने के लिए एक गंतव्य निर्दिष्ट करता है - एक रजिस्टर, एक अन्य मेमोरी एड्रेस आदि - और आमतौर पर एक पूर्णांक, या इसके विपरीत की उम्मीद में फ्लोटिंग पॉइंट डेटा को एक रजिस्टर में लोड करना एक बुरा विचार है।
C / C ++ में डेटा का प्रकार कुछ ऐसा है जिसे कंपाइलर ट्रैक करता है, और यह बदलता है कि कोड क्या उत्पन्न होता है। आमतौर पर डेटा में कुछ भी आंतरिक नहीं होता है जो इसे वास्तव में किसी एक प्रकार का बनाता है । बिट्स का एक संग्रह (बाइट्स में व्यवस्थित) जो कोड द्वारा एक पूर्णांक-जैसे तरीके (या एक फ्लोट-जैसे तरीके, या एक पते की तरह) में हेरफेर किया जाता है।
इसके अपवाद हैं। ऐसे आर्किटेक्चर हैं जहां कुछ चीजें अलग तरह की होती हैं। सबसे सामान्य उदाहरण संरक्षित निष्पादन पृष्ठ हैं - सीपीयू को बताते हुए निर्देश कि बिट्स क्या हैं, चलाने के समय (मेमोरी) पृष्ठों को निष्पादित करने के लिए कोड विशेष रूप से चिह्नित हैं, संशोधित नहीं किया जा सकता है, और आप उन पृष्ठों को निष्पादित नहीं कर सकते हैं जो चिह्नित नहीं हैं। निष्पादन पृष्ठों के रूप में।
केवल डेटा को भी पढ़ा जाता है (कभी-कभी ROM में संग्रहीत होता है जिसे भौतिक रूप से नहीं लिखा जा सकता है!), संरेखण मुद्दे (कुछ प्रोसेसर double
मेमोरी से s लोड नहीं कर सकते हैं जब तक कि वे विशेष तरीकों से संरेखित न हों, या SIMD निर्देश जिसमें कुछ संरेखण की आवश्यकता होती है), और असंख्य अन्य वास्तुकला quirks।
यहां तक कि विस्तार का उपरोक्त स्तर झूठ है। कंप्यूटर बिट्स के आसपास "वास्तव में" नहीं हैं, वे वास्तव में वोल्टेज और वर्तमान के आसपास जोर दे रहे हैं। ये वोल्टेज और करंट कभी-कभी वे नहीं करते हैं जो वे बिट्स के अमूर्त स्तर पर करने के लिए "माना" जाते हैं। चिप्स को ऐसी अधिकांश त्रुटियों का पता लगाने और उच्च स्तरीय अमूर्तता के बिना उन्हें ठीक करने के लिए डिज़ाइन किया गया है ताकि इसके बारे में पता चल सके।
वह भी झूठ है।
अमूर्तता का प्रत्येक स्तर नीचे एक को छुपाता है, और आपको प्रिंट आउट के क्रम में फेनमैन आरेखों को ध्यान में रखे बिना समस्याओं को हल करने के बारे में सोचने देता है "Hello World"
।
तो ईमानदारी के पर्याप्त स्तर पर, कंप्यूटर बिट्स को धक्का देते हैं, और उन बिट्स को अर्थ दिया जाता है कि उनका उपयोग कैसे किया जाता है।