derleyiciler nasıl çalışır? (c dilinin makine kodu karşılıkları nelerdir)

Başlatan pissigor, 30 Aralık 2019 - 16:41:04

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

pissigor

merhaba. bir c derleyicisi, c kodlarını makine diline çeviriyor, peki hangi c kodunun karşılığının hangi makine kodu olduğunu nerden biliyor? yani ben bir c derleyicisi yazacak olsam içine bir tür sözlük koymalıyım ki c kodlarına karşılık gelen makine kodunu ordan okuyup ona göre çıktı dosyasını üretsin.bunu nereden öğrenebilirim?şmdiden teşekkürler

7hr33l3t73r

Derleyiciler tam sizin anlattiginiz gibi calismaz.
Asagidaki adres size fikir verecektir.
https://tomassetti.me/ebnf/
https://github.com/antlr/grammars-v4/blob/master/c/C.g4
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

nebula

...
Kendi kendimizle yarışmadayız, gülüm.
Ya ölü yıldızlara hayatı götüreceğiz,
Ya dünyamıza inecek ölüm. -N.H.R.-

Amenofis

Hayır öyle değil. Programcı yüksek seviyeli dili kullanarak bir iş yapmak ister. Derleyici der ki senin yapmak istediğin iş hedef işlemcide ancak bu şekilde olabilir der ve bir cpu komut dizesi oluşturur. Birebir dönüşüm olmaz, amaç istenen işi yapacak komut dizesini oluşturmak. Belki programcı gereksiz bir kod satırı yazmıştır. Derleyici "bu kod etkisiz" diyerek onu tamamen silebilir. Ya da "burada gereksiz yere uğraşmışsın, ben daha iyisini yaparım" der ve yazdığın kodu aynı işi yapacak şekilde optimize edebilir.

.py

Alıntı yapılan: pissigor - 30 Aralık 2019 - 16:41:04
merhaba. bir c derleyicisi, c kodlarını makine diline çeviriyor, peki hangi c kodunun karşılığının hangi makine kodu olduğunu nerden biliyor? yani ben bir c derleyicisi yazacak olsam içine bir tür sözlük koymalıyım ki c kodlarına karşılık gelen makine kodunu ordan okuyup ona göre çıktı dosyasını üretsin.bunu nereden öğrenebilirim?şmdiden teşekkürler

İlk önce  satır satır kodlarınız yorumlanır aslında hepsinden once yazdıgın kodun bası ve sonu belirlenir ve yorumlama yapılır hatalı bir kısım varsa uyarı alırsın sorun yoksa makinenin anlayacagı dile donusturulur. yani 010100 gibi bu kısmı 0 ve 1 lerin karsılıgını hiç arastırma bunu anlaman ımkansız gibi birsey. senin c de yazdıgın bir degisken ismi mesela xx olsun bu degisken makine diline donusturulurken val_00 gibi tanımlanır aslında daha karmasık bir isim kullanılıyor dolayısıyla makine diline bakarak c de yazdıgın kodun hangi satırı makine dilindeki kodun hangi kısmına denk geliyor anlaman imkansız ayrıca c de yazdıgın 1 satırlık bir kod makine dilinde 10 satıra denk gelebilir yada daha fazla satıra...

Onur48