Alasan tingkat tinggi
Ketika Anda memikirkannya, mikroprosesor melakukan hal yang luar biasa: mikroprosesor memungkinkan Anda mengambil mesin (seperti mesin cuci atau lift), dan mengganti seluruh bagian dari mekanisme atau sirkuit yang dirancang khusus sesuai pesanan dengan silikon yang diproduksi secara massal murah keping Anda menghemat banyak uang untuk komponen, dan banyak waktu untuk desain.
Tapi tunggu dulu, chip standar , menggantikan desain khusus yang tak terhitung jumlahnya ? Tidak mungkin ada satu mikroprosesor tunggal yang sempurna untuk setiap aplikasi. Beberapa aplikasi perlu meminimalkan penggunaan daya tetapi tidak harus cepat; yang lain harus cepat tetapi tidak perlu mudah diprogram, yang lain harus murah, dll.
Jadi, kami memiliki banyak "rasa" mikroprosesor yang berbeda, masing-masing dengan kekuatan dan kelemahannya sendiri. Sangat diinginkan bagi mereka untuk semua menggunakan set instruksi yang kompatibel, karena ini memungkinkan penggunaan kembali kode dan membuatnya lebih mudah untuk menemukan orang dengan keterampilan yang tepat. Namun, set instruksi tidak memengaruhi biaya, kompleksitas, kecepatan, kemudahan penggunaan, dan kendala fisik prosesor, sehingga kami memiliki kompromi: ada beberapa set instruksi "arus utama" (dan banyak yang kecil), dan dalam setiap set instruksi ada banyak prosesor dengan karakteristik berbeda.
Oh, dan ketika teknologi berubah, semua pertukaran ini berubah, sehingga set instruksi berkembang, yang baru muncul, dan yang lama mati. Bahkan jika ada satu set instruksi "terbaik" hari ini, mungkin tidak dalam 20 tahun.
Detail perangkat keras
Mungkin keputusan desain terbesar dalam set instruksi adalah ukuran kata , yaitu seberapa besar angka yang dapat "dimanipulasi" prosesor secara alami. Prosesor 8-bit menangani angka dari 0-255, sedangkan prosesor 32-bit berurusan dengan angka dari 0 hingga 4.294.967.295. Kode yang dirancang untuk satu harus benar-benar dipikirkan kembali untuk yang lain.
Ini bukan hanya masalah menerjemahkan instruksi dari satu set instruksi ke instruksi lainnya. Pendekatan yang sangat berbeda mungkin lebih disukai dalam set instruksi yang berbeda. Sebagai contoh, pada prosesor 8-bit tabel pencarian mungkin ideal, sedangkan pada prosesor 32-bit operasi aritmatika akan lebih baik untuk tujuan yang sama.
Ada perbedaan besar lainnya antara set instruksi. Sebagian besar instruksi terbagi dalam empat kategori:
- Komputasi (Aritmatika dan logika)
- Aliran Kontrol
- Transfer data
- Konfigurasi prosesor
Prosesor berbeda dalam jenis komputasi apa yang dapat mereka lakukan, serta bagaimana mereka mendekati aliran kontrol, transfer data, dan konfigurasi prosesor.
Sebagai contoh, beberapa prosesor AVR tidak dapat menggandakan atau membagi; sedangkan semua prosesor x86 bisa. Seperti yang Anda bayangkan, menghilangkan sirkuit yang diperlukan untuk tugas-tugas seperti perkalian dan pembagian dapat membuat prosesor lebih sederhana dan lebih murah; operasi ini masih dapat dilakukan menggunakan rutin perangkat lunak jika diperlukan.
x86 memungkinkan instruksi aritmatika untuk memuat operan mereka dari memori dan / atau menyimpan hasilnya ke memori; ARM adalah arsitektur penyimpanan-toko dan karenanya hanya memiliki beberapa instruksi khusus untuk mengakses memori. Sementara itu x86 telah mendedikasikan instruksi cabang bersyarat, sementara ARM memungkinkan hampir semua instruksi dijalankan secara kondisional. Juga, ARM memungkinkan bit-shift dilakukan sebagai bagian dari sebagian besar instruksi aritmatika. Perbedaan-perbedaan ini menyebabkan karakteristik kinerja yang berbeda, perbedaan dalam desain internal dan biaya chip, dan perbedaan dalam teknik pemrograman di tingkat bahasa assembly.
Kesimpulan
Alasan mengapa tidak mungkin memiliki bahasa rakitan universal adalah bahwa, untuk mengubah kode rakitan dengan benar dari satu instruksi ke instruksi lainnya, seseorang harus mendesain ulang kode itu lagi — sesuatu yang belum bisa dilakukan oleh komputer.