jछद्म

j

छद्म
RISC-V असेंबली संदर्भ

lyszt.net j और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।

विवरण

j सबसे सरल जंप करता है: यह हमेशा नियंत्रण को एक लेबल पर स्थानांतरित करता है, बिना किसी शर्त के। एक ब्रांच निर्देश नियंत्रण को केवल तब स्थानांतरित करता है जब कोई तुलना सफल होती है। सिंटैक्स है j label।

यह एक बिना शर्त जंप है, जिसे goto भी कहा जाता है। लूप और if/else ब्लॉक इस पर निर्भर करते हैं। एक बुनियादी लूप शीर्ष पर एक सशर्त ब्रांच रखता है ताकि यह तय हो सके कि कब बाहर निकलना है, लूप बॉडी चलाता है, और अंत में एक j के साथ समाप्त होता है जो अगले पास के लिए शीर्ष पर वापस जाता है। उस जंप के बिना, निष्पादन अंत से गिर जाता है और लूप कभी दोहराता नहीं है। if और else में, if ब्लॉक के अंत में एक j else ब्लॉक को छोड़ देता है, इसलिए दोनों ब्लॉकों में से केवल एक ही चलता है।

j रिटर्न एड्रेस रिकॉर्ड नहीं करता, जो इसे फंक्शन कॉल से अलग करता है। j का उपयोग अपने कोड के भीतर घूमने के लिए करें, चाहे लूप के लिए हो या किसी ब्लॉक को छोड़ने के लिए, और call का उपयोग तब करें जब निष्पादन को वापस आना हो। निर्णायक कारक यह है कि क्या रिटर्न की आवश्यकता है।

RISC-V मैनुअल सादे बिना शर्त जंप को jal के रूप में एन्कोड करता है जिसमें rd को x0 पर सेट किया जाता है। यह बताता है कि इस जंप का उपयोग हमेशा बिना शर्त ब्रांच के लिए किया जाना चाहिए, न कि उस सशर्त ब्रांच के लिए जिसकी शर्त हमेशा सत्य होती है। जंप pc-relative भी होते हैं, ब्रांच की तुलना में बहुत व्यापक रेंज कवर करते हैं, और सशर्त ब्रांच प्रेडिक्शन टेबल को अछूता छोड़ देते हैं।

j नीचे दी गई लाइन के लिए एक स्यूडो-इंस्ट्रक्शन है।

jal zero, label

यह एक जंप और लिंक है जो रिटर्न एड्रेस को zero रजिस्टर में लिखता है, जो इसे त्याग देता है, केवल जंप छोड़ देता है। उदाहरण एक लूप के शीर्ष पर वापस जंप करता है।

विस्तृत होता है

jal zero, label

असेंबलर इस छद्म-निर्देश को ऊपर सूचीबद्ध वास्तविक निर्देश या निर्देशों से बदल देता है।

उदाहरण

j loop   # go back to the top of the loop