İçeriğe atla

Makine dili

Kontrol Edilmiş
Vikipedi, özgür ansiklopedi

Makine dili (İngilizce: machine code ya da machine language), bir işlemcinin doğrudan yürütebildiği ikilik (bit) dizilerinden oluşan en alt düzey programlama dilidir. Her bir veri birimi, işlemcinin donanımsal devrelerince çözümlenerek (decode) karşılık gelen işlemi gerçekleştirir. Makine dili mimariye özgüdür: belirli bir buyruk kümesi mimarisi için yazılmış makine dili kodu, farklı bir mimariyi kullanan işlemci üzerinde doğrudan çalışmaz.[1]

Makine dilindeki her buyruk iki ana bölümden oluşur:[2]

  1. İşlem kodu (opcode) — Yapılacak işlemi (toplama, yükleme, dallanma vb.) belirten bit alanı.
  2. İşlenenler (operands) — İşlemin üzerinde gerçekleştirileceği verileri ya da veri adreslerini belirten alanlar. Yazmaç numarası, bellek adresi veya buyruğa gömülü anlık değer (immediate) olabilir.

Örnek: RISC-V RV32I mimarisinde ADD x1, x2, x3 buyruğunun 32 bitlik makine dili gösterimi şu bit alanlarını içerir: işlem kodu (7 bit, 0110011), hedef yazmaç rd (5 bit), işlev kodu funct3 (3 bit), kaynak yazmaçlar rs1 ve rs2 (5'er bit), funct7 (7 bit).[3]

Sayısal gösterim

[değiştir | kaynağı değiştir]

Makine dili buyrukları genellikle şu biçimlerde gösterilir:

  • İkilik (binary): 00000000001100010000000010110011
  • Onaltılık (hexadecimal): 000300B3 — uzun ikilik dizileri kısaltmak için yaygın olarak kullanılır.
  • Sekizlik (octal): Tarihsel bazı sistemlerde kullanılmıştır, günümüzde nadirdir.

İnsan gözüyle okunabilirlik oldukça düşük olduğundan makine dili doğrudan yazılmaz; bunun yerine çevirici dil ya da üst düzey programlama dilleri kullanılır.

Makine dili ve çevirici dil

[değiştir | kaynağı değiştir]

Çevirici dil (assembly language), makine diline birebir karşılık gelen insan-okunur bir gösterimdir. Her çevirici dil anımsatıcısı (mnemonic) tek bir makine dili buyruğunu temsil eder. Örneğin RISC-V ADD x1, x2, x3 anımsatıcısı yukarıda gösterilen ikilik diziye karşılık gelir. Çevirici dil programları, çevirici (assembler) adı verilen bir araçla makine diline dönüştürülür.[4]

Makine dili "birinci kuşak programlama dili", çevirici dil ise "ikinci kuşak programlama dili" olarak sınıflandırılır.

Üst düzey dilden makine diline dönüşüm

[değiştir | kaynağı değiştir]

Günümüzde yazılımların büyük çoğunluğu C, C++, Rust gibi üst düzey dillerle geliştirilmektedir. Bu dillerin yürütülebilir programa dönüşme akışı şöyledir:

Üst düzey dil kaynak kodu
       ↓  Derleyici (compiler)
   Çevirici dil (assembly)
       ↓  Çevirici (assembler)
     Makine dili (nesne kodu)
       ↓  Bağlayıcı (linker)
 Yürütülebilir dosya (.exe / ELF)

Derleyici, üst düzey yapıları (döngüler, işlev çağrıları, veri tipleri) hedef buyruk kümesi mimarisine uygun makine diline çevirir; eniyileme aşamalarında buyrukları yeniden düzenleyerek ya da birleştirerek daha hızlı ya da daha küçük kod üretir.[5]

Saklanan program kavramı

[değiştir | kaynağı değiştir]

Von Neumann mimarisine dayanan modern bilgisayarlarda hem buyruklar hem veriler aynı bellekte ikili biçimde depolanır. İşlemci, program sayacının (program counter, PC) gösterdiği adresten buyruğu okur (fetch), çözer (decode) ve yürütür (execute). Bu saklanan program (stored program) modeli, programların tıpkı veri gibi bellekte değiştirilebilmesine ve yüklenmesine olanak tanır.[6]

Taşınabilirlik

[değiştir | kaynağı değiştir]

Makine dili doğrudan buyruk kümesi mimarisine özgü olduğundan taşınabilir değildir. x86 için derlenen bir program, ARM ya da RISC-V tabanlı bir işlemcide doğrudan çalışmaz; aynı kaynak kodun hedef mimari için yeniden derlenmesi gerekir. Bu taşınabilirlik sorunu, üst düzey dillerin ve derleyicilerin yaygınlaşmasındaki temel etkenlerden biridir.

İlgili maddeler

[değiştir | kaynağı değiştir]
  1. Tanenbaum, Andrew S. (2013). Structured Computer Organization (6 bas.). Pearson. s. 3–7. ISBN 978-0-13-291652-3.
  2. Patterson, David A.; Hennessy, John L. (2017). Computer Organization and Design: The Hardware/Software Interface (5 bas.). Morgan Kaufmann. s. 78–82. ISBN 978-0-12-407726-3.
  3. Patterson, David A.; Hennessy, John L. (2017). Computer Organization and Design: The Hardware/Software Interface (5 bas.). Morgan Kaufmann. s. 78–82. ISBN 978-0-12-407726-3.
  4. Tanenbaum, Andrew S. (2013). Structured Computer Organization (6 bas.). Pearson. s. 8–12. ISBN 978-0-13-291652-3.
  5. Patterson, David A.; Hennessy, John L. (2017). Computer Organization and Design: The Hardware/Software Interface (5 bas.). Morgan Kaufmann. s. 5–10. ISBN 978-0-12-407726-3.
  6. Tanenbaum, Andrew S. (2013). Structured Computer Organization (6 bas.). Pearson. s. 3–7. ISBN 978-0-13-291652-3.