Makine dili nasıl kodlanır ve örnek kodlar nelerdir?

Programlama konusunda bir acemi olarak, duyduğum makine dilinin karmaşık olduğunu ve genellikle donanım talimat setlerine doğrudan karşılık gelen düşük seviyeli bir kodlama dili olduğunu anladım. Bu konuda daha fazla bilgi edinmek istiyorum. Bu nedenle, makine dili kodlamanın nasıl olduğunu ve bu dilde yazılmış örnek kodları nasıl bulabileceğim konusunda bilgi paylaşabilir misiniz?

1 Beğeni

Makine Dili Nedir?

Makine dili, bilgisayarın doğrudan anladığı ve yorumladığı bir dil türüdür. Genellikle ikili formatta olduğu için insanların anlaması zordur. Makine dilinde yazılan her talimat, merkezi işlem birimi (CPU) tarafından doğrudan kullanılan bir ya da daha fazla işlemci talimatına karşılık gelir.

Makine Dilinin Özellikleri

  • Düşük Seviye Sözdizimi: Makine dili, somut ve tamamen teknik dil biçimi nedeniyle genellikle düşük seviyeli bir dil olarak düşünülür.
  • Donanıma Özgü: Makine dili donanıma özgüdür. Bu çeşitliliği, farklı işlemci ailelerinin farklı makine dilinden birebir talimatlarını kullanması oluşturur.
  • Performans: Yüksek seviye dillerine kıyasla, genellikle makine dili çok daha hızlı ve daha verimli çalışır.

Makine Dili Nasıl Kodlanır?

Makine dili, ikili formatta kodlandığı için genellikle insanların okuması ve anlaması zordur. Bir talimatı makine diline çevirmek, genellikle talimatlara karşılık gelen sayısal ya da ikili kodları belirlemeyi gerektirir.

Talimat Seti

Bir talimat seti, bir makine dilinde kullanılabilen tüm komutlar veya talimatlar kümesidir. Bu komutlar, işlemcinin anlayabileceği ve gerçekleştirebileceği bir dilde temsil edilir. Bu nedenle, bir işlemci her komuta özgü bir şekilde tepki verir.

Assembler

Makine dilini yazmak ve okumak genellikle oldukça karmaşıktır. Bu nedenle, genellikle bir ara katman olan assembly dilini kullanırız. Assembly dili, makine dilindeki ikili kodları temsil eden metinsel bir dil olan, daha okunaklı bir dildir. Assemblerlar, bu assembly dilini makine diline çevirmek için kullanılır.

Örnek Makine Dili Kodu

Makine dilinde bir kod örneği:

10110000 01100001

Makine dilinde yazılan kodlar genellikle ikili formatta olduğu için, insanların bunu anlaması zor olabilir. Bu özelliği nedeniyle, çoğu geliştirici makine dilinden çok assembly dili veya yüksek seviye dilleri kullanmayı tercih eder.

TERİMLER:

Makine Dili: Bilgisayarların doğrudan anladığı dil biçimidir.
Merkezi İşlem Birimi (CPU): Bilgisayardaki ana işlemci birimidir.
Düşük Seviye Sözdizimi: Daha az soyut, daha teknik ve her bir talimatın genellikle donanım düzeyinde işlendiği dillerdir.
Donanıma Özgü: Belirli bir donanım veya makine tarafından tanınan ve yalnızca o donanımda doğru çalışan bir yazılım veya dil.
Assembler: Assembly dili kodlarını makine diline çeviren bir tür programdır.
Assembly Dili: Yüksek seviye dili taklit ederek donanımın düşük seviye diliyle alakayı kesen bir tür dil.

Makine Dili ve Kontrol Yapıları

Makine dili, bilgisayarın anlayabileceği bir dil türü olup, genellikle ikili (binary) formatta ifade edilir. Ancak, insanların bu ikili kodları okuması ve anlaması son derece zor olduğu için, genellikle assembly dilinde kod örnekleri verilir. Assembly dili, makine diline en yakın dillerden biridir ve makine komutlarına neredeyse 1:1 karşılık gelen bir yüksek seviye dildir.

Eğer (if) - Aksi Takdirde (else) kontrol yapıları, bir programın belirli bir koşulun gerçekleşmesine göre farklı yolları takip etmesini sağlar. Örneğin, bir sayının pozitif, negatif veya sıfır olmasına göre farklı işlemler yapmak isteyebiliriz. İsterseniz, bu tür bir senaryoyu bir assembly kodunda nasıl implemente edeceğimizi görelim:

