Assembly Language
रजिस्टर
खोज…
टिप्पणियों
रजिस्टर क्या हैं?
प्रोसेसर संख्यात्मक मानों (संख्याओं) पर काम कर सकता है, लेकिन इन्हें पहले कहीं स्टोर करना होगा। डेटा ज्यादातर मेमोरी में या इंस्ट्रक्शन ओपकोड (जो आमतौर पर मेमोरी में भी स्टोर होता है) के अंदर या विशेष प्रोसेसर में सीधे रखी गई मेमोरी में रखा जाता है, जिसे रजिस्टर कहा जाता है।
रजिस्टर में मूल्य के साथ काम करने के लिए, आपको इसे पते से संबोधित करने की आवश्यकता नहीं है, लेकिन विशेष mnemonic "नाम" का उपयोग किया जाता है, जैसे x86 पर उदाहरण ax
, या Z80 पर A
, या ARM पर r0
।
कुछ प्रोसेसर एक तरह से बनाए जाते हैं, जहां लगभग सभी रजिस्टर समान होते हैं और सभी उद्देश्यों के लिए उपयोग किए जा सकते हैं (अक्सर प्रोसेसर के RISC समूह), अन्य में विशिष्ट विशेषज्ञता होती है, जब शुरुआती सीपीयू के लिए केवल अंकगणित ( "संचायक") के लिए कुछ रजिस्टरों का उपयोग किया जा सकता है। ) और स्मृति को संबोधित करने के लिए अन्य रजिस्टर, आदि।
प्रोसेसर चिप पर सीधे मेमोरी का उपयोग करने वाले इस निर्माण में विशाल प्रदर्शन निहितार्थ होता है, रजिस्टर से दो नंबर जोड़कर इसे वापस रजिस्टर करने के लिए आमतौर पर उस प्रोसेसर द्वारा कम से कम संभव समय में किया जाता है (उदाहरण एआरएम प्रोसेसर पर: ADD r2,r0,r1
सेट r2
(r0 + r1)
मूल्य, एकल प्रोसेसर चक्र में)।
इसके विपरीत, जब ऑपरेंड में से कोई एक मेमोरी लोकेशन का संदर्भ दे रहा होता है, तो प्रोसेसर कुछ समय के लिए स्टाल कर सकता है, मेमोरी चिप से वैल्यू आने का इंतजार करता है (x86 पर यह L0 कैश में मानों के लिए शून्य प्रतीक्षा से लेकर सैकड़ों कैश तक हो सकता है जब सीपीयू किसी कैश में नहीं होता है और मेमोरी डीआरएएम चिप से सीधे पढ़ा जाना होता है)।
इसलिए जब प्रोग्रामर कुछ डेटा प्रोसेसिंग कोड बना रहा है, तो वह आमतौर पर सर्वश्रेष्ठ प्रदर्शन प्राप्त करने के लिए रजिस्टरों में प्रसंस्करण के दौरान सभी डेटा रखना चाहता है। यदि यह संभव नहीं है, और मेमोरी पढ़ना / लिखना आवश्यक है, तो उन्हें कम से कम किया जाना चाहिए, और एक पैटर्न तैयार करना चाहिए जो विशेष प्लेटफॉर्म के कैश / मेमोरी आर्किटेक्चर के साथ सहयोग करता है।
बिट्स में रजिस्टर का मूल आकार अक्सर समूह प्रोसेसर के लिए उपयोग किया जाता है, जैसे कि Z80 "8 बिट प्रोसेसर" , और 80386 "32 बिट प्रोसेसर" है - हालांकि वह समूहीकरण शायद ही कभी एक स्पष्ट कटौती है। उदाहरण के लिए Z80 रजिस्टरों के जोड़े के साथ भी काम करता है, जिससे देशी 16 बिट वैल्यू बनती है, और 32 बिट 80686 CPU में 64 बिट रजिस्टरों के साथ मूल रूप से काम करने के लिए MMX निर्देश हैं।
Zilog Z80 रजिस्टर
रजिस्टरों: 8 बिट: A
, B
, C
, D
, E
, H
, L
, F
, I
, R
, 16 बिट: SP
, PC
, IX
, IY
, और कुछ 8b रजिस्टरों की छाया: A'
, B'
, C'
, D'
, E'
, H'
, L'
और F'
।
8 बिट रजिस्टरों में से अधिकांश का उपयोग जोड़े में 16 बिट रजिस्टरों के रूप में भी किया जा सकता है: AF
, BC
, DE
और HL
।
SP
स्टैक पॉइंटर है , स्टैक मेमोरी के नीचे ( PUSH
/ POP
/ CALL
/ RET
निर्देशों द्वारा प्रयुक्त) को चिह्नित करता है।
PC
प्रोग्राम काउंटर है , जो वर्तमान में निष्पादित अनुदेश की ओर इशारा करता है।
I
इंटरप्ट रजिस्टर है , जो IM 2
इंटरप्ट मोड के लिए वेक्टर टेबल एड्रेस के उच्च बाइट की आपूर्ति करता है।
R
ताज़ा रजिस्टर, यह हर बार सीपीयू एक opcode (या opcode उपसर्ग) को हासिल करेगा बढ़ता जाता है।
IXH:IXL
रूप में IX
8bit भागों में हेरफेर करने के लिए कुछ Z80 प्रोसेसर पर कुछ अनौपचारिक निर्देश मौजूद हैं IXH:IXL
और IY
IYH:IYL
रूप में IYH:IYL
।
शैडो वेरिएंट को किसी भी निर्देश द्वारा सीधे एक्सेस नहीं किया जा सकता है, EX AF,AF'
निर्देश AF
और AF'
बीच स्वैप करेगा AF'
और EXX
निर्देश BC,DE,HL
को BC',DE',HL'
साथ स्वैप करेगा।
एक रजिस्टर में मूल्य लोड हो रहा है:
; from other register
LD I,A ; copies value in A into I (8 bit)
LD BC,HL ; copies value in HL into BC (16 bit)
; directly with value encoded in instruction machine code
LD B,d8 ; 8b value d8 into B
LD DE,d16 ; 16b value d16 into DE
; from a memory (ROM/RAM)
LD A,(HL) ; value from memory addressed by HL into A
LD A,(a16) ; value from memory with address a16 into A
LD HL,(a16) ; 16b value from memory with address a16 into HL
POP IX ; 16b value popped from stack into IX
LD A,(IY+a8) ; IX and IY allows addressing with 8b offset
; from I/O port (for writing value at I/O port use "OUT")
IN A,(C) ; reads I/O port C, value goes to A
संभावित स्रोत और गंतव्य ऑपरेंड्स के सही संयोजन सीमित हैं (उदाहरण के लिए LD H,(a16)
मौजूद नहीं है)।
एक स्मृति में भंडारण मूल्य:
LD (HL),D ; value D stored into memory addressed by HL
LD (a16),A ; value A into memory with address a16
LD (a16),HL ; value HL into 16b of memory with address a16
LD (IX+a8),d8 ; value d8 into memory at address IX+a8
LD (IY+a8),B ; value B into memory at address IY+a8
; specials ;)
PUSH DE ; 16b value DE pushed to stack
CALL a16 ; while primarily used for execution branching
; it also stores next instruction address into stack
x86 रजिस्टर
32-बिट दुनिया में, सामान्य-उद्देश्य रजिस्टर तीन सामान्य वर्गों में आते हैं: 16-बिट सामान्य-उद्देश्य रजिस्टर, 32-बिट विस्तारित सामान्य-उद्देश्य रजिस्टर, और 8-बिट रजिस्टर हाफ़। ये तीनों वर्ग रजिस्टर के तीन पूरी तरह से अलग सेट का प्रतिनिधित्व नहीं करते हैं। 16-बिट और 8-बिट रजिस्टर वास्तव में 32-बिट रजिस्टरों के अंदर के क्षेत्रों के नाम हैं। X86 CPU परिवार में रजिस्टर विकास के बारे में विस्तार रजिस्टरों पुराने CPUs में मौजूदा द्वारा आ गया है
आठ 16-बिट सामान्य-उद्देश्य रजिस्टर हैं: एएक्स, बीएक्स, सीएक्स, डीएक्स, बीपी, एसआई, डीआई, और एसपी; और आप उनमें कोई भी मूल्य रख सकते हैं जो 16 बिट या उससे कम में व्यक्त किया जा सकता है।
जब इंटेल ने 1986 में x86 आर्किटेक्चर को 32 बिट्स तक विस्तारित किया, तो इसने सभी आठ रजिस्टरों के आकार को दोगुना कर दिया और प्रत्येक रजिस्टर नाम के सामने एक ई प्रीफ़िक्स करके उन्हें नए नाम दिए, जिसके परिणामस्वरूप EAX, EBX, ECX, EDX, EBP, ESI, ईडीआई, और ईएसपी।
X86_64 के साथ रजिस्टर आकार का एक और दोहरीकरण आया, साथ ही कुछ नए रजिस्टर भी जोड़े गए। ये रजिस्टर 64 बिट्स चौड़े हैं और नाम दिए गए हैं (स्लैश का उपयोग वैकल्पिक रजिस्टर नाम दिखाने के लिए किया गया है): RAX / r0, RBX / r3, RCX / r1, RDX / r2, RBP / r5, RSI / r6, RDI / r7, RSP / r4 , आर 8, आर 9, आर 10, आर 11, आर 12, आर 13, आर 14, आर 15।
हालांकि सामान्य प्रयोजन के रजिस्टर तकनीकी रूप से किसी भी चीज़ के लिए उपयोग किए जा सकते हैं, प्रत्येक रजिस्टर में एक वैकल्पिक / मुख्य उद्देश्य भी होता है:
- AX (संचायक) का उपयोग अंकगणितीय परिचालनों में किया जाता है।
- सीएक्स (काउंटर) का उपयोग शिफ्ट और रोटेट निर्देशों में किया जाता है, और लूप के लिए उपयोग किया जाता है।
- DX (डेटा) का उपयोग अंकगणित और I / O संचालन में किया जाता है।
- BX (आधार) डेटा के लिए एक संकेतक के रूप में उपयोग किया जाता है (विशेष रूप से जब खंड मोड में डीएस खंड रजिस्टर के लिए एक ऑफसेट के रूप में)।
- एसपी (स्टैक) स्टैक के शीर्ष पर इंगित करता है।
- बीपी (स्टैक बेस) स्टैक के आधार को इंगित करता है।
- एसआई (स्रोत) स्ट्रीम ऑपरेशन (जैसे
lodsb
) के लिए स्मृति में एक स्रोत कोlodsb
। - DI (गंतव्य) स्ट्रीम ऑपरेशन (जैसे
stosb
) के लिए मेमोरी में एक गंतव्य कोstosb
।
खंड रजिस्टर्ड, खंडित मोड में उपयोग किया जाता है, स्मृति में विभिन्न खंडों को इंगित करता है। प्रत्येक 16-बिट सेगमेंट रजिस्टर 64k (16 बिट्स) डेटा को एक दृश्य देता है। मेमोरी के एक ब्लॉक को इंगित करने के लिए एक सेगमेंट रजिस्टर को सेट करने के बाद, रजिस्टर (जैसे BX
, SI
, और DI
) को सेगमेंट रजिस्टर में ऑफसेट के रूप में इस्तेमाल किया जा सकता है ताकि 64k स्पेस में विशिष्ट स्थानों तक पहुंचा जा सके।
छह खंड रजिस्टर और उनके उपयोग हैं:
रजिस्टर करें | पूरा नाम | विवरण |
---|---|---|
एसएस | स्टैक सेगमेंट | ढेर को इंगित करता है |
सीएस | कोड सेगमेंट | कोड लाने के लिए CPU द्वारा उपयोग किया जाता है |
डी एस | डेटा सेगमेंट | MOV संचालन के लिए डिफ़ॉल्ट रजिस्टर |
ES | अतिरिक्त खंड | अतिरिक्त डेटा खंड |
एफएस | अतिरिक्त खंड | अतिरिक्त डेटा खंड |
जी एस | अतिरिक्त खंड | अतिरिक्त डेटा खंड |
x64 रजिस्टर
X64 आर्किटेक्चर पुराने x86 आर्किटेक्चर का विकास है, इसने अपने पूर्ववर्ती (x86 रजिस्टर अभी भी उपलब्ध हैं) के साथ संगतता रखी है, लेकिन इसने नई विशेषताओं को भी पेश किया:
- रजिस्टरों में अब 64 बिट्स की क्षमता है;
- 8 अधिक सामान्य-उद्देश्य वाले रजिस्टर हैं;
- 64 बिट मोड में सेगमेंट रजिस्टरों को 0 पर मजबूर किया जाता है;
- प्रत्येक रजिस्टर के निचले 32, 16 और 8 बिट अब उपलब्ध हैं।
सामान्य उद्देश्य
रजिस्टर करें | नाम | Subregisters (बिट्स) |
---|---|---|
RAX | बिजली संचयक यंत्र | EAX (32), AX (16), AH (8), AL (8) |
Rbx | आधार | ईबीएक्स (32), बीएक्स (16), बीएच (8), बीएल (8) |
RCX | काउंटर | ECX (32), सीएक्स (16), सीएच (8), सीएल (8) |
RDX | डेटा | EDX (32), डीएक्स (16), डीएच (8), डीएल (8) |
RSI | स्रोत | ईएसआई (32), एसआई (16), एसएल (8) |
RDI | गंतव्य | ईडीआई (32), डीआई (16), डीएल (8) |
RBP | आधार सूचक | EBP (32), BP (16), BPL (8) |
आरएसपी | स्टेक सूचक | ईएसपी (32), एसपी (16), एसपीएल (8) |
R8-R15 | नए रजिस्टर | R8D-R15D (32), R8W-R15W (16), R8B-R15B (8) |
ध्यान दें
नए रजिस्टर के निचले बिट्स को संबोधित करने के लिए उपयोग किए जाने वाले प्रत्ययों के लिए खड़ा है:
- बी बाइट, 8 बिट्स;
- डब्ल्यू शब्द, 16 बिट्स;
- डी डबल शब्द, 32 बिट्स।