रजिस्टर एक प्रकार की कंप्यूटर मेमोरी है जिसका उपयोग सीपीयू द्वारा तुरंत उपयोग किए जा रहे डेटा और निर्देशों को जल्दी से स्वीकार, स्टोर और ट्रांसफर करने के लिए किया जाता है। सीपीयू द्वारा उपयोग किए जाने वाले रजिस्टरों को प्रोसेसर रजिस्टर भी कहा जाता है।
Registers in assembly
कम्यूटर प्रोसेसर काम करने के लिए निर्देशों और प्रोसेसिंग डाटा की जरूरत होती है. सामन्यत बड़े और जटिल डाटा को कंप्यूटर ऑफ़ होने के बाद भी बनाये रखने के लिए हार्ड ड्राइव में स्टोर किया जाता है। लेकिन हार्ड ड्राइव से डाटा को डारेक्ट प्रोसेस करना बहुत धीमा होता है। इसीलिए उपयोगी निर्देशों और आगे प्रोसेस होने वाले डाटा को मेमोरी में लोड किया जाता है और वहां से एक्सेस किया जाता है। फिर भी कुस डाटा ऐसा होता है जो बार बार उपयोग हो रहा है जैसे निर्देश या बहुत जल्दी जिस डाटा पर प्रोसेस करना है उस डाटा को रजिस्टर में लोड किया जाता है। रजिस्टर डेटा तत्वों को मेमोरी एक्सेस किए बिना प्रोसेसिंग के लिए स्टोर करते हैं। प्रोसेसर चिप में सीमित संख्या में रजिस्टर बनाए जाते हैं।.
प्रोसेसर के कार्य को गति देने के लिए प्रोसेसर में कुछ आंतरिक मेमोरी स्टोरेज स्थान शामिल होते हैं, जिन्हें रजिस्टर कहा जाता है । यह बाकी मेमोरी से काफी तेज होते है। एक प्रोसेसर रजिस्टर में एक निर्देश, एक भंडारण पता, या कोई डेटा (जैसे बिट अनुक्रम या व्यक्तिगत वर्ण) हो सकता है।
हम रजिस्टर को समझने के लिए IA-32 आर्किटेक्चर या 32bit और 16 बिट रजिस्टरों प्रोसेसर का उपयोग करेंगे।
रजिस्टरों के प्रकार
कंप्यूटर में डाटा प्रोसेसिंग और सीपीयू के काम में मदद करने के लिए रजिस्टरों को उनके काम के अनुसार अलग-अलग श्रेणियों में बांटा गया है। उदाहरण के लिए - सामान्य रजिस्टर, नियंत्रण रजिस्टर, खंड रजिस्टर।
सामान्य रजिस्टर
सामान्य रजिस्टर - इन रजिस्टरों का उपयोग सामान्य डेटा, अंकगणित, तार्किक अगले निर्देश के बिंदु आदि के सामान्य प्रसंस्करण के लिए किया जाता है। सामान्य रजिस्टरों को निम्नलिखित समूहों में विभाजित किया जा सकता है - डेटा रजिस्टर, पॉइंटर रजिस्टर और इंडेक्स रजिस्टर।
- डेटा रजिस्टर - अंकगणित, तार्किक और अन्य कार्यों के लिए चार 32-बिट डेटा रजिस्टरों का उपयोग किया जाता है। इन 32-बिट रजिस्टरों का तीन तरीकों से उपयोग किया जा सकता है -
- पूर्ण 32-बिट डेटा 0 से 31 इंडेक्स में रजिस्टर करता है: EAX, EBX, ECX, EDX।
- 32-बिट रजिस्टरों के निचले भाग इंडेक्स 0 से 15 हैं। चार 16-बिट डेटा रजिस्टर AX, BX, CX और DX हैं।
- उपर्युक्त चार 16-बिट रजिस्टरों के निचले 0 से लेकर 7 इंडेक्स तक (AL , BL , CL ,DL )और उच्चतर 8 से लेकर 15 इंडेक्स तक हिस्सों को आठ 8-बिट डेटा रजिस्टरों के रूप में उपयोग किया जा सकता है।
इनमें से कुछ डेटा रजिस्टरों का अंकगणितीय संचालन में विशिष्ट उपयोग होता है।
- AX प्राथमिक एक्युमुलेटर हैइसका उपयोग इनपुट/आउटपुट और अधिकांश अंकगणितीय निर्देशों में किया जाता है। उदाहरण के लिए, गुणन ऑपरेशन में, एक ऑपरेंड को ऑपरेंड के आकार के अनुसार EAX या AX या AL रजिस्टर में संग्रहित किया जाता है।
- BX को आधार रजिस्टर के रूप में जाना जाता है - क्योंकि इसका उपयोग इंडेक्स एड्रेसिंग में किया जा सकता है.
- CX को काउंट रजिस्टर - ECX के रूप में, CX रजिस्टर पुनरावृत्त संचालन में लूप काउंट को स्टोर करते हैं.
- DX डेटा रजिस्टरइसका उपयोग इनपुट/आउटपुट ऑपरेशंस में भी किया जाता है। इसका उपयोग AX रजिस्टर के साथ-साथ DX के साथ बड़े मूल्यों को शामिल करने वाले कार्यों को गुणा और विभाजित करने के लिए भी किया जाता है.
- Pointer registers -पॉइंटर रजिस्टर 32-बिट EIP, ESP, and EBP रजिस्टर हैं और 16-बिट राइट पार्ट आईपी, IP और BP हैं। सूचक रजिस्टरों की तीन श्रेणियां हैं
- निर्देश पोइंटर (IP)- एक 16-बिट आईपी रजिस्टर है जो अगले निर्देश के ऑफसेट पते को निष्पादित करने के लिए संग्रहीत करता है। IP, CS रजिस्टर (CS:IP के रूप में) के सहयोग से कोड सेगमेंट में वर्तमान निर्देश का पूरा पता देता है।
- स्टैक पॉइंटर (SP) - SP रजिस्टर प्रोग्राम स्टैक के भीतर ऑफ़सेट मान प्रदान करता है। SP , SS रजिस्टर (SS:SP) के सहयोग से, प्रोग्राम स्टैक के भीतर डेटा या पते की वर्तमान स्थिति का प्रतिनिधित्व करता है।
- बेस पॉइंटर (BP) -16-बिट BP रजिस्टर मुख्य रूप से एक सबरूटीन को पारित पैरामीटर चर को संदर्भित करने में मदद करता है। पैरामीटर का स्थान प्राप्त करने के लिए SS रजिस्टर में पता BP में ऑफसेट के साथ संयुक्त है। BP को विशेष संबोधन के लिए आधार रजिस्टर के रूप में DI और SI के साथ भी जोड़ा जा सकता है।
- इंडेक्स रजिस्टर - 32-बिट इंडेक्स रजिस्टर, ESI और EDI, और उनके 16-बिट सबसे दाहिने हिस्से। एसआई और डीआई, अनुक्रमित पते के लिए उपयोग किए जाते हैं और कभी-कभी जोड़ और घटाव में उपयोग किए जाते हैं। इंडेक्स पॉइंटर्स के दो सेट हैं −
- Source Index (SI)− इसका उपयोग स्ट्रिंग ऑपरेशंस के लिए सोर्स इंडेक्स के रूप में किया जाता है.
- डेस्टिनेशन इंडेक्स (DI) - इसका उपयोग स्ट्रिंग ऑपरेशंस के लिए गंतव्य सूचकांक के रूप में किया जाता है।
कंट्रोल रजिस्टर्स
32-बिट निर्देश सूचक रजिस्टर और संयुक्त 32-बिट फ्लैग रजिस्टर को नियंत्रण रजिस्टर माना जाता है।
कई निर्देशों में तुलना और गणितीय गणनाएं शामिल होती हैं और फ़्लैग्स की स्थिति में परिवर्तन होता है और कुछ अन्य सशर्त निर्देश नियंत्रण प्रवाह को अन्य स्थान पर ले जाने के लिए इन स्टेटस फ़्लैग्स के मान का परीक्षण करते हैं।
सामान्य फ़्लैग बिट हैं:
<ओल>निम्न तालिका 16-बिट फ्लैग रजिस्टर में फ्लैग बिट्स की स्थिति दर्शाती है:
Flag: | O | D | I | T | S | Z | A | P | C | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bit no: | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
सेगमेंट रजिस्टर
खंड डेटा, कोड और ढेर रखने के लिए एक कार्यक्रम में परिभाषित विशिष्ट क्षेत्र हैं। तीन मुख्य खंड हैं - <उल>डीएस, सीएस और एसएस रजिस्टरों के अलावा, अन्य अतिरिक्त सेगमेंट रजिस्टर हैं - ईएस (अतिरिक्त सेगमेंट), एफएस और जीएस, जो डेटा स्टोर करने के लिए अतिरिक्त सेगमेंट प्रदान करते हैं।
असेंबली प्रोग्रामिंग में, प्रोग्राम को मेमोरी स्थानों तक पहुँचने की आवश्यकता होती है। एक खंड के भीतर सभी मेमोरी स्थान खंड के शुरुआती पते के सापेक्ष होते हैं। एक खंड एक ऐसे पते से शुरू होता है जो समान रूप से 16 या हेक्साडेसिमल 10 से विभाज्य है। इसलिए, ऐसे सभी मेमोरी पतों में सबसे दाहिना हेक्स अंक 0 है, जो आमतौर पर खंड रजिस्टरों में संग्रहीत नहीं होता है।
सेगमेंट रजिस्टर सेगमेंट के शुरुआती पतों को स्टोर करता है। एक खंड के भीतर डेटा या निर्देश का सटीक स्थान प्राप्त करने के लिए, ऑफसेट मान (या विस्थापन) की आवश्यकता होती है। किसी खंड में किसी स्मृति स्थान को संदर्भित करने के लिए, प्रोसेसर खंड रजिस्टर में खंड पते को स्थान के ऑफसेट मान के साथ जोड़ता है।
section .text
global _start ;लिंकर के लिए घोषित (gcc)
_start: ;लिंकर प्रवेश बिंदु
mov edx,len ;संदेश की लंबाई
mov ecx,msg ;लिखने के लिए संदेश
mov ebx,1 ;फाइल डिस्क्रिप्टर (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;कॉल कर्नेल
mov edx,7 ;संदेश की लंबाई
mov ecx,s2 ;लिखने के लिए संदेश
mov ebx,1 ;फाइल डिस्क्रिप्टर (stdout)
mov eax,4 ;सिस्टम कॉल (sys_write)
int 0x80 ;call kernel
mov eax,1 ;सिस्टम कॉल (sys_exit)
int 0x80 ;कॉल कर्नेल
section .data
msg db 'Displaying 7 hass',0xa ;एक संदेश
len equ $ - msg ;संदेश की लम्बाई
s2 times 7 db '#'
जब उपरोक्त कोड को संकलित और निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
Displaying 7 hsss
#######