Yazan : Şadi Evren ŞEKER

Bilgisayar bilimlerinde programlama dillerinin en alt seviyesini oluşturan ve insan tarafından neredeyse tamamen anlaşılmaz buna karşılık makine için en anlaşılır dildir. Aslında makine dilini anlamak için dillerin seviyelerini anlamakta yarar vardır.

Yukarıdaki şekilde de tasvir edildiği üzere dilleri seviyelere bölecek olursak en altta donanıma en yakın ve donanım tarafından en anlaşılır olan makine dilinden (machine language) bahsedebiliriz. Esas itibariyle makine dili ikilik tabanda (binary) sayılardan ibarettir ve bu sayılar makinede işlenen dijital sinyallerin birer gösterimidir. Yani diğer bir dille makinede kullanılan ve her birisi farklı anlamlara gelen sinyallere makine dili ismi verilebilir.

Makine dilinin hemen üzerinde makine diline çok yakın olan ve makinedeki her şeyin kodcu tarafından bilinmesi ve takip edilmesi gereken çeviriciler (assembly) gelir. Bunun üzerindeki dil sınıfları literatürde farklılık gösterir. Bazı kaynaklarda doğrudan üst seviye diller olarak nitelendirilen bir katman bulunurken bazı kaynaklarda ara bir seviye olan orta seviye (midlevel) diller bulunur. Burada kast edilen hala donanıma ve çevirici (assembly) seviyesinin mümkün olduğu ancak istenirse bu tip kodlamalarla hiç muhatap olunmayan dillerdir. Örneğin C bu seviyedeki dillere bir örnek olabilir. Dilenirse RAM (hafıza) ve işlemci (CPU) üzerinde doğrudan düşük seviye işlemler yapılabilir veya bu işlemlere hiç girilmeden C kodları da yazılabilir. Bu açıdan C dili hem düşük hem de yüksek seviye programlama dili olarak düşünülebilir kullanılabilen orta seviye bir dildir.

Yüksek seviye dillerle kast edilen ise genelde bilgisayarın donanımından uzak, nispeten insanlar tarafından anlaşılması daha kolay dillerdir. Örneğin pascal, ada, cobol, fortran gibi diller bu seviyeden kabul edilebilir.

Ayrıca literatürde yüksek seviye dillerin üzerinde de seviyeler belirlenmektedir. Bazı kaynaklarda görsel diller (visual languages) 5. Seviye olarak kabul edilir. Örneğin visual basic, oracle forms and reports, Microsoft Access veya SAP menu painter gibi görsel yazılım ortamları ve bu ortamları destekleyen diller (ki dil oldukları bazı kaynaklarda tartışmalıdır) 5. Seviye dil olarak kabul edilebilirler.

Benzer şekilde nesne yönelimli dilleri (object oriented languages) 5. Seviye kabul eden kaynaklar olduğu gibi insanın algılaması ve anlaması nispeten daha kolay olan modelleme dillerini 5. Seviye dil olarak kabul eden kaynaklarda bulunur. Örneğin UML ve benzeri çizimleri bu grupta kabul edebiliriz.

Dillerin sınıflandırılmasına yukarıdaki şekilde değindikten sonra konumuz olan makine dillerine dönelim.

Makine dillerini tanımlarken her zaman için mikrokodları (microcode) ayrı tutmak gerekir. Mikrokodlar veya bazı kaynaklarda firmware (fabrika yazılımları) olarak da geçen yazılımlar basitçe bir cihaz üzerine fabrikadaki üretimi sırasında yazılmış olan ve değiştirilemeyen yazılımlardır. Örneğin bir kol saatinin veya hesap makinesinin veya ADSL modemin üzerinde basılı olarak gelen yazılımlardır. Bu yazılımların makine dillerinden ayrı tutulmasının sebebi değiştirilemez olmasıdır. Makine dilinin en temel özelliği bir dil olması ve makinenin anlayabileceği seviyeye yakın olmasıdır. Dolayısıyla bu tanımda makineyle iletişimin var olduğu kabul edilmiştir (dil zaten iletişimi gerektirir). İşte bu sebeple mikro kod (veya fabrika kodu) bir makine dili olarak sınıflandırılmamıştır (istisnalar sayılmazsa).

Makine dilini daha iyi anlayabilmek için C dilinde yazılmış bir kodun çevrimini incelemeye çalışalım:

Yukarıdaki basit C kodunu derlediğimiz (compile) zaman makine kodu çıkıyor. Bu kodu basit bir editorle (bu örnekte notepad++ kullanılmıştır) açar ve incelersek aşağıdakine benzer bir dosya görürüz:

Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.

Yukarıda bu makine koduna çevrilmiş halinin sadece bir kısmı alınmıştır. Burada anlamlı yazılar çıktığına dikkat edebilirsiniz. Bunun sebebi editörümüzün makine dilindeki ikilik tabandaki bilgileri okunabilir halde işlemeye çalışmasıdır (bu örnekte notepad++ ANSI olarak ayarlanmıştır).

Aslında makine dilini tam olarak görmek için onaltılık tabanda (hexadecimal) okumak gerekir.

Yukarıdaki metni onaltılık tabana çevirecek olursak (hex editor ile görüntüleyecek olursak, bu örnekte notepad++ için hex eklentisi kullanılmıştır):

Yukarıdaki resimde de görüldüğü üzere en sol kolonda adres, ortada onaltılık kodlama ve en sağda ise kodlamanın ansi karşılığı görüntülenmektedir.

Yukarıdaki örnek kod için 18.3kb uzunluğunda olan dosyanın kaynak kodu 79bayttır. Bu dosyanın bilgisayarın anlayacağı seviyeye çevrilmesi ve aslında onaltılık tabanda gösterilen sinyallerin işlenmesi sonucunda bilgisayarda çalıştığını söyleyebiliriz. Burada CPU, RAM gibi donanımın yanında işletim sisteminin de etkisi bulunmaktadır.

Yorumlar

  1. Osman

    Zehra makine dilinde yazmak için normal programlama öğrenmen yeterlidir, zaten yukarıdada açıkladığı gibi örneğin C programlama dilinden yazarsın işlemci onu assembly yardımı ile makine diline çevirir ve makine uygulamaya geçer, sonuç olarak söylemek istediğim 00101010 olarak yazılım yapılmaz yazılım herhangi bir yazılım dilini öğrendiğin zaman amacına ulaşırsın.

  2. cihan

    Değerli bilgileriniz için öncelikle teşekkürler. Benim ilgilendiğim husus c++ dilinde arzuya göre 3 boyutlu bir geometri (uzayda bir eğri) oluşturacak bir program yazıp, bunu robotumuzun anlayıp takip edebiliyor olmasını sağlamak. basitçe Endüstrideki CNC Kodlarının 3 boyutlu çizim programları ile ilişkisi nasıl sağlanmaktadır. Bu konular üzerine ilgi duyan arkadaşlara nereden başlamayı ve tavsiye edersiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir