Saya memiliki beberapa aspek tambahan di sini:
Pertimbangkan operasi "a = b / c" x86 akan mengimplementasikan ini sebagai
mov eax,b
xor edx,edx
div dword ptr c
mov a,eax
Sebagai bonus tambahan dari instruksi div, edx akan berisi sisanya.
Prosesor RISC akan membutuhkan pemuatan alamat b dan c terlebih dahulu, memuat b dan c dari memori ke register, melakukan pembagian dan memuat alamat a dan kemudian menyimpan hasilnya. Dst, sintaks src:
mov r5,addr b
mov r5,[r5]
mov r6,addr c
mov r6,[r6]
div r7,r5,r6
mov r5,addr a
mov [r5],r7
Di sini biasanya tidak akan ada sisa.
Jika ada variabel yang akan dimuat melalui pointer, kedua urutan dapat menjadi lebih panjang meskipun hal ini kecil kemungkinannya untuk RISC karena mungkin memiliki satu atau lebih pointer yang sudah dimuat di register lain. x86 memiliki register yang lebih sedikit sehingga kemungkinan pointer berada di salah satunya lebih kecil.
Pro dan kontra:
Instruksi RISC dapat dicampur dengan kode sekitarnya untuk meningkatkan penjadwalan instruksi, hal ini lebih kecil kemungkinannya dengan x86 yang sebaliknya melakukan pekerjaan ini (lebih atau kurang baik tergantung pada urutan) di dalam CPU itu sendiri. Urutan RISC di atas biasanya berukuran 28 byte (7 instruksi dengan lebar 32-bit / 4 byte masing-masing) pada arsitektur 32-bit. Ini akan menyebabkan memori off-chip bekerja lebih banyak saat mengambil instruksi (tujuh pengambilan). Urutan x86 yang lebih padat berisi lebih sedikit instruksi dan meskipun lebarnya bervariasi, Anda mungkin melihat rata-rata 4 byte / instruksi di sana juga. Bahkan jika Anda memiliki cache instruksi untuk mempercepat ini tujuh pengambilan berarti Anda akan memiliki defisit tiga di tempat lain untuk menebus dibandingkan dengan x86.
Arsitektur x86 dengan register yang lebih sedikit untuk disimpan / dipulihkan berarti ia mungkin akan melakukan thread switch dan menangani interupsi lebih cepat daripada RISC. Lebih banyak register untuk disimpan dan dipulihkan membutuhkan lebih banyak ruang tumpukan RAM sementara untuk melakukan interupsi dan lebih banyak ruang tumpukan permanen untuk menyimpan status utas. Aspek-aspek ini seharusnya membuat x86 menjadi kandidat yang lebih baik untuk menjalankan RTOS murni.
Pada catatan yang lebih pribadi, saya merasa lebih sulit untuk menulis rakitan RISC daripada x86. Saya menyelesaikan ini dengan menulis rutinitas RISC di C, menyusun dan memodifikasi kode yang dihasilkan. Ini lebih efisien dari sudut pandang produksi kode dan mungkin kurang efisien dari sudut pandang eksekusi. Semua 32 register itu untuk dilacak. Dengan x86, sebaliknya: 6-8 register dengan nama "asli" membuat masalah lebih mudah dikelola dan menambah keyakinan bahwa kode yang dihasilkan akan bekerja seperti yang diharapkan.
Jelek? Itu di mata yang melihatnya. Saya lebih suka "berbeda."