.COM फ़ाइल लोड करने के बाद DOS ने SP रजिस्टर को 0xFFFE में क्यों सेट किया?


10

Wikpedia पेज के बारे में .COM फाइलें https://en.wikipedia.org/wiki/COM_file पर पढ़ता है:

डॉस में .COM फाइलें सभी x86 सेगमेंट के रजिस्टर को एक ही मान में सेट करती हैं और SP (स्टैक पॉइंटर) को 0xFFFE पर रजिस्टर करती हैं, इस प्रकार स्टैक मेमोरी सेगमेंट के बहुत ऊपर से शुरू होता है और वहां से नीचे काम करता है।

लेकिन यह वास्तव में खंड के शीर्ष के नीचे एक शब्द शुरू करने के लिए स्टैक सेट करता है। जब स्टैक पर एक मान को धकेल दिया जाता है तो CPU 0xFFFC में SP को घटा देगा और मूल्य को वहां संग्रहीत करेगा, इस प्रकार खंड के शीर्ष शब्द को बर्बाद कर देगा। DOS के बजाय SP को 0 पर सेट नहीं करने का क्या कारण है?


6
डॉस एक पॉइंटर को एक int 20hनिर्देश पर स्टोर करता है ताकि आप एक retनिर्देश जारी करके अपने प्रोग्राम से बाहर निकल सकें ।
फ़ूज

जवाबों:


16

यह सीपी / एम के साथ संगतता के लिए है।

CP / M में आप केवल अपने प्रोग्राम का उपयोग करके वापस आ सकते हैं retऔर आपका प्रोग्राम साफ-सुथरे तरीके से निकल जाएगा। यह 0x0000स्टैक के शीर्ष पर होने और int 20hपते पर एक निर्देश होने से प्राप्त किया गया था 0x0000। भले ही int 20hकिसी कार्यक्रम को छोड़ने के लिए DOS का आधिकारिक तरीका है, लेकिन प्रोग्राम का उपयोग छोड़ने का विकल्प call 0CP / M से रखा गया था, और सबसे बाहरी-स्कोप retवही काम करता है जब से यह वापस आता है 0

0x0000स्टैक के शीर्ष पर उस शब्द को रखने के लिए, आपको प्रयोग करने योग्य स्टैक 2 बाइट्स को और नीचे शुरू करने की आवश्यकता है, जाहिर है। इसीलिए SPशुरू में 0xFFFEउस 0x0000शब्द की ओर इशारा करते हैं, जो बदले में int 20hनिर्देश की ओर इशारा करता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.