23 poin oleh GN⁺ 2025-10-28 | 2 komentar | Bagikan ke WhatsApp
  • Tutorial interaktif untuk mempelajari assembly RISC-V langkah demi langkah melalui emulator yang dapat dijalankan di browser web, dibuat dengan inspirasi dari Easy 6502 karya Nick Morgan
  • Mencakup 45 instruksi dasar dari set instruksi RV32I_Zicsr serta konsep inti dari arsitektur privileged, mengajarkan set instruksi yang cukup lengkap untuk menjadi target compiler
  • Menyediakan dasar-dasar pemrograman assembly seperti operasi aritmetika/logika, percabangan/lompatan, akses memori, konvensi pemanggilan fungsi, dan pengelolaan stack beserta contoh praktik
  • Menjelaskan dengan kode nyata cara melakukan peralihan level privileged antara mode Machine dan mode User, penanganan exception, serta manipulasi CSR (control and status register)
  • Tujuan akhir tutorial ini adalah menulis sendiri sistem operasi sangat kecil yang mendukung system call dan penanganan exception, sehingga pembaca dapat mengalami alur lengkap pengembangan low-level RISC-V

Susunan tutorial dan poin pembelajaran utama

Instruksi dasar dan konsep prosesor

  • Status prosesor: memahami program counter (pc), 31 register serbaguna (x1~x31), dan register nol khusus (x0)
  • Instruksi aritmetika: mempelajari operasi penjumlahan/pengurangan dan perilaku overflow melalui add, addi, sub, dan lainnya
  • Operasi bit: praktik operasi logika tingkat bit dan instruksi shift seperti and, or, xor, sll, srl, sra
  • Instruksi perbandingan: menggunakan slt, sltu, dan lainnya untuk membangun logika perbandingan integer bertanda/tanpa tanda serta evaluasi kondisi

Alur kontrol dan memori

  • Branch dan jump: mekanisme percabangan bersyarat/tanpa syarat dan pemanggilan fungsi menggunakan beq, bne, blt, jal, jalr, dan lainnya
  • Akses memori: operasi load/store tingkat word/halfword/byte melalui instruksi lw, sw, lb, lh, sb, sh
  • Memory-mapped I/O: memahami cara berkomunikasi dengan perangkat eksternal melalui baca/tulis ke alamat tertentu
  • Kode independen lokasi: teknik menulis kode yang dapat direlokasi menggunakan instruksi auipc dan pengalamatan relatif terhadap PC

Fungsi dan konvensi pemanggilan

  • Alias register: peran a0~a7 (argumen), s0~s11 (disimpan), t0~t6 (sementara), ra (alamat kembali), sp (stack pointer), dan lainnya
  • Pengelolaan stack: pola penyimpanan register saat masuk fungsi, alokasi/dealokasi ruang stack, serta penyimpanan dan pemulihan alamat kembali
  • Fungsi rekursif: praktik panggilan rekursif dan pengelolaan stack frame melalui implementasi deret Fibonacci
Iklan

Arsitektur privileged dan sistem operasi

  • Level privileged: perbedaan antara mode Machine (level 3) dan mode User (level 0) serta mekanisme isolasinya
  • Instruksi CSR: membaca/menulis register kontrol serta memanipulasi bit field dengan csrrw, csrrs, csrrc, dan lainnya
  • Penanganan exception: memeriksa informasi exception dan menulis handler menggunakan CSR mcause, mepc, mtval, mstatus
  • Peralihan mode: masuk dan kembali dari mode User dengan instruksi mret, serta context switching menggunakan mscratch

Proyek akhir: OS sangat kecil

  • Implementasi system call: melakukan trap dari mode User ke mode Machine dengan instruksi ecall untuk menyediakan fungsi putchar/exit
  • Simpan/pulihkan register: struktur lengkap trap handler yang mencadangkan dan memulihkan semua register serbaguna ke/dari stack
  • Logika penanganan exception: membedakan penyebab exception dengan mcause, melakukan dispatch berdasarkan nomor system call (a7), serta mencetak pesan error
  • Kode yang dapat dijalankan: menyediakan kode lengkap untuk masuk/keluar kernel OS yang dapat langsung dijalankan di emulator web

Referensi dan lisensi

  • Tutorial dan kodenya sama-sama berada di bawah CC0 public domain atau lisensi BSD 0-clause
  • Naskah asli dan repositori kode: https://github.com/dramforever/easyriscv
  • Cocok untuk pembelajaran RISC-V, pendidikan, penelitian, dan pembangunan lingkungan simulasi

2 komentar

 
lsdcnu 2025-11-06

