Yüksek seviye sebepler
Bunu düşündüğünüzde, bir mikroişlemci şaşırtıcı bir şey yapar: bir makineyi (çamaşır makinesi veya asansör gibi) almanıza ve özel olarak tasarlanmış mekanizmaların veya devrelerin tamamını ucuz, seri üretilen bir silikonla değiştirmenize olanak sağlar yonga. Parçalar üzerinde çok miktarda ve tasarımda çok zaman kazanırsınız.
Ancak, standart bir çip asmak, sayısız özel tasarım yerine; Her uygulama için mükemmel olan tek, mükemmel bir mikroişlemci olamaz. Bazı uygulamaların güç kullanımını en aza indirmesi gerekir ancak hızlı olmaları gerekmez; diğerleri hızlı olmalı, ancak programlanması kolay olmayacak, diğerleri düşük maliyetli olmalı, vs.
Bu yüzden, her biri kendi güçlü ve zayıf yönlerine sahip olan birçok farklı mikroişlemci "lezzetine" sahibiz. Hepsinin uyumlu bir talimat seti kullanması arzu edilir, çünkü bu, kodun yeniden kullanılmasına izin verir ve doğru becerilere sahip kişileri bulmayı kolaylaştırır. Ancak, komut kümesi yapar , maliyet, karmaşıklık, hızını etkileyebilir kolaylığı kullanımı ve işlemcinin fiziksel kısıtlamaları ve biz bir uzlaşma var bu yüzden: orada birkaç "ana akım" komut setleri (ve birçok küçük olanlar) ve Her komut setinde, farklı özelliklere sahip birçok işlemci vardır.
Oh, ve teknoloji değiştikçe, tüm bu değişimler değişiyor, bu yüzden talimat setleri gelişiyor, yenileri ortaya çıkıyor ve eskileri ölüyor. Bugünün “en iyi” bir talimat seti olsa bile, 20 yıl içinde olmayabilir.
Donanım detayları
Bir komut setinde muhtemelen en büyük tasarım kararı kelime büyüklüğüdür , yani işlemcinin "doğal olarak" ne kadar büyük miktarda manipüle edebileceği. 8 bit işlemciler 0-255 arası sayılarla ilgilenirken, 32 bit işlemciler 0-4,294,967,295 sayılarıyla ilgilenir. Biri için tasarlanan kodun bir başkası için tamamen yeniden düşünülmesi gerekir.
Bu sadece talimatların bir talimat setinden diğerine çevrilmesi ile ilgili değildir. Farklı bir komut setinde tamamen farklı bir yaklaşım tercih edilebilir. Örneğin, 8 bit işlemcide bir arama tablosu ideal olabilir, 32 bit işlemcide ise bir aritmetik işlem aynı amaç için daha iyi olur.
Komut setleri arasında başka önemli farklılıklar var. Çoğu talimat dört kategoriye ayrılır:
- Hesaplama (Aritmetik ve mantık)
- Kontrol akışı
- Veri aktarımı
- İşlemci yapılandırması
İşlemciler, ne tür hesaplamalar yapabilecekleri ile kontrol akışına, veri aktarımına ve işlemci yapılandırmasına nasıl yaklaştıkları konusunda farklılık gösterir.
Örneğin, bazı AVR işlemcileri çoğaltamaz ve bölünemez; Oysa tüm x86 işlemciler yapabilir. Tahmin edebileceğiniz gibi, çarpma ve bölme gibi görevler için gereken devreyi ortadan kaldırmak bir işlemciyi daha basit ve ucuz hale getirebilir; Bu işlemler, gerektiğinde yazılım rutinleri kullanılarak da gerçekleştirilebilir.
x86 aritmetik komutların işlenenlerini bellekten yüklemesine ve / veya sonuçlarını belleğe kaydetmesine izin verir; ARM, bir yük depolama mimarisidir ve bu nedenle belleğe erişmek için yalnızca birkaç özel talimat içerir. Bu arada, x86 koşullu dallanma talimatlarını atarken, ARM pratik olarak tüm talimatların koşullu olarak yürütülmesine izin verir . Ayrıca, ARM, bit değişimlerinin çoğu aritmetik komutun bir parçası olarak yapılmasına izin verir. Bu farklılıklar farklı performans özelliklerine, iç tasarımdaki farklılıklara ve talaşların maliyetine ve montaj dili seviyesindeki programlama tekniklerindeki farklılıklara yol açar.
Sonuç
Evrensel bir montaj diline sahip olmanın imkansızlığı, montaj kodunu bir komut setinden diğerine doğru şekilde dönüştürmek için, kodun baştan sona yeniden tasarlanması gerektiğidir - bilgisayarların henüz yapamadığı bir şey.