## Assembly Dili Hakkında
Assembly dili, [makine diline](https://www.nedemek.page/kavramlar/makine%20dili) en yakın programlama dilidir. Her bir assembly komutu, işlemcinin doğrudan çalıştırabileceği bir makine kodu talimatına karşılık gelir. Bu nedenle, assembly dili, donanımı doğrudan kontrol etmeyi ve yüksek performanslı kod yazmayı sağlar.
**Temel Kavramlar:**
* **[Opcode](https://www.nedemek.page/kavramlar/opcode):** Bir işlemin (toplama, çıkarma, veri taşıma vb.) kodunu temsil eder.
* **[Operand](https://www.nedemek.page/kavramlar/operand):** Opcode'un üzerinde işlem yapacağı veriyi veya verinin adresini belirtir. Bu veriler [register](https://www.nedemek.page/kavramlar/register) adresleri veya sabit değerler olabilir.
* **[Register](https://www.nedemek.page/kavramlar/register):** İşlemci içinde yer alan, verileri geçici olarak saklamak için kullanılan hızlı erişimli hafıza bölgeleridir. Örneğin, `AX`, `BX`, `CX`, `DX` gibi genel amaçlı register'lar ve `SP` (stack pointer), `BP` (base pointer) gibi özel amaçlı register'lar bulunur.
* **[Adresleme Modları](https://www.nedemek.page/kavramlar/adresleme%20modlar%C4%B1):** Operand'ın nasıl yorumlanacağını ve veriye nasıl erişileceğini belirler. Doğrudan adresleme, dolaylı adresleme, register adresleme gibi farklı adresleme modları mevcuttur.
* **[Yığın (Stack)](https://www.nedemek.page/kavramlar/y%C4%B1%C4%9F%C4%B1n):** Verilerin son giren ilk çıkar (LIFO) prensibiyle saklandığı bir hafıza bölgesidir. Fonksiyon çağrıları ve yerel değişkenlerin saklanması gibi işlemlerde kullanılır.
**Assembly Dilinin Kullanım Alanları:**
* **[Gömülü Sistemler](https://www.nedemek.page/kavramlar/g%C3%B6m%C3%BCl%C3%BC%20sistemler):** Donanımı doğrudan kontrol etme ihtiyacı duyulan cihazlarda (örneğin, mikrokontrolcüler).
* **[Cihaz Sürücüleri](https://www.nedemek.page/kavramlar/cihaz%20s%C3%BCr%C3%BCc%C3%BCleri):** İşletim sistemi ile donanım arasındaki iletişimi sağlayan yazılımlarda.
* **[Tersine Mühendislik](https://www.nedemek.page/kavramlar/tersine%20m%C3%BChendislik):** Çalışma prensibini anlamak için bir yazılımın assembly kodunu analiz etme.
* **[Optimizasyon](https://www.nedemek.page/kavramlar/optimizasyon):** Kritik kod bölümlerini daha hızlı ve verimli hale getirmek için.
* **[Virüs ve Zararlı Yazılım Analizi](https://www.nedemek.page/kavramlar/vir%C3%BCs%20analizi):** Zararlı yazılımların davranışlarını ve işlevlerini anlamak için.
**Avantajları:**
* Donanım üzerinde tam kontrol.
* Yüksek performans ve optimizasyon imkanı.
* Makine diline yakınlık sayesinde sistem kaynaklarını verimli kullanma.
**Dezavantajları:**
* Öğrenmesi ve yazması zordur.
* Platform bağımlılığı yüksektir.
* Kod yazımı uzun ve karmaşıktır.