Kita sering diberi tahu bahwa perangkat keras itu tidak peduli bahasa apa yang ditulis oleh sebuah program karena hanya melihat kode biner yang dikompilasi, namun ini bukan kebenaran sebenarnya. Misalnya, perhatikan Z80 yang sederhana; ekstensi ke set instruksi 8080 mencakup instruksi seperti CPIR yang berguna untuk memindai string gaya-C (dihentikan-NULL), misalnya untuk melakukan strlen()
. Para desainer harus mengidentifikasi bahwa menjalankan program C (sebagai lawan dari Pascal, di mana panjang string ada di header) adalah sesuatu yang mungkin digunakan untuk desain mereka. Contoh klasik lainnya adalah Mesin Lisp .
Apa contoh lain yang ada? Misalnya instruksi, jumlah dan jenis register , mode pengalamatan, yang membuat prosesor tertentu menyukai konvensi bahasa tertentu? Saya khususnya tertarik pada revisi keluarga yang sama.
sizeof(int)
sama dengan 1 harus mengharuskan jenis char
itu ditandatangani (karena int
harus dapat menampung semua nilai jenis char
). Saya telah menulis kode untuk mesin di mana char
dan int
keduanya bilangan bulat bertanda 16-bit; kesulitan terbesar adalah bahwa seseorang tidak dapat menggunakan serikat untuk konversi tipe, dan penyimpanan efisien dari sejumlah besar byte memerlukan pengemasan dan pembongkaran manual. Masalah-masalah itu kecil dibandingkan dengan kemungkinan dalam C yang sizeof (int) == sizeof (panjang), karena ...
unsigned int
nilai. C99 memperbaiki situasi itu, tetapi sebelum C99 tidak ada cara satu langkah yang dijamin aman untuk membandingkan nilai yang berpotensi negatif dengan nilai tipe unsigned int
(orang harus menguji apakah jumlahnya negatif sebelum melakukan perbandingan).