call
छद्मlyszt.net call और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।
विवरण
call एक फ़ंक्शन चलाता है और रिटर्न को संभालता है। यह फ़ंक्शन पर जाता है और रिटर्न पता ra में संग्रहीत करता है, जिससे फ़ंक्शन वापस आ सकता है। यह एक स्यूडो-इंस्ट्रक्शन है जो आमतौर पर नीचे दिए गए इंस्ट्रक्शन में विस्तारित होता है।
jal ra, label
जब कोई फ़ंक्शन एक ही जंप की पहुंच से बहुत दूर होता है, तो असेंबलर उस दूरी को कवर करने वाला एक लंबा अनुक्रम प्रतिस्थापित करता है। फ़ंक्शन नाम के साथ call लिखना इरादा बताता है और रूप का चुनाव असेंबलर पर छोड़ देता है। jal प्रविष्टि जंप और रिटर्न पते को सहेजने का वर्णन करती है। नीचे दी गई पंक्ति square फ़ंक्शन को कॉल करती है।
call square
किसी फ़ंक्शन को कॉल करने के लिए यह भी आवश्यक है कि कॉलर और कैली के बीच जानकारी कैसे पास होती है, इस पर सहमति हो। वह सहमति कॉलिंग कन्वेंशन है। कॉलर फ़ंक्शन के इनपुट को आर्ग्युमेंट रजिस्टरों में रखता है, जिनके नाम a0, a1 इत्यादि हैं, और फ़ंक्शन के लौटने पर परिणाम a0 से पढ़ता है। दोनों पक्ष एक ही नियम का पालन करते हैं, इसलिए अलग-अलग लिखा गया कोड भी साथ में काम करता है।
प्रत्येक call ra को अधिलेखित करता है। जो फ़ंक्शन स्वयं कॉल करता है, वह उन्हें करने से पहले प्राप्त ra को सहेजता है, फिर अपने स्वयं के रिटर्न से पहले उस मान को पुनर्स्थापित करता है। इसके बिना, भीतरी कॉल का रिटर्न पता बाहरी वाले को बदल देता है और फ़ंक्शन वापस नहीं आ सकता। जो फ़ंक्शन कुछ और कॉल नहीं करता, उसे ra सहेजने की आवश्यकता नहीं होती।
RISC-V मैनुअल कहता है कि मानक सॉफ़्टवेयर कॉलिंग कन्वेंशन रिटर्न पता रजिस्टर के रूप में x1 का उपयोग करता है। एक jal प्लस या माइनस 1 MiB के भीतर लक्ष्यों तक पहुंचता है, जहां एक MiB 1,048,576 बाइट्स है। इससे दूर के लक्ष्य के लिए auipc के बाद jalr आवश्यक है, जो 32-बिट pc-सापेक्ष पता सीमा में कहीं भी पहुंचता है।
उदाहरण square को a0 में 6 के साथ कॉल करता है और बाद में a0 में 36 पाता है। आर्ग्युमेंट अंदर जाता है और परिणाम कन्वेंशन के माध्यम से बाहर आता है।
विस्तृत होता है
jal ra, label
असेंबलर इस छद्म-निर्देश को ऊपर सूचीबद्ध वास्तविक निर्देश या निर्देशों से बदल देता है।
उदाहरण
call square # jumps to square; ra holds the return address
संदर्भ
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.5.1, Unconditional Jumps, page 30.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.1, Integer Register-Immediate Instructions, pages 28 to 29.
