Biz edilir sıklıkla söylendi ancak bu tüm gerçek değildir, donanım bir program sadece derlenmiş ikili kod gördüğü gibi yazılır hangi dili care gelmez. Örneğin, mütevazi Z80'i düşünün; 8080 komut setindeki uzantıları, örneğin gerçekleştirmek için C-tarzı (NULL-sonlandırılmış) dizeleri taramak için yararlı olan CPIR gibi talimatları içerir strlen()
. Tasarımcılar, C programlarını çalıştırmanın (dize uzunluğunun başlığında olduğu Pascal'ın aksine) tasarımlarının kullanılması muhtemel bir şey olduğunu tanımlamış olmalılar. Diğer bir klasik örnek ise Lisp Machine .
Başka hangi örnekler var? Örneğin, belirli bir işlemciyi belirli bir dilin sözleşmelerine uygun kılan talimatlar, kayıt sayısı ve türü , adresleme modları? Özellikle aynı ailenin revizyonlarıyla ilgileniyorum.
sizeof(int)
1'e eşit olan herhangi bir uygulama , bu türün char
imzalanmasını zorunlu kılar (bir int
türün tüm değerlerini tutabilmek zorunda olduğundan char
). Ben bir makine için kod yazılı nerede ettik char
ve int
16 bit imzalı iki tamsayılar olduğu; en büyük zorluk, sendikaların tip dönüşümü için kullanamamasıdır ve çok sayıda baytın verimli bir şekilde depolanması manuel paketleme ve paket açma gerektirir. Bu sorunlar, C'deki olasılıkla kıyaslandığında, sizeof (int) == sizeof (uzun) 'dan beri ...
unsigned int
değer arasındaki farkı koruyacak garantisi olmayan standart bir tür olmadığı anlamına gelir . C99 bu durumu düzeltti, ancak C99'dan önce, potansiyel olarak negatif bir değeri bir tür değerle karşılaştırmak için garantili güvenli tek adımlı bir yol yoktu unsigned int
(karşılaştırma yapmadan önce sayının negatif olup olmadığını test etmek zorunda kalacaktı).