23 पॉइंट द्वारा GN⁺ 2025-10-28 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • वेब ब्राउज़र में चलने वाले 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, mstatus CSR के जरिए 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 टिप्पणियां

 
lsdcnu 2025-11-06

वाह
मेरी major क्लास में पढ़ाए जाने वाले RISC-V assembly में दिलचस्पी हो गई थी.. इसलिए अलग से कोई किताब खरीदकर पढ़ने की सोच रहा था, लेकिन हर जगह सिर्फ ARM architecture ही दिख रहा था और RISC-V नहीं, तो समझ नहीं आ रहा था कि क्या पढ़ूँ। ऐसे में लगता है कि पढ़ाई के लिए मुझे एक बहुत अच्छा resource मिल गया है
धन्यवाद!!!

 
GN⁺ 2025-10-28
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 को ज़रूरत से ज़्यादा रूढ़िवादी ढंग से डिज़ाइन किया गया है

    • शायद RISC-V, RISC-1 के ज़्यादा क़रीब है। Patterson का इस पर एक लेख है: How close is RISC-V to RISC-I, RISC on a Chip
    • मुझे भी RISC-V और MIPS की समानता महसूस हुई। Nintendo 64 homebrew development करते समय मैं अक्सर सोचता था, “यह तो लगभग वही है जिसे मैं पहले Ares+Godbolt में छेड़ता था, बस delay slot नहीं है”
    • लोग अक्सर यह नहीं समझते कि AArch64 का design कहाँ से आया, और इसे किस दर्शन के आधार पर बनाया गया, इसमें काफ़ी अस्पष्टता है
    • निर्देश जोड़ना आसान होता है, लेकिन हटाना मुश्किल। RISC-V ने शुरुआत में न्यूनतम instruction set से शुरू किया था, और अब इसे धीरे-धीरे बढ़ाया जा रहा है। अगर आप कोई नया निर्देश प्रस्तावित करना चाहते हैं, तो आपको उसकी लागत और वास्तविक लाभ साबित करने होंगे
    • मुझे याद है कि Computer Architecture: A Quantitative Approach में भी RISC-V और MIPS की समानता पर कुछ था। किताब अभी डिब्बे में रखी है, इसलिए सही पेज नहीं बता सकता
  • मैंने खुद TCP Socket in RISC-V Assembly लिखा है
    इसमें RV64I ISA का उपयोग किया गया, और linker relaxation की अवधारणा समझनी पड़ती है। मैंने संदर्भ सामग्री भी साथ जोड़ दी है

  • लगता है Position Independence सेक्शन में कोई गलती है
    क्या उदाहरण कोड में auipc की जगह lui इस्तेमाल करने पर ही 0x3004 नहीं आना चाहिए?

    • नहीं। lui absolute address बनाता है, जबकि auipc/addi संयोजन position-independent address बनाता है। अगर auipc address 0 पर हो तो परिणाम वही होगा, लेकिन वास्तव में उसमें current instruction address जुड़ता है
  • इस सामग्री की interactive संरचना सचमुच शानदार है
    C/C++ developer होने के नाते मुझे assembly हमेशा कठिन लगती थी, लेकिन इस तरीके से यह बहुत अधिक स्पष्ट हो गई

    • RISC-V assembly आम तौर पर आसान है, लेकिन instruction shorthand बहुत ज़्यादा हैं, जो असुविधाजनक लगते हैं। lw की जगह load4, j की जगह jump जैसे ज़्यादा सहज नाम इस्तेमाल किए जा सकते थे; punch card का ज़माना तो नहीं है, फिर सब कुछ इतना छोटा क्यों लिखा जाता है, समझ नहीं आता
  • यह पढ़कर मेरा फिर से low-level programming करने का मन हो गया
    कॉलेज में mechatronics पढ़ते समय मैंने C और assembly से microcontroller पर काम किया था, लेकिन अब मैं web development में आ गया हूँ
    क्या RISC-V hardware सीखने के लिए कोई विश्वसनीय सामग्री है? अगर संभव हो तो मैं इसे Rust के साथ करना चाहूँगा

    • सीधे Rust से hardware नहीं संभालते, लेकिन OS की बुनियाद समझाने वाला एक अच्छा ट्यूटोरियल है: Operating System in 1000 Lines
      और Rust-आधारित OS tutorial भी था, लेकिन अभी उसका लिंक नहीं मिल रहा
      अगर आपको असली hardware चाहिए, तो neorv32 की सिफारिश करूँगा — इसका documentation अच्छा है: आधिकारिक दस्तावेज़, GitHub repository. यह VHDL में लिखा गया RISC-V core है
  • RISC-V hardware आसानी से मिल सकता है
    RISC-V on Raspberry Pi Pico 2 देखें

    • VisionFive 2 Lite भी जल्द आने वाला है, इसलिए उसका इंतज़ार है। drivers या performance के मामले में यह थोड़ा कमज़ोर हो सकता है, लेकिन OS development के लिए ठीक लग रहा है
      Kickstarter पेज देखें
      और अगर आप RISC-V और FPGA दोनों के साथ काम करना चाहते हैं, तो PolarFireSoC भी है। यह AMD/Xilinx की तुलना में काफ़ी सस्ता है और उपयोगी भी। development environment थोड़ा पुराना लेकिन तेज़ है, documentation बिखरा हुआ है, लेकिन ज़्यादातर चीज़ें कहीं-न-कहीं मिल जाती हैं
      development kit लिंक
      मज़ेदार बात यह है कि development board, chip से सस्ता है
    • शायद ESP-32 से शुरू करना और आसान हो सकता है। यह कहीं ज़्यादा आसानी से उपलब्ध है
  • संयोग से इसी हफ़्ते C lecture में हम assembly की शुरुआत वाले भाग में पहुँचे, और मुझे लगा कि RISC-V से सीखने पर CPU differences वाली समस्या से बचा जा सकता है
    लेकिन किसी ने पहले ही इस पर एकदम बढ़िया सामग्री बना दी। सच में धन्यवाद

  • “0 में से घटाने पर negative बनता है” वाले उदाहरण में, 0x123 का negative 0xfffffedd है
    कहा गया था कि emulator 0xfffffccd दिखाता है, लेकिन वास्तव में 0xfffffedd सही है। मैंने खुद हिसाब लगाया, और emulator सही है

  • अगर आप एक अच्छा RISC-V emulator ढूँढ रहे हैं, तो RARS की सिफारिश करूँगा