Assembly & Registers
Assembly dilinde register'lar, işlemcinin (CPU) içindeki yüksek hızlı bellek alanlarıdır. Eğer işlemciyi masa başında çalışan asgari ücretli bir memur olarak düşünürsek, bu masanın her bir çekmecesi bir register olur. İşlemci, verileri masasına koyar, üzerinde işlemler yapar ve sonuçları çekmecelerde saklar. Tabi işlemler sırasında RAM belleğe de ihtiyaç duyar çoğunlukla. RAM belleği, masanın yanında duran evrak dolabına benzetebiliriz. Elbette bu dolap da memura çok yakındır ama ulaşmak için sandalyesinden kalkması gerekir. Bu yüzden Register'lar, RAM belleğine kıyasla çok daha hızlıdır, çünkü doğrudan işlemcinin içinde (masasında) yer alırlar.
Register'ların Temel İşlevleri: Memurun Çalışma Şekli
- Veri Depolama (Evraklar): Memur, üzerinde çalışacağı evrakları (verileri) masasının çekmecelerinde (register'larda) saklar.
- Adresleme (Evrak Dosyalama Sistemi): Memur, hangi evrağın hangi çekmecede olduğunu bilir (adresleme). Bu sayede evraklara hızlıca ulaşabilir.
- Program Kontrolü (İşlem Sırası): Memur, hangi işi yapacağını ve hangi sırayla yapacağını bilir (program kontrolü). Bu, masadaki evrakların düzenine ve önceliklerine göre belirlenir.
x86-64 Mimarisi ve Register Seti: Memurun Araçları
x86-64 mimarisindeki register'lar, memurun kullandığı araçlara benzetilebilir. Her register, belirli bir görevi yerine getiren bir araçtır.
Genel Amaçlı Register'lar: Çok Amaçlı Araçlar
Genel amaçlı register'lar, farklı türde verileri saklamak ve çeşitli işlemleri gerçekleştirmek için kullanılabilir. Bunlar, memurun kullandığı "çok amaçlı araçlar" gibidir. Örneğin, bir hesap makinesi hem toplama hem de çıkarma işlemi yapabilir.
Aşağıdaki tablo, bu register'ların bazı yaygın kullanım alanlarını göstermektedir:
Register | Açıklama | Memurun Kullanım Alanları |
---|---|---|
RAX |
Accumulator Register | Hesaplamalar, sonuçları saklama |
RBX |
Base Register | Evrakların yerini işaretleme, veri saklama |
RCX |
Counter Register | Tekrarlayan işlemleri sayma, evrakları sınıflandırma |
RDX |
Data Register | Giriş/Çıkış işlemleri, karmaşık hesaplamalar |
RSI |
Source Index Register | Evrakları kopyalama, kaynak evrakın yerini tutma |
RDI |
Destination Index Register | Evrakları kopyalama, hedef evrakın yerini tutma |
RBP |
Base Pointer | Yığın çerçevesinin (stack frame) taban adresini tutar (Memurun dosyalama sistemindeki ana klasör gibi) |
RSP |
Stack Pointer | Yığının (stack) en üst noktasının adresini tutar (Memurun masasına yığdığı evraklar gibi) |
Özel Amaçlı Register'lar: Uzmanlık Araçları
Özel amaçlı register'lar, belirli görevler için tasarlanmıştır. Bunlar, memurun kullandığı "uzmanlık araçları" gibidir. Örneğin, bir zımba sadece evrakları zımbalamak için kullanılır.
- Instruction Pointer (RIP): Bir sonraki komutun adresini tutar. Bu, memurun "yapılacaklar listesi" gibidir, yapacağı bir sonraki işi buradan öğrenir.
- Stack Pointer (RSP): Yığının (stack) en üst noktasının adresini tutar. Bu, memurun masasına yığdığı "bekleyen evraklar" gibi düşünülebilir.
- Base Pointer (RBP): Yığın çerçevesinin (stack frame) taban adresini tutar. Bu, memurun dosyalama sistemindeki "ana klasör" gibi düşünülebilir.
- Flags Register (RFLAGS): İşlemlerin sonuçlarını gösteren bayrakları tutar. Bu, memurun "kontrol paneli" gibidir. Her bayrak, bir işlemin sonucu hakkında bilgi verir.
Register Kullanımına İlişkin Örnek: Evrak İşleme
Aşağıdaki örnek, iki sayının toplanması ve sonucun bir register'da saklanması işlemini göstermektedir. Bunu, memurun iki evrakı birleştirip yeni bir evrak oluşturması gibi düşünebiliriz. Yada bir evraktaki bilgilere göre yeni bir evrak oluşturması yada çekmecedeki diğer bir evrakı bununla güncellemesi.
; Verileri register'lara yükle (Evrakları masaya al)
MOV RAX, 0x14 ; RAX register'ına 20 (0x14) değerini yükle (1. Evrak)
MOV RBX, 0x0A ; RBX register'ına 10 (0x0A) değerini yükle (2. Evrak)
; Toplama işlemini gerçekleştir (Evrakları birleştir)
ADD RAX, RBX ; RAX = RAX + RBX (RAX artık 30 (0x1E) değerini içeriyor) (Yeni Evrak)
; Sonuç RAX register'ında saklanır (Yeni evrakı dosyala)
Register Yönetimi ve Dikkat Edilmesi Gerekenler: İyi Bir Memur Olmak
Register'ları etkili bir şekilde kullanmak, iyi bir "memur" olmaya benzer. İşte dikkat edilmesi gereken bazı noktalar:
- Register Tahsisi (Araç Seçimi): Her iş için doğru aracı (register'ı) seçmek önemlidir.
- Veri Boyutları (Evrak Boyutu): Kullanılan evrakların (verilerin) boyutlarına dikkat etmek gerekir.
- Çağrı Kuralları (İşbirliği): Farklı memurların (fonksiyonların) birlikte çalışabilmesi için belirli kurallara uyması gerekir.
Register'lar, assembly dili programlamanın temel yapı taşlarıdır. Onları anlamak ve etkili bir şekilde kullanmak, yüksek performanslı ve güvenilir programlar yazmanın anahtarıdır. Pratik yapmak her zaman en iyi öğrenme yöntemidir! İyi bir memur gibi, masanı düzenli tut ve doğru araçları (register) kullan!
Hiç yorum yok:
Yorum Gönder