Makine Kodunun Programa Dönüşme Mantığı?

Sponsorlu Bağlantılar

Adeczi

Üye
    Konu Sahibi
Makine Kodunun Programa Dönüşme Mantığı?
Merhabalar. Öncelikle yeni yeni C dersi görmeye başladım. Ufak tefek şeyler yazıp yazılım dünyasına girmek istiyorum. Şimdi C dilinde yazdığımız kodların derleyici tarafından makine kodu haline getirildiğini biliyorum da anlamadığım ve merak ettiğim bir şey var.
Mesela for döngüsünü 5 defa ilerleten bir program yazdık. Bunu derleyici makine koduna yani 0 ve 1 lerden oluşan hale getirdikten sonra çalıştırıyor ve yazdığımız program çalışıyor. Anlamadığım şey şu ki: Biz 1 ve 0 ları 2li tabandaki sayılar olarak biliyoruz ve mesela 11001011010 matematiksel bir sayı anlamına geliyor. Fakat derleyici makine kodu haline getirirken de 1 ve 0 haline getirmiş oluyor. Atıyorum bu for döngüsü 110010110101001 10100101010 101010100 10101010 ... şeklinde bir hale getirildi derleyici tarafından. Bunların hepsi bir sayıyı temsil etmiyor mu? Bu sayılar program çalıştığında nasıl for döngüsü haline geliyor bunun mantığını bir türlü oturtamadım. Diğer dillerde çok basit ve kısa olan bir programın makine dilince belki de binlerce satır olduğunu da anladım ama yine de bu binlerce satırda yazan 1 ve 0 lar sonuçta bir sayı değil mi? Nasıl bir program çıkıyor bu sayılardan?
İnternette araştırdım ama tahminimce kendimi doğru şekilde anlatamadığım için istediğim şeyi bulamadım. Bunu nasıl anlatacağımı da bilemiyorum ama inşallah burada derdimi anlatabilmişimdir. Konu hakkında bilgisi olanlar yardım edebilir mi?
 
  • Beğen
Tepkiler: fatihmenteş


Mesut Aktaş

Mesut Aktaş

Co-Admin
Çok güzel bir soru olmuş, bende ilk lise yıllarımda veri tabanı okurken kafa yormuştum. :)
Şimdi şöyle giriş yapmak isterim, transistörler bildiğiniz gibi işlemci içerisinde sayısı milyonu milyarı bulan devre elemanı. Çalışma mantığı da 1 - 0 yani var yok veya açık kapalı. Kod yazılıp derlemeye girince her işlem gibi bu da 0 1 olarak kodlanıyor ve bu yazdığımız program artık bu dizilim olmuş oluyor. Tabii üzerinde değişiklikler yaparsanız bu dizilim değişir. Siz bunu makine dili ile nasıl anlaşılıyor diye soruyorsunuz şimdi makine diline çevrilirken çıkan dizilim, siz bu programı çağırdığınız anda o dizilim transistörler den geçer ve makine dilinden tekrar kod bloğuna çevrilir ve karşınıza çıkar. Yani burada aracı olan işletim sistemi ve işlemci arasında anlık olarak işlem gerçekleşir kod işletim sistemi ile 0 1 dizilimi olur işlemciden geçer işlemciden sonra işletim sistemi onu tekrar kod bloğuna çevirir ve açılmış olur.
Umarım biraz da olsun fikir katabilmişimdir. C dili eğlencelidir, C# sonraki aşamanız için biçilmiş kaftan olur sanırım. :)
 
Son düzenleme:
  • Beğen
Tepkiler: Adeczi
PALA.

PALA.

Üye
Kullanılan makinanın tasarımına bağlı olarak bu kodların işleyişi değişir.
Dekoder ve enkoder sizin yazdığınız kodu sırası ile çözümler ve işler.
Makinanın türüne göre kodlama yapılır, misal hızlı cevap alınması gereken torna makinasında hassasiyet için normal ikilik kod yerine gray kodu ile tasarım tercih edilir...
 
  • Beğen
Tepkiler: Adeczi
Jelly Beanci

Jelly Beanci

Üye
Compiler direkt olarak makine koduna çevirmiyor.
Compiler kullanılan platformun assembly diline çeviriyor.
assembler ise önce Object haline dönüştür. Linker adı verilen bir başka program ise object dosyasını gerekli kütüphane vs gibi eklentileri de ekleyerek executable haline getirir.

işlemci mimarilerini araştırınca. Instruction Set diye bir tabir ile karşırsın. Işlemcinin yapabileceği işlemlerin tümünü ifade eden minik komutlar. (mov, lea, sub, add, neg, jmp... )
C:
int i;
for(i = 0; i < 5; i++) {
    //in for block
}
şekilindeki kod yaklaşık olarak şuna benzer
Kod:
.data
i dd 0h
.code
forLoop:
      ;in for block      
      cmp [i], 05h
      inc [i]
      jl forLooop
bunu da 0 1 lere dönüştürüp çalıştırır
 
  • Beğen
Tepkiler: Adeczi

Adeczi

Üye
    Konu Sahibi
Yanıtlarınız için çok teşekkür ederim final haftasında olduğum için 1 haftadır zaman bulup bakamadım anca şimdi girebildim
Tamamen anladığımı söyleyemem ama az çok neler döndüğü hakkında bir fikir sahibi oldum çok teşekkür ederim.
 


Üst Alt