इनपुट और आउटपुट
सभी इनपुट और आउटपुट को संभालता है। एक (environment call) ऑपरेटिंग सिस्टम या सिम्युलेटर से आपके assembly कोड के लिए एक सेवा करने के लिए कहता है। स्क्रीन और कीबोर्ड इस तरह उपलब्ध दो सेवाएँ हैं।
a7 में सर्विस नंबर डालें, a0 में कोई भी तर्क डालें, फिर ट्रिगर करें। इस सिम्युलेटर को ये सेवाएँ ज्ञात हैं:
1 # पूर्णांक प्रिंट करें (a0 = संख्या)4 # स्ट्रिंग प्रिंट करें (a0 = टेक्स्ट का पता)5 # पूर्णांक पढ़ें (परिणाम a0 में लौटाया जाता है)10 # प्रोग्राम बंद करें32 # सोएँ (a0 = मिलीसेकंड)
a7 = 1 प्रिंट सेवा चुनता है।
a7 बताता है कि कौन सी सेवा चलानी है, और a0 वह सब कुछ ले जाता है जिसकी उस सेवा को ज़रूरत होती है: प्रिंट करने के लिए एक मान, पढ़ने के लिए एक पता, प्रतीक्षा करने की एक अवधि। यह सूची निश्चित और छोटी है, इसमें पाँच प्रविष्टियाँ हैं, इसलिए इस हैंडशेक को एक बार सीख लेने से यह सिम्युलेटर बाहरी दुनिया से संवाद करने के हर तरीके को समझा जा सकता है। एक वास्तविक ऑपरेटिंग सिस्टम इसी विचार को एक बहुत लंबी सूची तक बढ़ाता है।li a7, 5 # पूर्णांक पढ़ें -> a0ecalladd a0, a0, a0 # इसे दोगुना करेंli a7, 1 # पूर्णांक प्रिंट करेंecallli a7, 10ecall
पूर्णांक पढ़ना चुनता है और इनपुट के लिए रुकता है, आपकी संख्या a0 में लौटाता है। a0 को स्वयं में जोड़ता है, उसे यथास्थान दोगुना कर देता है। फिर और परिणाम प्रिंट करते हैं, और और बाहर निकलते हैं। जब आप इसे Run करते हैं, सिम्युलेटर एक इनपुट बॉक्स दिखाता है। एक संख्या टाइप करें और देखें कि वह दोगुनी होकर वापस आती है।
टेक्स्ट प्रिंट करना
सबसे पहले दो नए शब्द। एक सेक्शन आपके प्रोग्राम का एक लेबल किया गया क्षेत्र है: निर्देश .text सेक्शन में रहते हैं, जबकि टेक्स्ट जैसे स्थिर डेटा का निवास .data सेक्शन में होता है। और एक पता केवल एक संख्या है जो मेमोरी में एक स्लॉट की पहचान करती है। पूरी स्ट्रिंग को साथ ले जाने के बजाय, एक रजिस्टर उस पते को ले जा सकता है जहाँ स्ट्रिंग शुरू होती है, और प्रिंट सेवा वहीं से पढ़ती है।
टेक्स्ट डेटा सेक्शन में जाता है। आप उससे एक लेबल संलग्न करते हैं, फिर उस लेबल का पता लोड करने के लिए ("लोड एड्रेस") का उपयोग करते हैं और उसे प्रिंट करने के लिए सर्विस 4 का उपयोग करते हैं।
.datamsg: .string "Hello, RISC-V!\n".textla a0, msg # a0 = टेक्स्ट का पताli a7, 4 # स्ट्रिंग प्रिंट करेंecallli a7, 10ecall
.data में, डायरेक्टिव टेक्स्ट के लिए जगह आरक्षित करता है और लेबल msg संलग्न करता है। .string अक्षरों को संग्रहीत करता है और \n, एक न्यूलाइन, जोड़ता है। .text में, टेक्स्ट का पता a0 में डालता है, प्रिंट-स्ट्रिंग सर्विस चुनता है, और उस पते से अक्षरों को तब तक प्रिंट करता है जब तक वह स्ट्रिंग के अंत तक नहीं पहुँच जाता। फिर प्रोग्राम सामान्य रूप से बाहर निकल जाता है।
