jrछद्म

jr

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

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

विवरण

jr एक रजिस्टर में संग्रहीत पते पर कूदता है। यह नाम jump register का संक्षिप्त रूप है। j कोड में लिखे एक निश्चित लेबल पर कूदता है। jr उस पते पर कूदता है जो एक रजिस्टर में होता है, जिसे प्रोग्राम चलते समय निकालता है। यह कोई वापसी पता सहेजता नहीं है।

jr नीचे दी गई पंक्ति के लिए एक छद्म-निर्देश है, एक रजिस्टर जंप जो वापसी पते को त्याग देता है (jalr देखें)।

jalr zero, rs, 0

जंप टेबल मेमोरी में एक सरणी है जो कई रूटीनों के पते रखती है, और jr इसके साथ प्रयोग किया जाता है। रूटीन संख्या i चुनने के लिए, प्रोग्राम टेबल में उसका स्लॉट निकालता है, वहाँ संग्रहीत पते को एक रजिस्टर में लोड करता है और उस पर कूदने के लिए jr का उपयोग करता है। एक लुकअप और एक जंप तुलनाओं की एक लंबी श्रृंखला (क्या यह case 0 है, case 1, case 2 और इसी तरह) को प्रतिस्थापित कर देते हैं, चाहे मामलों की संख्या कुछ भी हो। सघन switch कथन और एक इंटरप्रेटर का आंतरिक लूप इस तरह डिस्पैच करते हैं।

RISC-V मैनुअल सादे बिना-शर्त अप्रत्यक्ष जंपों को jalr के रूप में एन्कोड करता है जिसमें rd को x0 पर सेट किया जाता है। यह नोट करता है कि jalr अपने इमीडिएट को 2 बाइट्स के गुणज के रूप में नहीं मानता, सशर्त शाखाओं के विपरीत, और यह कि jalr के अधिकांश उपयोगों में शून्य इमीडिएट होता है या वे lui या auipc के बाद आते हैं।

किसी फ़ंक्शन से लौटना ra में मौजूद पते पर एक जंप है, इसलिए ret दूसरे नाम से jr ra है। जंप निर्देशों का समूह इस बात में भिन्न होता है कि पता कहाँ से आता है और क्या वापसी पता सहेजा जाता है।

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

jalr zero, rs, 0

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

उदाहरण

la t0, target
jr t0            # jump to the address held in t0