İkisi arasında herhangi bir fark var mı? Gereğince Ullman kitabında , derleyiciler başka (genellikle düşük seviye) diline bir dili dönüştürmek ve böylece bir montajcı yapar. İkisi nasıl farklı?
İkisi arasında herhangi bir fark var mı? Gereğince Ullman kitabında , derleyiciler başka (genellikle düşük seviye) diline bir dili dönüştürmek ve böylece bir montajcı yapar. İkisi nasıl farklı?
Yanıtlar:
Bir montajcı montaj kodunu makine koduna çevirir. Çeviri mekaniktir ve sadece bir şekilde yapılabilir. Buna karşılık, bir derleyici, ilgili programlama dilini derlediğinde daha fazla özgürlüğe sahiptir - örneğin, optimize edebilen ve hatta optimize etmeyen derleyiciler bile farklı kodlar üretebilir. Ayrıca, derleyiciler "ön uç" u (programlama diline karşılık gelen) ve "arka uç" u (bilgisayar mimarisine karşılık gelen) ayıracak şekilde yazılabilirken, montajcılarla ikisi her zaman aynıdır.
Sonuçta derleyici yazmak bir montajcıdan daha eğlenceli . Montaj dilleri genellikle ayrıştırma ve tip kontrolü için neredeyse önemsiz olacak şekilde tasarlanmıştır ve çok sayıda tablo güdümlü jeneratör içerme eğilimindedir ("ekleme op kodu 01110", "yükleme talimatları için hedef işlenen kaydı 17 ila 21 bitleri arasında belirtilir "). Genellikle bir montajcının en ilginç kısmı sembolik etiketleri sayılara çözümleyen kısımdır.
Bununla birlikte , çoğu montajcı az miktarda aritmetik (örneğin küçük sabitlerle sembolik etiketler ekleyerek) yapabilir ve çoğu montajcı bir makro işleme tesisine sahiptir veya entegre edilmiştir. (Çoğu Unix sisteminde, makro özelliği aslında C ön işlemcisini montajcıya düzgün bir şekilde geçirmeden önce montaj üzerinde çalıştırılarak sağlanır.)
MIPS toplayıcısı bunun ötesine geçmek zorunda kaldı ve bazı ilginç kod oluşturma kararları aldı ve az miktarda optimizasyon yaptı. MIPS makine dili, örneğin farklı sabitleri yüklemek için farklı kod dizileri gerektirir ve bu nedenle montajcı sabit oluşturulduktan sonra kod dizisini seçmek zorunda kaldı . Ayrıca, MIPS makine kodu gecikme yuvaları fikrine sahipti , ancak bunları soyutlamak ve derleyiciye daha "normal" bir soyut montaj dili sunmak montajcının sorumluluğundaydı. Bu yüzden MIPS montajcısının bazı yerel talimat çizelgelemesi yapması gerekir.
Bu ayrım, Norman Ramsey'in bazı çalışmaları, özellikle de C - taşınabilir montaj dili ile daha da bulanıklaşıyor . (İlgili makale Ramsey ve Peyton Jones, "İstisnaların Birden Fazla Uygulamasını Destekleyen Tek Bir Ara Dil", Prog. Lang. Impl. Ve Dsgn. , (PLDI-21): 285-298, 2000. ) Ve son olarak, orada aynı zamanda David Walker ve Greg Morrisett'in bellek güvenliğini garanti edebilen bir montajcısıyla yazılan bir Montaj Dili .
Burada biraz basitleştirilmiş cevap, gerçeklik daha karmaşık. Bir Assembler (A) ve Derleyici (C) arasındaki farkın diğer şeylerin arasında olmasını beklerim:
Derleme dilini "düşük düzey" ve bir derleyicinin "yüksek düzey" i anladığı kaynak dili (genellikle brüt basitleştirme, ama yine de) olarak adlandırıyoruz.
Montaj dilinde örnek olarak bir ekleme işlemi yapabilirsiniz:
Üst düzey bir dilde şunları yazabilirsiniz:
Ve bu, bir dizi koşula bağlı olarak bir talimat veya yüzlerce talimatla sonuçlanabilir, biri derleyicinin talimatlar için oluşturduğu CPU'dur.
Gördüğünüz gibi montaj kaynak dili en sık: (A) bir kaynak kod satırı bir satır CPU opcodes'i verir ve hangi CPU'yu hedeflediğinize bağlıdır. Üst düzey bir dil (C) derleyicisi sizin için tüm bu ayrıntıları yönetir - bir kaynak kodu satırı sıfır, bir veya daha fazla CPU opodu ve derleyici CPU'nun neler yapabileceğinin ayrıntılarını işler.
Bugün bir derleyici genellikle birkaç farklı aşamadan oluşur. Ön uç / arka uç veya başka şeyler olarak adlandırılan arılama olarak adlandırılabilirler. Onları genellikle dört aşama olarak görüyorum:
İyi derleyiciler yazmak son derece yetenekli bir meslektir - bir oyuncak dili derleyicisi yapmak bir amatör tarafından (veya iyi, biraz daha uzun) bir öğleden sonra yapılabilir.