23 poin oleh GN⁺ 2025-10-28 | Belum ada 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

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

Belum ada komentar.

Belum ada komentar.