الإدخال والإخراج

الإدخال والإخراج

تتعامل مع جميع المدخلات والمخرجات. يطلب (environment call) من نظام التشغيل أو المحاكي أداء خدمة لشيفرة التجميع الخاصة بك. الشاشة ولوحة المفاتيح هما اثنتان من الخدمات المتاحة بهذه الطريقة.

ضع رقم الخدمة في a7، وأي وسيط في a0، ثم قم بتشغيل . الخدمات التي يعرفها هذا المحاكي:

الخدمات (أ7)
1 # طباعة عدد صحيح (a0 = الرقم)
4 # طباعة سلسلة نصية (a0 = عنوان النص)
5 # قراءة عدد صحيح (تُعاد النتيجة في a0)
10 # إنهاء البرنامج
32 # تعليق (a0 = مللي ثانية)
استدعاء الخدمة
برنامج
a71
a0القيمة
ecall
النظاميطبع رقمًا

a7 = 1 يحدد خدمة الطباعة.

تشترك كل خدمة في نفس عملية المصافحة ذات السجلين. يشير a7 إلى الخدمة المطلوب تشغيلها، بينما يحمل a0 كل ما تحتاجه تلك الخدمة: قيمة للطباعة، أو عنوان للقراءة منه، أو مدة الانتظار. القائمة ثابتة وقصيرة، وتتألف من خمسة عناصر، لذا فإن تعلم هذه العملية مرة واحدة يغطي كل الطرق التي يتواصل بها هذا المحاكي مع العالم الخارجي. ويوسع نظام التشغيل الحقيقي هذه الفكرة لتشمل قائمة أطول بكثير.
قراءة رقم، ومضاعفته، وطباعته
li a7, 5 # قراءة عدد صحيح -> a0
ecall
add a0, a0, a0 # ضاعفه
li a7, 1 # طباعة عدد صحيح
ecall
li a7, 10
ecall

يختار قراءة عدد صحيح، ويوقف التنفيذ بانتظار الإدخال، ثم يعيد رقمك في a0. ويضيف قيمة a0 إلى نفسها، فيضاعفها في مكانها. ثم يطبع و النتيجة، ويخرج و. عند تشغيله عبر Run، تظهر نافذة إدخال في المحاكي. اكتب رقمًا وشاهده يعود مضاعفًا.

طباعة النص

أولاً، كلمتان جديدتان. القسم هو منطقة محددة في البرنامج: توجد التعليمات في قسم .text، بينما توجد البيانات الثابتة مثل النص في قسم .data. أما العنوان فهو مجرد رقم يحدد خانة واحدة في الذاكرة. بدلاً من حمل سلسلة كاملة، يمكن للسجل أن يحمل العنوان الذي تبدأ منه السلسلة، وتقوم خدمة الطباعة بالقراءة من هناك.

يوضع النص في قسم البيانات. تُرفق به تسمية، ثم تستخدم ("load address") لتحميل عنوان تلك التسمية والخدمة 4 لطباعته.

مرحبًا، RISC-V
.data
msg: .string "Hello, RISC-V!\n"
.text
la a0, msg # a0 = عنوان النص
li a7, 4 # طباعة سلسلة نصية
ecall
li a7, 10
ecall

في .data، تحجز التوجيهة مساحةً للنص وترفق التسمية msg. يخزّن .string المحارف ويضيف \n، وهو سطر جديد. في .text، يضع عنوان النص في a0، ويختار خدمة طباعة السلسلة، ويطبع المحارف من ذلك العنوان حتى يبلغ نهاية السلسلة. ثم يخرج البرنامج كالمعتاد.