Pemrograman Mikro vs. Pemrograman Bahasa Mesin

10

Saya agak bingung antara level pemrograman mikro vs tingkat bahasa mesin. Sebagai contoh:

  1. Di mana kedua jenis program berada saat dieksekusi?
  2. Apakah ada yang memiliki pemetaan 1: 1 untuk instruksi assembly true-op language?
  3. Apakah format keduanya ditentukan oleh arsitektur prosesor?

sumber
4
Jika Anda belum membacanya, lihat artikel [Wikipedia] [1]; ini sangat bagus. [1]: en.wikipedia.org/wiki/Microcode
Shawn J. Goff
5
Mikrokode mungkin bukan yang Anda bicarakan. Kecuali Anda mendesain CPU Anda sendiri, Anda mungkin tidak akan tertarik pada mikrokode. Anda mungkin membingungkan 'mikro' dalam 'mikrokode' dengan 'mikrokontroler', tetapi itu tidak sama.
davr
1
Tidak, saya mengambil tentang kode mikro. Saya sedang mempelajari CPU internal dan mencoba memahami lapisan terendah seperti mikrokode.

Jawaban:

7

Micro-code adalah level abstraksi lain di luar kode mesin. CPU sebenarnya menjalankan mikrokode, dan mesin terjemahan mengubah kode mesin menjadi mikrokode saat itu juga. Ini dilakukan karena berbagai alasan, termasuk prosesor yang lebih cepat, lebih kecil, lebih mudah untuk membuat prosesor yang kompleks dengan sedikit debugging, dan untuk kompatibilitas ke belakang. Sebagai contoh, set instruksi x86 berisi beberapa instruksi pemrosesan string yang jarang digunakan. Namun, agar tetap kompatibel, mereka masih harus tersedia di prosesor x86 modern. Alih-alih menggunakan jalur eksekusi untuk instruksi ini, mereka dikonversi menjadi mikrokode dan dieksekusi. Ini menghemat silikon, sementara masih tetap kompatibel ke belakang.

Di mana kedua jenis program berada saat dieksekusi?

Kode mesin berada di cache (setelah ditarik dari RAM). Kode mikro berada dalam cache kode mikro, tergantung pada arsitektur mesin tertentu. Cache mungkin hanya cukup besar untuk menampung cukup mikrokode untuk menahan mikrokode yang dikonversi dari instruksi kode mesin terbesar yang ada, atau mungkin juga cache yang lebih besar yang menyimpan hasil konversi dari banyak kode mesin sehingga tidak perlu mengubah semua kode mesin pada setiap iterasi untuk loop kecil.

Dalam beberapa arsitektur mikrokode yang dikonversi tidak disimpan di mana pun - unit ambil / terjemahkan dengan mudah mengeluarkan serangkaian instruksi mikrokode berdasarkan pada kode mesin yang saat ini mengeksekusi. Dalam hal ini mikrokode mengeksekusi dari ROM, dan kode mesin pada dasarnya adalah indeks ke dalam ROM - menunjuk ke seri instruksi mikrokode yang harus dijalankan untuk sepenuhnya menjalankan instruksi kode mesin.

Apakah ada yang memiliki pemetaan 1: 1 untuk instruksi assembly true-op language?

Kode mesin dan kode rakitan, secara umum 1: 1 dipetakan ke instruksi rakitan. Itu tergantung pada assembler. Perakit tingkat tinggi mungkin memiliki seperangkat makro besar yang memungkinkan seseorang untuk menulis satu baris kode rakitan dan assembler akan menghasilkan beberapa kode mesin.

Tetapi secara umum bahasa assembly "murni" dapat dikonversi secara langsung menjadi kode mesin menggunakan tabel set instruksi di manual prosesor.

Saya tidak yakin apa yang Anda maksud dengan "instruksi true-op". Mungkin Anda bisa menjelaskan rujukannya.

Apakah format keduanya ditentukan oleh arsitektur prosesor?

Format kode mesin dan mikrokode ditentukan oleh arsitektur prosesor.

Adam Davis
sumber
dengan 'true-op', maksud saya instruksi yang BUKAN instruksi bahasa assembly sintetik atau pseudo. untuk pertanyaan ke-2, saya bermaksud menanyakan apakah instruksi mikrokode memetakan ke instruksi assembly true-op language.
@Louis - Secara umum tidak ada kode rakitan yang diterbitkan yang merupakan terjemahan 1: 1 ke mikrokode. Intel dan AMD (dan lainnya) menjaga kepemilikan mikrokode mereka, karena memberikan wawasan yang sangat kuat ke dalam arsitektur internal prosesor. Saya pernah mendengar bahwa untuk beberapa tujuan khusus mereka bersedia memberikan informasi tentang hal itu kepada, misalnya, para peneliti sehingga mereka dapat memperoleh 1% kinerja terakhir dari mesin untuk aplikasi tertentu, tetapi sebagian besar hanya spesifikasi yang diterbitkan termasuk kode mesin dan deskripsi arsitektur umum.
Adam Davis
8

