Komutlar Nasıl Çalışır
Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 4 / 45.
CPU'nun komutları birer birer yürüttüğünü biliyorsunuz. Peki CPU bir sonraki adımda hangi komutu çalıştıracağını nasıl biliyor? Komutlar nerede saklanıyor? Ve bir komut aslında neye benziyor?
Talimatlar sayılardır.
Bu, bilgisayarlar hakkında temel bir gerçektir. Her şey bir sayıdır. Üzerinde çalıştığınız veriler (42 sayısı gibi) bir sayıdır. Verilerin bulunduğu adres (1000 gibi) bir sayıdır. Ve talimatların kendileri de (mov, add, cmp gibi) sayılardır.
mov rax, 5 gibi bir assembly kodu yazdığınızda, assembler bu insan tarafından okunabilir metni CPU'nun anladığı bir sayıya dönüştürür. Bu sayıya bir komut kodu denir.
Komutlar nerede saklanır?
Komutlar, tıpkı veriler gibi bellekte saklanır. Komutlar için özel bir yer yoktur. Bellek her ikisini de tutar:
- Veri (sayılar, karakterler, diziler)
- Komutlar (programın kendisi)
CPU aradaki farkı bilmez. Sadece Program Counter tarafından işaret edilen bellek adresinde ne varsa onu okur. Lesson 0.1'de PC hakkında kısaca bilgi edinmiştiniz. Şimdi tam olarak nasıl çalıştığını anlama zamanı.
Program Sayacı (Komut İşaretçisi olarak da adlandırılır), CPU içindeki özel bir yazmaçtır. Tek görevi, yürütülecek bir sonraki komutun bellek adresini tutmaktır.
Getir-Yürüt Döngüsü:
CPU bu üç adımı sonsuza kadar tekrarlar:
| Adım | Ne olur |
|---|---|
| 1. GETİR | PC'deki adreste bulunan komutu oku |
| 2. YÜRÜT | O komutu gerçekleştir |
| 3. İLERLET | PC'yi bir sonraki komuta taşı |
Basit örnek:
Eğer PC = 1000 ise, CPU:
- 1000 adresindeki komutu getirir
- Onu yürütür
- PC'yi bir sonraki adrese taşır (1000 + komut boyutu)
Sonra yeni PC değeri ile tekrarlanır.
Bir komutun yapısı:
Her komutun iki bölümü vardır:
| Bölüm | Ne yapar | Örnek |
|---|---|---|
| Opcode | Ne YAPILACAĞI | mov, add, cmp |
| Operandlar | Neye YAPILACAĞI | rax, 5, [result] |
Bazı komutların bir işleneni vardır (1 eklemek için inc rax gibi). Bazılarının iki tanedir (mov rax, 5 gibi). Bazılarının ise üç tanedir (bazı mimarilerde add rax, rbx, rcx gibi).
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.