2012-04-11 29 views
5

यदि मैं इसे सही ढंग से समझता हूं, तो प्रोग्राम काउंटर को निर्देश के पते पर निष्पादित किया जाता है और अधिकांश मामलों में आप अगले निर्देश पते पर अग्रिम करने के लिए प्रोग्राम काउंटर में चार जोड़ते हैं। लेकिन कहें कि आपके पास एक प्रोग्राम काउंटर है जो स्मृति में एक शब्द (जैसे शब्द 15) को इंगित कर रहा है और आप अगले निर्देश पर अग्रिम करना चाहते हैं, क्या आप अगले निर्देश प्राप्त करने के लिए सीधे 4 को जोड़ना चाहते हैं ?? किसी भी स्पष्टीकरणकार्यक्रम काउंटर?

उत्तर

6

बात अनुदेश सूचक कहा जाता है कि सराहना की जाएगी। एक बार जब प्रोसेसर वर्तमान निर्देश को डीकोड करता है तो यह पता चलता है कि यह कितने बाइट्स पर कब्जा कर लेता है और जानता है कि अगले निर्देश में अग्रिम करने के लिए वर्तमान निर्देश सूचक मूल्य में कितना जोड़ना है ताकि जब वर्तमान निर्देश निष्पादित हो जाए तो प्रोसेसर जानता है कि आगे क्या करना है।

तो उदाहरण के लिए प्रोसेसर आपके सूचकांक के रूप में निर्देश सूचक 15 के साथ शुरू होता है - ऐसा लगता है कि उस पते पर क्या होता है, 5 बाइट्स पर कब्जा करने वाला निर्देश होता है, कोई समस्या नहीं - यह 5 को जोड़ती है वर्तमान मूल्य और यह 20 उत्पन्न करता है और इसलिए निर्देश सूचक अब मूल्य 20 स्टोर करता है और प्रोसेसर तब वर्तमान निर्देश निष्पादित करता है।

+1

आपका उदाहरण समझ में आता है, लेकिन जहां पीसी 4 से यदि आप जोड़ने के उस पते पर क्या पर निर्भर करता है आता है ?? – Ockham

+1

@ user28694: यह एक प्रोसेसर पर निर्भर करेगा। कुछ प्रोसेसर में निर्देश सेट होता है जहां सभी निर्देशों की लंबाई समान होती है, इसलिए वे बिना शर्त के +4 कर सकते हैं। कुछ प्रोसेसर में परिवर्तनीय लंबाई निर्देश होंगे और वे तय करेंगे कि वे निर्देश के पहले बाइट्स का उपयोग करके किस निर्देश से निपटते हैं। – sharptooth

+0

[एमआईपीएस निर्देश सभी 32-बिट लंबे] नहीं हैं (http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats)? –

2

तुम कभी अग्रिम कार्यक्रम काउंटर सीधे - सीपीयू अपने कार्यक्रम को क्रियान्वित करते हुए आप के लिए यह करता है। प्रोग्रामर के रूप में, आप विभिन्न कूद निर्देशों (सशर्त, बिना शर्त, subroutine, कूदता है) को निष्पादित करके प्रोग्राम काउंटर में हेरफेर करते हैं। जब आप स्थिति-स्वतंत्र कोड में शाखा करते हैं तो प्रोग्राम काउंटर में ऑफ़सेट जोड़ने की आवश्यकता होती है। हालांकि, यहां तक ​​कि इस मामले में आप प्रोग्राम काउंटर पर निर्देश का आकार नहीं जोड़ते हैं: इसके बजाय, आप उस स्थान का ऑफ़सेट प्रदान करते हैं जहां आप "शाखा से सापेक्ष पते" को निष्पादित करके कूदना चाहते हैं।

+0

हम कैसे बूटलोडर लिख रहे हैं, जो पूर्ण पते 0x4000 पर स्थित एप्लिकेशन कोड पर कूद जाएगा? इस मामले में हम सीधे कार्यक्रम काउंटर को पूर्ण पते पर बदल देंगे। – eepty

+0

@eepty यही दूसरा वाक्य कहता है: आप इसे एक जंप निर्देश के साथ कर रहे हैं, न कि रजिस्टर-सेटिंग निर्देश के साथ। – dasblinkenlight

संबंधित मुद्दे