Yazmaçlar vs Bellek
Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 3 / 45.
Artık bir bilgisayarın içinde verilerin bulunabileceği iki yeri öğrendin:
- Yazmaçlar: CPU’nun içindeki küçük depolama kutuları
- Bellek (RAM): CPU’nun dışındaki numaralandırılmış yuvalardan oluşan dev bir ızgara
Ama neden iki yer var? CPU neden doğrudan bellekle çalışamıyor?
Cevap hızdır. Register'lar CPU'nun içinde oldukları için son derece hızlıdır. Bellek dışarıda olduğu için daha yavaştır. CPU bir register'a tek bir döngüde erişebilir, ancak belleğe erişmek çok daha uzun sürer.
Yan yana karşılaştırma:
| Özellik | Yazmaçlar | Bellek (RAM) |
|---|---|---|
| Konum | CPU'nun içinde | CPU'nun dışında |
| Hız | Son derece hızlı (1 döngü) | Daha yavaş (birçok döngü) |
| Depolama yuvası sayısı | Çok az (x86-64'te 16-32) | Milyonlarca veya milyarlarca |
| Her yuvanın boyutu | 8 bayt (64 bit) | 1 bayt |
| Bunlara nasıl erişilir | Adla (rax, rbx, rcx...) | Adresle (1000, msg, buffer) |
| Geçici mi? | Evet (güç kapatıldığında kaybolur) | Evet (güç kapatıldığında kaybolur) |
Assembly'deki en önemli kural:
CPU, bellekteki verilerle doğrudan çalışamaz. Veriler önce yazmaçlara yüklenmelidir.
Bu isteğe bağlı değildir. CPU bu şekilde tasarlanmıştır. Her toplama, her karşılaştırma, her veri taşıma işlemi bir yazmaçtan geçmelidir.
Sürekli kullanacağınız üç adımlı kalıp:
| Adım | Ne olur | Örnek |
|---|---|---|
| 1. LOAD | Verileri bellekten bir yazmaç içine kopyala | mov rax, [count] |
| 2. WORK | Yazmaçla bir işlem yap | add rax, 5 |
| 3. STORE | Sonucu (gerekirse) belleğe geri kopyala | mov [result], rax |
Bu kuralı unutursanız ne olur?
Her ikisi de bellekte bulunan iki sayıyı toplamaya çalışırsanız, assembler size bir hata verir. CPU bunu yapamaz. Önce onları yazmaçlara yüklemelisiniz.
Kendin dene
Bu ders bir kod alıştırması içermiyor.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temel Bilgiler bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground