23 puan yazan GN⁺ 2025-10-28 | Henüz yorum yok. | WhatsApp'ta paylaş
  • 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.

Henüz yorum yok.