Easy RISC-V: इंटरैक्टिव RISC-V असेंबली प्रोग्रामिंग परिचय ट्यूटोरियल
(dramforever.github.io)- वेब ब्राउज़र में चलने वाले emulator के जरिए RISC-V assembly को step-by-step सीखने के लिए बनाया गया एक इंटरैक्टिव ट्यूटोरियल, जो Nick Morgan के Easy 6502 से प्रेरित है
- RV32I_Zicsr instruction set के 45 बुनियादी निर्देशों और privileged architecture की मुख्य अवधारणाओं को कवर करता है, और compiler target के रूप में पर्याप्त रूप से पूर्ण instruction set सिखाता है
- arithmetic/logic operations, branch/jump, memory access, function calling convention, stack management जैसी assembly programming की बुनियाद को practical examples के साथ प्रस्तुत करता है
- Machine mode और User mode के बीच privilege level transition, exception handling, और CSR(control and status register) manipulation को वास्तविक code के साथ समझाता है
- ट्यूटोरियल का अंतिम लक्ष्य system call और exception handling को support करने वाला एक ultra-small operating system खुद लिखना है, जिससे RISC-V low-level development के पूरे flow का अनुभव किया जा सके
ट्यूटोरियल की संरचना और मुख्य सीखने की सामग्री
बुनियादी निर्देश और processor अवधारणाएँ
- processor state: program counter(pc), 31 general-purpose registers(x1~x31), और special zero register(x0) को समझना
- arithmetic instructions:
add,addi,subआदि के जरिए जोड़/घटाव और overflow behavior सीखना - bit operations:
and,or,xor,sll,srl,sraजैसी bit-level logic operations और shift instructions का अभ्यास - comparison instructions:
slt,sltuआदि का उपयोग कर signed/unsigned integer comparison और conditional logic लागू करना
control flow और memory
- branch और jump:
beq,bne,blt,jal,jalrका उपयोग कर conditional/unconditional branching और function call mechanism - memory access:
lw,sw,lb,lh,sb,shनिर्देशों के जरिए word/halfword/byte इकाइयों में load/store कार्य - memory-mapped I/O: खास addresses पर read/write करके external devices से communication का तरीका समझना
- position-independent code:
auipcनिर्देश और PC-relative addressing के जरिए relocatable code लिखने की तकनीक
functions और calling convention
- register aliases:
a0~a7(arguments),s0~s11(saved),t0~t6(temporary),ra(return address),sp(stack pointer) जैसी भूमिकाएँ - stack management: function entry पर registers सहेजना, stack space allocate/free करना, return address को preserve और restore करने के pattern
- recursive functions: Fibonacci sequence implementation के जरिए recursive calls और stack frame management का अभ्यास
privileged architecture और operating system
- privilege levels: Machine mode(level 3) और User mode(level 0) के अंतर और isolation mechanism
- CSR instructions:
csrrw,csrrs,csrrcआदि से control registers को read/write करना और bit fields manipulate करना - exception handling:
mcause,mepc,mtval,mstatusCSR के जरिए exception जानकारी देखना और handler लिखना - mode switching:
mretनिर्देश से User mode में प्रवेश और वापसी, तथाmscratchका उपयोग कर context switching
अंतिम प्रोजेक्ट: ultra-small OS
- system call implementation:
ecallनिर्देश से User mode से Machine mode में trap कर putchar/exit functionality देना - register save/restore: stack पर सभी general-purpose registers का backup और restore करने वाले trap handler की पूरी संरचना
- exception handling logic:
mcauseसे exception का कारण पहचानना, system call number(a7) के अनुसार dispatch करना, और error message output करना - executable code: वेब emulator में सीधे चल सकने वाला पूरा OS kernel entry/return code उपलब्ध
संदर्भ सामग्री और लाइसेंस
- ट्यूटोरियल और code दोनों CC0 public domain या 0-clause BSD license के अंतर्गत हैं
- मूल लेख और code repository: https://github.com/dramforever/easyriscv
- RISC-V सीखने के लिए शिक्षा, शोध, और simulation environment बनाने के लिए उपयुक्त
2 टिप्पणियां
वाह
मेरी major क्लास में पढ़ाए जाने वाले RISC-V assembly में दिलचस्पी हो गई थी.. इसलिए अलग से कोई किताब खरीदकर पढ़ने की सोच रहा था, लेकिन हर जगह सिर्फ ARM architecture ही दिख रहा था और RISC-V नहीं, तो समझ नहीं आ रहा था कि क्या पढ़ूँ। ऐसे में लगता है कि पढ़ाई के लिए मुझे एक बहुत अच्छा resource मिल गया है
धन्यवाद!!!
Hacker News टिप्पणियाँ
यह वाकई एक बहुत अच्छा गाइड था
अच्छा होता अगर पहला “My first RISC-V assembly program” emulator स्क्रीन गाइड की सबसे शुरुआत में होता। नहीं तो पाठक ‘interactive’ शीर्षक के बावजूद इसे सिर्फ टेक्स्ट-आधारित परिचय समझ सकते हैं
मैं अगले कुछ दिनों तक इस पर और समय देने वाला हूँ। मुझे RISC-V में काफ़ी दिलचस्पी है, और मुझे लगता है कि इसका उज्ज्वल भविष्य है
अगर कोई AI विशेषज्ञ यह पोस्ट देख रहा हो, तो Replit या Lovable जैसे प्लेटफ़ॉर्म पर RISC-V assembly में Core War को फिर से बनाना सचमुच शानदार होगा
मैंने Patterson और Hennessy की Computer Organization And Design से assembly सीखी थी, और साफ़ महसूस होता है कि RISC-V ने MIPS से कितना कुछ लिया है
दोनों ISA में वही लोग शामिल थे, और MIPS की delay slot जैसी गलतियों से बचा गया। अगर आपको MIPS का अनुभव है, तो RISC-V assembly लगभग वैसी ही लगेगी
इन दिनों मैं AArch64 भी देख रहा हूँ; यह RISC-V जितना साफ़-सुथरा नहीं है, लेकिन इसका व्यावहारिक design प्रभावशाली है। बल्कि कभी-कभी लगता है कि शायद RISC-V को ज़रूरत से ज़्यादा रूढ़िवादी ढंग से डिज़ाइन किया गया है
मैंने खुद TCP Socket in RISC-V Assembly लिखा है
इसमें RV64I ISA का उपयोग किया गया, और linker relaxation की अवधारणा समझनी पड़ती है। मैंने संदर्भ सामग्री भी साथ जोड़ दी है
लगता है Position Independence सेक्शन में कोई गलती है
क्या उदाहरण कोड में
auipcकी जगहluiइस्तेमाल करने पर ही 0x3004 नहीं आना चाहिए?luiabsolute address बनाता है, जबकिauipc/addiसंयोजन position-independent address बनाता है। अगरauipcaddress 0 पर हो तो परिणाम वही होगा, लेकिन वास्तव में उसमें current instruction address जुड़ता हैइस सामग्री की interactive संरचना सचमुच शानदार है
C/C++ developer होने के नाते मुझे assembly हमेशा कठिन लगती थी, लेकिन इस तरीके से यह बहुत अधिक स्पष्ट हो गई
lwकी जगहload4,jकी जगहjumpजैसे ज़्यादा सहज नाम इस्तेमाल किए जा सकते थे; punch card का ज़माना तो नहीं है, फिर सब कुछ इतना छोटा क्यों लिखा जाता है, समझ नहीं आतायह पढ़कर मेरा फिर से low-level programming करने का मन हो गया
कॉलेज में mechatronics पढ़ते समय मैंने C और assembly से microcontroller पर काम किया था, लेकिन अब मैं web development में आ गया हूँ
क्या RISC-V hardware सीखने के लिए कोई विश्वसनीय सामग्री है? अगर संभव हो तो मैं इसे Rust के साथ करना चाहूँगा
और Rust-आधारित OS tutorial भी था, लेकिन अभी उसका लिंक नहीं मिल रहा
अगर आपको असली hardware चाहिए, तो neorv32 की सिफारिश करूँगा — इसका documentation अच्छा है: आधिकारिक दस्तावेज़, GitHub repository. यह VHDL में लिखा गया RISC-V core है
RISC-V hardware आसानी से मिल सकता है
RISC-V on Raspberry Pi Pico 2 देखें
Kickstarter पेज देखें
और अगर आप RISC-V और FPGA दोनों के साथ काम करना चाहते हैं, तो PolarFireSoC भी है। यह AMD/Xilinx की तुलना में काफ़ी सस्ता है और उपयोगी भी। development environment थोड़ा पुराना लेकिन तेज़ है, documentation बिखरा हुआ है, लेकिन ज़्यादातर चीज़ें कहीं-न-कहीं मिल जाती हैं
development kit लिंक
मज़ेदार बात यह है कि development board, chip से सस्ता है
संयोग से इसी हफ़्ते C lecture में हम assembly की शुरुआत वाले भाग में पहुँचे, और मुझे लगा कि RISC-V से सीखने पर CPU differences वाली समस्या से बचा जा सकता है
लेकिन किसी ने पहले ही इस पर एकदम बढ़िया सामग्री बना दी। सच में धन्यवाद
“0 में से घटाने पर negative बनता है” वाले उदाहरण में, 0x123 का negative 0xfffffedd है
कहा गया था कि emulator 0xfffffccd दिखाता है, लेकिन वास्तव में 0xfffffedd सही है। मैंने खुद हिसाब लगाया, और emulator सही है
अगर आप एक अच्छा RISC-V emulator ढूँढ रहे हैं, तो RARS की सिफारिश करूँगा