Article 1: Introduction to RISC-V – Why Learn It
- What is RISC-V and why it is an open Instruction Set Architecture (ISA)
- Modular design (RV32I base, RV64I, and extensions)
- Advantages over x86 and ARM for learning and real projects
- Real-world uses: embedded systems, AI chips, open-source hardware
- Who this series is for (absolute beginners with no assembly experience)
- Overview of the complete learning path
Article 2: Setting Up Your RISC-V Development Environment
- Installing the RISC-V GNU Toolchain
- Using QEMU to emulate RISC-V hardware
- Best beginner tool: RARS simulator (visual registers and memory)
- Online simulators and Easy RISC-V interactive tool
- Essential commands: assemble, link, run, and disassemble with objdump
- Quick warm-up: Compile and run your first C Hello World on RISC-V
Article 3: Your First RISC-V Assembly Program
- Basic structure of a RISC-V assembly file (.text, .data, labels)
- Writing the simplest program that exits cleanly
- Understanding the _start entry point
- How to assemble and run the program
- Common beginner mistakes and how to debug them
Article 4: RISC-V Registers and Basic Data Movement
- Register names and conventions (x0–x31, a0–a7, t0–t6, s0–s11, sp, ra, zero)
- Caller-saved vs callee-saved registers
- Loading immediate values using li, lui, and addi
- Moving data between registers
Article 5: Arithmetic and Logical Instructions
- Basic arithmetic: add, sub, mul, div (including M extension)
- Logical operations: and, or, xor, not
- Pseudoinstructions vs real machine instructions
- Practical examples and bit manipulation
Article 6: Memory Access – Load and Store Instructions
- Load/Store architecture explained
- Key instructions: lw, sw, lb, sb, etc.
- Addressing modes with immediate offsets
- Introduction to the stack and the sp register
- Defining data in memory (.word, .byte, .ascii)
Article 7: Control Flow – Branches and Comparisons
- Conditional branches: beq, bne, blt, bge, etc.
- Set-on-less-than instructions (slt)
- Writing loops in assembly
- Unconditional jumps (j, jal)
Article 8: Functions and the Stack
- RISC-V calling conventions (arguments and return values)
- Using jal / jalr and the return address register ra
- Creating and cleaning up stack frames
- Saving and restoring registers
- Leaf functions vs non-leaf functions
Article 9: System Calls and Console Output
- Using ecall for system calls
- Printing strings and numbers to the console
- Reading input from user
- Proper program exit
- Complete Hello World program written entirely in assembly
Article 10: Putting It All Together – Small Projects
- Building small complete programs (calculator, string processor, simple game loop)
- Debugging techniques with objdump and simulator single-step
- Mixing C code with assembly