Makine dili

Makine dili, mikroişlemci ya da mikrodenetleyici gibi komut işleme yeteneğine sahip entegrelerin işleyebilecekleri, yapısına göre değişebilen ama genellikle her biri 8 adet 0-1'den (bit) ibaret komutlardan oluşan dile verilen addır. Her bir komutun mnemonic olarak adlandırılan bir tanımı ve işlem kodu (İngilizce: op code) olarak adlandırılan bir sayı karşılığı vardır. Mnemonic'ler, op kodun ne işe yaradığını hatırda tutmaya yarar. Örneğin Z-80 mikroişlemcisinde bir alt yordamı çağırmak için kullanılan komutun mnemonic'i Call NNdir ve program yazarken Call NN mnemonic'inin işlem kodu olan "205" sayısı programa konur. Yani bir makine dili program 205 14 45 195 22 15 gibi ardışık sayılardan, daha doğrusu bu sayıların binary karşılığı olan 0 ve 1'lerden oluşur.

Makine dili, işlemcinin verilen komutlar doğrultusunda çalıştırılmasını sağlayan ve işlemci mimarisine göre değişen en alt seviyedeki programlama dilidir. Bu dil sadece 0 ve 1 ikililerinin anlamlı kombinasyonlarından meydana gelmektedir. 0 ve 1 ikilileri işlemcinin komut seti doğrultusunda işleme uygulanacak operasyon, operasyonun gerçekleştirileceği verinin hafızada bulunduğu adres ve hafızaya ulaşım yolları gibi bilgileri ifade edecek şekilde bir araya gelmekte ve işlemci tarafından kodu çözülerek gerekli işlemin yerine getirilmesi sağlar. Diğer programlama dillerin gerektirdiği derleyici ya da yorumlayıcı kullanımını gerektirmediğinden ve donanımı doğrudan kontrol etme gücü olduğundan kullanılır.

Kullanılan işlemcinin komut setinden ibaret olan makine dili komutları donanıma bağımlıdır. Günümüzde kullanılan i386 (32 bit intel) ve i486 gibi işlemci standartlarının her birine ait birer komut seti bulunmaktadır. Bu komut seti yalnız o mimariye yöneliktir. Bunun temelinde yatan asıl sebep işlemcinin hafıza birimi üzerinden okuduğu bir veri parçasının (bir ya da birkaç bayt) işlemciye bir emir teşkil edecek bir ifade olabilmesi için bu veri parçasının işlemci üzerinde donanımsal olarak bir işleme karşılık gelmesi gerekliliğinden kaynaklanır.

Makine diline "birinci kuşak programlama dili" denir. Genellikle ikinci kuşak programlama dili olan Assembly ile karıştırılır. Assembly'de işlem kodu yerine mnemonic'ler yazılır. Bu sayede program insanlar açısından anlaşılır olur. Daha sonra assembler denen bir program kullanılarak, yazılan bu assembly programı, makine diline çevrilerek kullanılabilir.