- Web tarayıcısında çalışabilen bir emülatör üzerinden RISC-V assembly dilini adım adım öğrenmeyi sağlayan etkileşimli bir eğitim; Nick Morgan’ın Easy 6502 projesinden ilham alınarak hazırlanmış
- RV32I_Zicsr komut setindeki 45 temel komutu ve ayrıcalıklı mimarinin temel kavramlarını ele alarak, derleyici hedefi olarak yeterince tam bir komut seti öğretiyor
- Aritmetik/mantıksal işlemler, dallanma/atlama, bellek erişimi, fonksiyon çağrı kuralları, stack yönetimi gibi assembly programlamanın temellerini uygulamalı örneklerle sunuyor
- Machine modu ile User modu arasında ayrıcalık seviyesi geçişi, istisna işleme ve CSR (kontrol ve durum yazmaçları) kullanımını gerçek kodla açıklıyor
- Eğitimin nihai hedefi, sistem çağrıları ve istisna işlemeyi destekleyen çok küçük bir işletim sistemini doğrudan yazmak; böylece RISC-V düşük seviye geliştirme akışının tamamı deneyimlenebiliyor
Eğitimin yapısı ve başlıca öğrenme konuları
Temel komutlar ve işlemci kavramları
- İşlemci durumu: program sayacı (pc), 31 genel amaçlı yazmaç (x1~x31) ve özel sıfır yazmacı (x0) kavramları
- Aritmetik komutlar:
add, addi, sub ile toplama/çıkarma işlemleri ve taşma davranışının öğrenilmesi
- Bit işlemleri:
and, or, xor, sll, srl, sra gibi bit düzeyinde mantıksal işlemler ve kaydırma komutları uygulamaları
- Karşılaştırma komutları:
slt, sltu ile işaretli/işaretsiz tamsayı karşılaştırması ve koşul mantığı kurma
Kontrol akışı ve bellek
- Dallanma ve atlama:
beq, bne, blt, jal, jalr ile koşullu/koşulsuz dallanma ve fonksiyon çağrı mekanizması
- Bellek erişimi:
lw, sw, lb, lh, sb, sh komutlarıyla word/halfword/byte düzeyinde load/store işlemleri
- Memory-mapped I/O: belirli adreslere okuma/yazma yaparak dış aygıtlarla iletişim kurma yöntemi
- Konumdan bağımsız kod:
auipc komutu ve PC-göreli adresleme ile yeniden konumlandırılabilir kod yazma teknikleri
Fonksiyonlar ve çağrı kuralları
- Yazmaç takma adları:
a0~a7 (argüman), s0~s11 (korunan), t0~t6 (geçici), ra (dönüş adresi), sp (stack pointer) gibi roller
- Stack yönetimi: fonksiyon girişinde yazmaçları kaydetme, stack alanı ayırma/serbest bırakma, dönüş adresini koruma ve geri yükleme kalıpları
- Özyinelemeli fonksiyonlar: Fibonacci dizisi uygulamasıyla özyinelemeli çağrılar ve stack frame yönetimi pratiği
Ayrıcalıklı mimari ve işletim sistemi
- Ayrıcalık seviyeleri: Machine modu (seviye 3) ile User modu (seviye 0) arasındaki farklar ve yalıtım mekanizması
- CSR komutları:
csrrw, csrrs, csrrc ile kontrol yazmaçlarını okuma/yazma ve bit alanı manipülasyonu
- İstisna işleme:
mcause, mepc, mtval, mstatus CSR’leri üzerinden istisna bilgisini inceleme ve handler yazma
- Mod geçişi:
mret komutuyla User moduna girme ve geri dönme, mscratch kullanarak context switching yapma
Son proje: çok küçük bir OS
- Sistem çağrısı uygulaması:
ecall komutuyla User modundan Machine moduna trap oluşturarak putchar/exit işlevleri sağlama
- Yazmaç kaydetme/geri yükleme: tüm genel amaçlı yazmaçları stack’e yedekleyen ve geri yükleyen trap handler yapısının tamamı
- İstisna işleme mantığı:
mcause ile istisna nedenini belirleme, sistem çağrısı numarasına (a7) göre dispatch etme ve hata mesajı yazdırma
- Çalıştırılabilir kod: web emülatöründe doğrudan çalıştırılabilen eksiksiz OS çekirdeği giriş/çıkış kodu
Referanslar ve lisans
- Eğitim ve kodun tamamı CC0 public domain veya 0-clause BSD lisansı altında
- Kaynak metin ve kod deposu: https://github.com/dramforever/easyriscv
- RISC-V öğrenimi için eğitim, araştırma ve simülasyon ortamı kurulumuna uygun
Henüz yorum yok.