टी एल; डॉ;
“FS” / “GS” रजिस्टर किसके लिए है?
बस डिफ़ॉल्ट डेटा खंड (डीएस) से परे डेटा का उपयोग करने के लिए। बिल्कुल ES की तरह।
लंबे समय से पढ़ें:
तो मुझे पता है कि निम्नलिखित रजिस्टर और उनके उपयोग क्या होने चाहिए:
[...]
खैर, लगभग लेकिन डीएस 'कुछ' डेटा सेगमेंट नहीं है, लेकिन डिफ़ॉल्ट एक है। क्या सभी ऑपरेशन डिफ़ॉल्ट रूप से होते हैं (* 1)। यह सभी डिफ़ॉल्ट चर स्थित हैं - अनिवार्य रूप से data
और bss
। यह किसी तरह से इस कारण का हिस्सा है कि x86 कोड कॉम्पैक्ट क्यों नहीं है। सभी आवश्यक डेटा, जो कि सबसे अधिक बार एक्सेस किया जाता है, (प्लस कोड और स्टैक) 16 बिट आशुलिपि दूरी के भीतर है।
ES का उपयोग सब कुछ (* 2) तक पहुंचाने के लिए किया जाता है, जो कि DS के 64 KiB से आगे है। जैसे वर्ड प्रोसेसर का टेक्स्ट, स्प्रेड शीट की सेल या ग्राफिक्स प्रोग्राम का पिक्चर डेटा वगैरह। अक्सर माना जाता है, इस डेटा के रूप में ज्यादा पहुँच प्राप्त नहीं है, इसलिए एक उपसर्ग की जरूरत लंबे पते के क्षेत्रों का उपयोग करने से कम है।
इसी तरह यह केवल एक छोटी सी झुंझलाहट है कि स्ट्रिंग ऑपरेशन करते समय डीएस और ईएस को लोड (और पुनः लोड) करना पड़ सकता है - यह कम से कम अपने समय के सर्वश्रेष्ठ चरित्र हैंडलिंग निर्देश सेटों में से एक है।
जब उपयोगकर्ता डेटा 64 KiB से अधिक हो जाता है तो वास्तव में बहुत दुख होता है और संचालन शुरू करना पड़ता है। जबकि कुछ ऑपरेशन केवल एक समय (विचार A=A*2
) पर एकल डेटा आइटम पर किए जाते हैं , अधिकांश के लिए दो ( A=A*B
) या तीन डेटा आइटम ( A=B*C
) की आवश्यकता होती है । यदि ये आइटम अलग-अलग सेगमेंट में रहते हैं, तो ईएस को कई बार ओवरहेड जोड़कर प्रति ऑपरेशन कई बार लोड किया जाएगा।
शुरुआत में, 8 बिट दुनिया (* 3) के छोटे कार्यक्रमों और समान रूप से छोटे डेटा सेट के साथ, यह कोई बड़ी बात नहीं थी, लेकिन यह जल्द ही एक प्रमुख प्रदर्शन बोतल गर्दन बन गया - और इसके लिए गधे में एक सच्चा दर्द प्रोग्रामर (और संकलक)। 386 इंटेल के साथ अंत में दो और खंडों को जोड़कर राहत पहुंचाई गई, इसलिए स्मृति में फैले तत्वों के साथ कोई भी श्रृंखला एकात्मक , बाइनरी या टर्नरी ऑपरेशन, हर समय ईएस को फिर से लोड किए बिना ले सकती है।
प्रोग्रामिंग के लिए (कम से कम असेंबली में) और कंपाइलर डिजाइन, यह काफी लाभ था। बेशक, और भी अधिक हो सकता था, लेकिन तीन बोतल की गर्दन मूल रूप से चली गई थी, इसलिए इसे ज़्यादा करने की आवश्यकता नहीं है।
E / G के बाद अक्षर F / G का नामकरण केवल अक्षर निरंतरता है। CPU डिज़ाइन के बिंदु से कम से कम कुछ भी जुड़ा नहीं है।
* 1 - स्ट्रिंग गंतव्य के लिए ES का उपयोग एक अपवाद है, क्योंकि बस दो खंड रजिस्टरों की आवश्यकता होती है। उनके बिना बहुत उपयोगी नहीं होगा - या हमेशा एक खंड उपसर्ग की जरूरत है। जो आश्चर्यजनक विशेषताओं में से एक को मार सकता है, (गैर दोहरावदार) स्ट्रिंग निर्देशों का उपयोग उनके एकल बाइट एन्कोडिंग के कारण चरम प्रदर्शन के परिणामस्वरूप होता है।
* 2 - तो hindsight में 'एवरीथिंग एल्स सेगमेंट' 'एक्स्ट्रा सेगमेंट' की तुलना में बेहतर नामकरण होगा।
* 3 - यह ध्यान रखना हमेशा महत्वपूर्ण है कि 8086 केवल स्टॉप गैप माप के रूप में था जब तक कि 8800 समाप्त नहीं हुआ और मुख्य रूप से एम्बेडेड दुनिया के लिए 8080/85 ग्राहकों को बोर्ड पर रखने का इरादा था।