mov eax, [input]      ; bir sayıyı girişten al
cmp eax, 0            ; sayımızı 0'la karşılaştır
jg Positive           ; eğer sayı büyükse (+) Positive bölümüne git
jl Negative           ; eğer sayı küçükse (-) Negative bölümüne git
; eğer hiçbir koşul sağlanmadıysa, sayı sıfırdır
jmp Zero

Positive:
; buraya gelince, eax pozitiftir
; pozitif işlemlerini yap ve sonra End bölümüne git
jmp End

Negative:
; buraya gelince, eax negatiftir
; negatif işlemlerini yap ve sonra End bölümüne git
jmp End

Zero:
; buraya gelince, eax sıfırdır
; sıfır işlemlerini yap ve sonra End bölümüne git
jmp End

End:
; program sonu

Bu kodda, bir sayının değerini sıfırla karşılaştırıp, pozitif, negatif ya da sıfır olduğuna bağlı olarak farklı bölümlere yönlendiriyoruz. cmp komutu karşılaştırma yapar, jg ve jl komutları da belirli bir koşul sağlandığında belirtilen bölüme gitme talimatını verir.

TERİMLER:

Assembly Dil: Makine diline en yakın dillerden biridir ve neredeyse 1:1 oranında makine komutlarıyla karşılık gelir. Yüksek seviye dillerin yapamayacağı özel işlemler için veya performans kritik olduğu durumlarda kullanılır.

Makine Dili: Bilgisayarlar tarafından doğrudan anlaşılan, genellikle ikili (binary) formatında ifade edilen bir dil türüdür.

Kontrol Yapıları: Program akışının farklı yönlerde ilerlemesini sağlayan komutlar. If-else, döngüler (loops) ve hata yakalama try-catch bu tür kontrol yapılarına örnek olarak verilebilir.

Eğer-Else (if-else): Belirli bir koşulun doğru olup olmadığını kontrol eden bir programlama yapısıdır. Eğer (if) belirli bir koşul doğruysa, bir kod bloğu çalıştırılır, aksi takdirde (else), başka bir kod bloğu çalıştırılır.

Makine dili, bir bilgisayarın doğrudan anladığı en düşük programlama dilidir. Bu dil, tamamen sayısal olarak, genellikle ikili veya onaltılık (hexadecimal) formattadır.

Örneğin, hali hazırda çeşitli dillerde “if-else” koşulu oluşturmak kolaydır ve çeşitli yollarla yapılabilir. Ancak, makine dilinde aynısını yapmak daha karmaşıktır ve çeşitli donanım ve tasarım detaylarına bağlıdır. Ancak, temel bir akış kontrol mekanizması verebiliriz.

Bir işlemcinin kontrol noktalarını ve hafıza adreslerini kullanarak basit bir “if-else” durumu modeline sahip olması, yüksek seviye dillerde if else bloğu ile karşılık gelen bir düzeneği modelleyebiliriz.

Örneğin, bir x86 mimarili işlemci için işlemci kayıtlarını ve veri alanlarını kontrol etmek için bellek adreslerini belirtir ve genellikle onaltılı biçimde not edilir.

Aşağıda, “if-else” tarzında bir kontrol yapısını taklit eden basit bir örneği bulabilirsiniz. Bu örnek, iki sayının (0x100 ve 0x101 bellek adreslerindeki) karşılaştırılmasını ve sonucun 0x102 bellek adresine kaydedilmesini gösterir.

LOAD 0x100  #0x100 adresinden değeri load et
SUB 0x101  #0x101 adresinden load ettiğimiz değeri çıkarırız
BZ 0x102   #Çıkan sonuç 0 ise 0x102 adresine yönlendirir.
STORE 0x103 #Sonucu hafıza konumunda saklar
JMP 0x107  #İşlemler tamamlandı ve sonraki talimata atlanır
STORE 0x104 #Eğer sonuç 0 değilse bu satıra bu talimata yönlendirilir. 
LOAD 0x105

Bu genel bir örnektir ve belirli bir donanım veya sistem mimarisi üzerinde çalışıp çalışmayacağını garantilemez.

TERIMLER:

Makine Dili: Bilgisayarların anladığı düşük seviyeli programlama dilidir genellikle ikili veya onaltılı formatta olur.
Assembly Dili: Düşük seviyeli programlama dili, genellikle belirli bir donanım mimarisi için spesifiktir. Yazılım ve donanım arasındaki bağıntıyı daha kolay hale getirir.
Load: Hafızadan belirli bir konumdan değer alır.
Sub: Çıkarma işlemi yapar.
Bz: Zero flag kontrol eder, eğer sıfırsa programın belirtilen konumuna atlar.
Store: Belirtilen adresdeki değeri hafızaya kaydeder.
Jmp: Belirli bir programa atlar.