ecall
lyszt.net ecall और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।
विवरण
ecall आपके प्रोग्राम जिस वातावरण में चलता है, उससे एक सेवा करने के लिए कहता है। Assembly संख्याओं को जोड़ और स्थानांतरित कर सकती है, लेकिन स्क्रीन, कीबोर्ड और अन्य उपकरण उस सिस्टम के हैं जो प्रोग्राम को होस्ट करता है, इसलिए कोड अपने आप उन तक नहीं पहुँच सकता। ecall का अर्थ environment call है। यह आपके कोड को रोकता है, होस्ट सेवा पूरी करता है, और नियंत्रण आपके कोड पर वापस आ जाता है। होस्ट वास्तविक हार्डवेयर पर एक ऑपरेटिंग सिस्टम है, और इस सिम्युलेटर में यह सिम्युलेटर स्वयं है।
प्रोग्राम उस सेवा का नाम बताता है जो वह चाहता है। परंपरा के अनुसार सेवा संख्या a7 में जाती है, सेवा को जो भी डेटा चाहिए वह a0 में जाता है, और फिर ecall चलता है। यह सिम्युलेटर ये सेवाएँ प्रदान करता है: 1 a0 में पूर्णांक प्रिंट करता है, 4 a0 में दिए पते पर टेक्स्ट प्रिंट करता है, 5 इनपुट से एक संख्या पढ़कर a0 में डालता है, 10 प्रोग्राम समाप्त करता है, और 32 a0 मिलीसेकंड के लिए रुकता है।
एक संख्या प्रिंट करने के लिए, प्रिंट सेवा चुनने के लिए a7 में 1 लोड करें, संख्या को a0 में लोड करें, और ecall चलाएँ। उदाहरण यही करता है। सेवा 10 एक प्रोग्राम समाप्त करती है, इसीलिए पाठ नीचे दी गई दो पंक्तियों के साथ समाप्त होते हैं। इसके बिना प्रोसेसर अंतिम पंक्ति से आगे जो भी आता है उसमें चलता रहता है।
li a7, 10 ecall
RISC-V मैनुअल कहता है कि ecall निष्पादन वातावरण को एक सेवा अनुरोध करता है, और यह कि वातावरण तय करता है कि पैरामीटर कैसे पास किए जाते हैं, आमतौर पर परिभाषित पूर्णांक रजिस्टरों में। यह सिम्युलेटर यहाँ वातावरण है और यह ऊपर सूचीबद्ध सेवा संख्याओं को परिभाषित करता है। मैनुअल यह भी नोट करता है कि ecall का नाम पहले scall था। इसका साथी ebreak नियंत्रण को डीबगर को लौटाता है। दोनों वातावरण को एक सटीक अनुरोधित ट्रैप उठाते हैं।
एक पूर्ण ऑपरेटिंग सिस्टम भी इसी तरह काम करता है, सेवाओं की एक लंबी सूची के साथ।
उदाहरण
li a7, 1 # service 1 = print integer li a0, 42 ecall # prints 42
