Gelişen teknoloji ile günümüzde bilgisayar ve yazılım hemen hemen hayatımızın her yerinde karşımıza çıkıyor. İlerleyen zamanlarda çok daha büyük bir öneme sahip olacağı ise kaçınılmaz bir gerçek. Masaüstü yazılımlarından yapay zekaya, internet sitesi programlamaktan gömülü sistem programlamaya kadar pek çok alanda yazılım dilleri kullanılıyor. Peki bilgisayarlar bu yazılım programlarını nasıl algılıyor? Bu sorunun cevabı makine kodu. Gelin bu konuya daha yakından bakalım.
Giriş
İlk bilgisayar olan ENIAC, bir oda büyüklüğündeydi ve bünyelerinde vakum tüpleri kullanılıyordu. Sistemin çalışması için gerekli olan bağlantılar kablolar ile sağlanıyor ve her işlem değişiminde bu kabloların yerlerinde oynama yapılması gerekiyordu. Ancak elektronik dünyasında devrim niteliği taşıyan transistorun icadı ile bilgisayarlar yavaş yavaş günümüz haline kadar gelişti. Şuan ki bilgisayarlar, bünyelerinde milyarlarca transistor içeren birer yapı halini aldı.

ISA
Bilgisayar, yapılarında bulunan transistorun açık ve kapalı olma durumlarına göre ‘1’ ve ‘0’ ifadeleriyle iş yapan bir mekanizma. Kısacası tek anlayabildiği şey 1’ler ve 0’lar. Peki o zaman bilgisayarlar bizim yapmak istediğimiz komutları nasıl algılıyor? Burada devreye yazılım araçları giriyor. Bu yazılım araçları ile gerekli bilgisayar donanımları kontrol ediliyor. Bu işlemde ise yazılım ile donanım arasında önemli bir katman var. Bunun ismi “ISA”. Bu kavram, “Instruction Set Architecture” açılımına sahip ve Türkçe diline “Komut Set Mimarisi” olarak çevrilebilir. Donanım ile düşük seviye yazılım arasındaki ara yüzü ifade eder.
Bilgisayarlar dilinin kelimelerine komut denir ve bilgisayar için komutlar her şeydir. Bilgisayarlar yapması gereken işlemleri bu komutlar vasıtası ile algılar ve bunları işleme döker. ISA kavramı, bilgisayarların kullandığı mimariye göre birbirinden farklılık gösterir ancak temelinde çalışma prensibi aynı. Günümüzde en yaygın iki bilgisayar mimarisi CISC ve RISC mimarileri. Komut seti iki mimari için birbirinden farklı. ( Bu iki mimari hakkında detaylı bilgi için şu yazımıza göz atabilirsiniz: İşlemci Mimarileri: RISC Ve CISC )
Aşağıda örnek bir RISC-V mimari komutu görülebilir. Fark edildiği üzere komutlar sadece ikili sistemde 0 ve 1 yapılarından oluşan sayılara göre tüm hareketlerini gerçekleştiriyor. Bu komutlar ile bilgisayarın anlayabileceği makine kodu elde ediliyor. Peki bu komutlar nasıl oluşuyor? Buradaki cevap ise yazılım dilleri.

Programlama Dilleri
Günümüzde pek çok farklı yazılım dili bulunuyor. Bunlardan bazıları C,C++C#, Python, Java gibi diller. Bu programlama dilleri yüksek seviye diller olarak bilinir. Yüksek seviye dil denmesinin sebebi, kullanıcı dostu bir yapıya sahip olmaları. Bu diller gelişmeden önce bilgisayarlar ile işlem yapabilmek için makine koduna yakın olan diller kullanılmaktaydı. Fark edilebileceği gibi böyle bir kodlama, hem programlama esnasında hem de sonrasında kodun anlaşılabilme aşamalarında büyük zorluklar çıkarma potansiyeline sahip. Ancak yüksek seviyeli programlama dilleri ile ana yapısı İngilizce dilini temel alan ve makine kodunu sentezleyen bu diller vasıtasıyla işlemler çok daha kolay bir hal aldı.
Yüksek Seviyeden Makine Koduna Çevrim

Yüksek seviye bir dil ile yazılan kod parçacıkları, bilgisayarın anlayabileceği düzenli bir makine koduna dönüştürülürken çeşitli adımlardan geçer. İlk adım yazılan kodun Assembly diline çevrimi. Bu dil, yazılan kodu ilgili işlemci yapısı ve mimarisine göre makine koduna yakın bir yapıya dönüştürür. Yani işlemci mimarisine göre uygun olan ilk çıktıyı üretir. Buradaki amaç, işlemcinin sahip olduğu mimariye göre komutların uzunluklarının, komut setlerinin ve komut operatörlerinin farklı yapıda olması ve her mimariye göre farklı çıktılar üretilmesi gerektiğidir.
Devamında ortaya çıkan bu kod parçacığı, Assembler aracılığı ile bilgisayarın anlayabileceği makine koduna çevrilir. Son olarak, bilgisayar tarafından anlamlı hale gelen bu yapı doğrultusunda gerekli donanım arka planda kurulur. Ve işlemler yapılmaya hazır hale gelmiş bulunur.

KAYNAKÇA
britannica.com
wikipedia.org