Pada dasarnya, mikrokode memperluas set instruksi CPU terbatas berisi instruksi level lebih tinggi yang akan sulit untuk diimplementasikan dalam perangkat keras, tetapi relatif mudah untuk membangun dengan instruksi yang ada. Microcode memungkinkan prosesor dengan set instruksi kecil berfungsi seperti pada set instruksi yang lebih besar.

Katakanlah Anda sedang bekerja dengan set instruksi MARIE dan Anda ingin fungsi Tambah x, y, tetapi arsitektur hanya memungkinkan Tambah x (yang hanya menambahkan apa yang saat ini dalam register ke x) sehingga Anda menambahkan instruksi mikrokode:

LOAD x //Load x into the register
ADD y //Add y to the value in the register

Sekarang ketika kode bahasa mesin Anda mengatakan:

ADD x,y

itu mencari fungsi ADD yang Anda tambahkan ke ROM (mikrokode Anda) dan jalankan. Ini bagus karena meningkatkan set instruksi Anda, yang memungkinkan kode mesin lebih mudah dibaca, dan karena kode mikro Anda disimpan dalam ROM, itu juga sedikit lebih cepat daripada memanggil LOAD dan ADD dari RAM.

Saya dulu bekerja di perusahaan yang benar-benar menulis mikrokode untuk melakukan pengukuran khusus dengan kecepatan sangat tinggi pada sistem mereka yang lebih lama. Namun, dengan kemajuan dalam FPGA mereka telah beralih ke yang, yang jauh lebih cepat (karena Anda benar-benar menerapkan "instruksi khusus" dalam perangkat keras, bukan ROM).

lebih baik
sumber
bagaimana Anda menulis dan menjalankan mikrokode?
Erik Kaplun
@ErikAllik Anda hanya dapat melakukannya dengan membangun komputer sendiri dari awal.
user253751
5

Banyak prosesor digerakkan oleh mesin negara yang urutan transisinya dipengaruhi oleh instruksi yang dijalankan. "Instruksi" Microcode sering menentukan interaksi antara berbagai register dan bus dengan cara yang tidak akan terlihat oleh seorang programmer.

Sebagai contoh, instruksi mikrokode untuk CPU 8-bit dalam keadaan # 1 dapat menentukan bahwa output yang memungkinkan untuk kedua bagian dari penghitung program harus aktif (menyebabkan penghitung program menjadi output pada bus alamat internal atas dan bawah), sinyal program-counter-increment harus aktif, sinyal kait alamat eksternal harus aktif (sehingga bus alamat eksternal akan melacak yang internal) dan sinyal baca RAM harus aktif, dan pengontrol harus beralih ke status # 2.

Dalam keadaan # 2, bus data eksternal harus diumpankan ke bus data primer internal, dan register instruksi, yang membaca dari bus itu, harus dimuat. Penghitung program harus seperti sebelumnya menjadi output pada kedua bagian bus alamat, dan RAM-baca lainnya dikeluarkan. Bit 5-7 dari register instruksi harus dimuat ke dalam bit 0-2 dari state controller, bit 3 dari register state harus diset kecuali bit 1-7 dari register instruksi sudah diatur, dan bit lain dari register state harus jelas, hasil bersihnya adalah bahwa negara bagian berikutnya akan menjadi # 7- # 15.

Perhatikan bahwa mikrokode tidak benar-benar didefinisikan dalam hal instruksi, melainkan dalam hal kombinasi sinyal kontrol. Perangkat keras tidak akan diatur untuk memungkinkan instruksi keperluan umum dalam mikrokode, melainkan untuk memuat atau menampilkan berbagai register dari / ke bus tempat mereka duduk, atau menghubungkan bus yang berbeda satu sama lain, dan menggunakan berbagai bit atau kombinasi daripadanya untuk pilih negara yang berbeda. Banyak aspek dari desain akan terprogram (mis. Opcodes FE dan FF mungkin lebih khusus di perangkat keras daripada di mikrokode). Gagasan dengan mikrokode bukan untuk menjalankan program, tetapi untuk mengganti logika.

supercat
sumber