Wow
Saya jadi tertarik pada assembly RISC-V yang dipelajari di kelas jurusan saya.. bahkan ketika ingin membeli buku secara terpisah, yang terlihat hanya arsitektur ARM dan tidak ada RISC-V, jadi saya sempat bingung harus melihat apa, tetapi sepertinya saya menemukan sumber yang sangat bagus untuk belajar
Terima kasih!!!

 
GN⁺ 2025-10-28
Komentar Hacker News
  • Panduannya benar-benar bagus
    Akan lebih baik kalau layar emulator pertama “My first RISC-V assembly program” diletakkan di bagian paling awal panduan. Kalau tidak, pembaca bisa salah paham dan mengira ini hanya pengantar berbasis teks meskipun judulnya menyebut ‘interactive’
    Saya berencana meluangkan beberapa hari lagi untuk ini. Saya cukup tertarik pada RISC-V dan merasa ia punya masa depan yang cerah
    Kalau ada ahli AI yang membaca ini, akan sangat keren kalau seseorang membuat ulang Core War dalam assembly RISC-V lewat platform seperti Replit atau Lovable

    • Kenapa tidak langsung pakai otak saja?
  • Saya belajar assembly dari Computer Organization And Design karya Patterson dan Hennessy, dan terasa sekali betapa banyak yang diambil RISC-V dari MIPS
    Kedua ISA itu melibatkan orang-orang yang sama, dan mereka menghindari kesalahan seperti delay slot di MIPS. Kalau punya pengalaman dengan MIPS, assembly RISC-V rasanya hampir sama
    Belakangan saya juga sedang melihat AArch64, dan meskipun tidak serapi RISC-V, desain praktisnya cukup mengesankan. Malah kadang saya merasa RISC-V mungkin dirancang terlalu konservatif

    • Mungkin RISC-V lebih dekat ke RISC-1. Ada tulisan yang dijelaskan langsung oleh Patterson: How close is RISC-V to RISC-I, RISC on a Chip
    • Saya juga merasakan kemiripan antara RISC-V dan MIPS. Saat mengerjakan homebrew Nintendo 64, saya sering berpikir, “ini hampir sama persis dengan yang dulu saya utak-atik di Ares+Godbolt, cuma tanpa delay slot”
    • Banyak orang tidak menyadari betapa tidak jelasnya dari mana desain AArch64 berasal, dan filosofi seperti apa yang melatarbelakanginya
    • Instruksi mudah ditambahkan, tetapi sulit dihapus. RISC-V dimulai dengan set instruksi minimal terlebih dahulu, lalu diperluas secara bertahap. Jika ingin mengusulkan instruksi baru, kita harus membuktikan biaya dan manfaat nyatanya
    • Seingat saya Computer Architecture: A Quantitative Approach juga membahas kemiripan RISC-V dan MIPS. Bukunya sedang ada di dalam kotak sekarang, jadi saya tidak tahu halaman pastinya
  • Saya pernah menulis sendiri TCP Socket in RISC-V Assembly
    Saya memakai ISA RV64I, dan perlu memahami konsep linker relaxation. Saya juga menyertakan bahan referensi

  • Sepertinya ada kesalahan di bagian Position Independence
    Saya penasaran apakah agar menghasilkan 0x3004, kode contohnya seharusnya memakai lui alih-alih auipc

    • Tidak. lui membuat alamat absolut, sedangkan kombinasi auipc/addi membuat alamat independen posisi. Kalau auipc berada di alamat 0 hasilnya memang sama, tetapi dalam praktiknya nilainya ditambahkan ke alamat instruksi saat ini
  • Susunan interaktif dari konten ini benar-benar luar biasa
    Sebagai pengembang C/C++, saya selalu merasa assembly itu sulit, tetapi dengan pendekatan seperti ini semuanya jadi jauh lebih jelas

    • Assembly RISC-V pada umumnya mudah, tetapi singkatan instruksinya terlalu banyak dan agak merepotkan. Mestinya bisa saja memakai nama yang lebih intuitif seperti load4 alih-alih lw, atau jump alih-alih j; ini bukan zaman kartu plong lagi, jadi saya tidak paham kenapa semuanya harus sependek ini
  • Tulisan ini membuat saya ingin kembali mencoba pemrograman level rendah
    Saat kuliah mekatronika saya pernah menangani mikrokontroler dengan C dan assembly, tetapi sekarang saya sudah berpindah ke pengembangan web
    Saya penasaran apakah ada referensi tepercaya untuk mempelajari perangkat keras RISC-V. Kalau bisa saya ingin mencobanya dengan Rust

    • Bukan untuk menangani perangkat keras langsung dengan Rust, tetapi ada tutorial bagus tentang dasar-dasar OS: Operating System in 1000 Lines
      Dulu juga ada tutorial OS berbasis Rust, tetapi saya tidak bisa menemukan tautannya sekarang
      Kalau ingin perangkat keras sungguhan, saya merekomendasikan neorv32 — dokumentasinya bagus: dokumentasi resmi, repositori GitHub. Ini adalah core RISC-V yang ditulis dalam VHDL
  • Perangkat keras RISC-V mudah didapat
    Lihat RISC-V on Raspberry Pi Pico 2

    • Saya juga menantikan VisionFive 2 Lite yang kabarnya akan segera dirilis. Dari sisi driver atau performa memang agak kurang, tetapi sepertinya cukup oke untuk pengembangan OS
      Lihat halaman Kickstarter
      Kalau ingin sekaligus bermain dengan RISC-V dan FPGA, ada juga PolarFireSoC. Jauh lebih murah dan cukup layak dipakai dibanding AMD/Xilinx. Lingkungan pengembangannya memang agak jadul tapi cepat, dokumentasinya tersebar di mana-mana, tetapi sebagian besar tetap bisa ditemukan
      tautan kit pengembangan
      Yang lucu, papan pengembangnya lebih murah daripada chip-nya sendiri
    • Mungkin lebih mudah mulai dari ESP-32. Ketersediaannya jauh lebih luas
  • Kebetulan minggu ini di kelas C saya baru masuk ke bab pengantar assembly, dan saya sempat berpikir bahwa belajar dengan RISC-V bisa menghindari masalah perbedaan CPU
    Ternyata seseorang sudah lebih dulu merapikannya dengan sempurna dalam bentuk materi seperti ini. Terima kasih banyak

  • Pada contoh “jika dikurangkan dari 0 hasilnya menjadi negatif”, nilai negatif dari 0x123 adalah 0xfffffedd
    Dikatakan emulator menampilkan 0xfffffccd, tetapi sebenarnya 0xfffffedd yang benar. Saya hitung sendiri, dan emulatornya memang akurat

  • Jika mencari emulator RISC-V yang bagus, saya merekomendasikan RARS