Jumlah opcode maksimum untuk mikroprosesor

13

masukkan deskripsi gambar di sini

Berapa jumlah maksimum opcodes untuk pertanyaan, jawabannya adalah opsi c, tetapi saya pikir itu adalah opsi d, karena, setiap alamat menentukan setiap lokasi memori, ada 16 baris alamat, yang berarti 2 ^ 16 alamat yaitu, 2 ^ 16 lokasi memori.

Jadi, jika setiap lokasi berisi satu opcode, total 2 ^ 16 lokasi berisi 2 ^ 16 opcodes dan ini adalah jumlah opcode maksimum, tetapi jawabannya diberikan sebagai c, yaitu 2 ^ 12. Bagaimana ini mungkin?

Chiduruppula Sharath Kumar
sumber
7
Pertanyaannya adalah menanyakan berapa banyak opcodes yang BERBEDA dalam ISA, bukan berapa banyak instruksi yang dapat membentuk program sebesar mungkin.
Brian Drummond
5
@BrianDrummond - dengan interpretasi itu, bagaimanapun, ada pertanyaan yang hanya bermakna jika Anda membuat asumsi tentang cara kerja ISA yang tidak universal. Misalnya, Z80 memiliki bus data 8 bit, tetapi di suatu tempat di wilayah 800 opcode yang berbeda - karena menggunakan awalan byte untuk memperluas dan memvariasikan operasi yang tersedia.
Jules
15
Pertanyaan seperti yang diungkapkan dalam buku itu tidak masuk akal. Tidak ada korespondensi langsung yang melekat antara ukuran bus dan ukuran opcode. JVM didasarkan pada model data 32-bit tetapi memiliki opcodes 8-bit.
chrylis -pada mogok-
10
Pertanyaan ini tidak jelas kecuali kami memiliki banyak informasi di luar apa yang diberikan dalam pertanyaan. Kita harus membuat banyak asumsi tentang karakteristik proses untuk mendapatkan jawaban - asumsi yang tidak benar untuk sebagian besar prosesor dunia nyata!
David Schwartz
14
Pertanyaannya adalah omong kosong. Jika perlu, opcode instruksi dapat menjangkau beberapa kata memori. Tidak ada batasan yang melekat.
Hot Licks

Jawaban:

31

Semua opsi salah . Jumlah maksimum opcode (unik) yang dapat dijalankan prosesor tidak dibatasi oleh lebar bus.


Biasanya CPU 12+ bit dirancang untuk memiliki satu perintah per kata data sehingga dapat membaca sebagian besar instruksi sekaligus. Jadi CPU normal direkayasa hingga batas 2 ^ 12 opcodes.

Arsitektur CPU yang ada yang memiliki lebih dari 2 ^ 12 = 4096 opcodes sangat langka hanya karena seseorang hampir tidak pernah membutuhkan begitu banyak - terlalu banyak untuk dipelajari, terlalu banyak untuk benar-benar berguna, terlalu banyak ruang silikon yang terbuang sia-sia.

Pembaruan : Seperti yang ditunjukkan dalam komentar, semua kemungkinan variasi set instruksi x86 dapat benar-benar bertambah hingga lebih dari 6000 tergantung pada bagaimana Anda menghitung! Ini lebih merupakan pengecualian.

Namun untuk CPU 4-bit 2 ^ 4 = 16 instruksi sangat sering tidak cukup, sehingga banyak dari prosesor tersebut memiliki lebih banyak.

Mungkin ada beberapa cara dan alasan CPU dapat memasukkan lebih banyak opcode daripada yang sesuai dengan bus data, termasuk:

Instruksi rentang kata

Prosesor tidak perlu membaca perintah dalam satu siklus data tunggal - prosesor dapat menggunakan beberapa siklus konsekuensial. Sebenarnya sebagian besar CPU tidak - meskipun lebih umum digunakan untuk argumen instruksi daripada memperluas ruang opcode.

Contoh: intel 4004 hanya memiliki 4 baris yang digandakan sebagai baris data / alamat, kata data 4-bit, tetapi lebih dari 40 opcode dalam instruksi 8-bit.

Awalan dan akhiran

Prosesor (CISC) mungkin memiliki banyak awalan dan akhiran instruksi yang diperlukan.

Itu diawali dengan instruksi aktual untuk mengubah apa yang dilakukannya - baik sedikit atau sepenuhnya.

Itu tergantung pada definisi Anda tentang "opcode unik". Jika seseorang menganggap setiap bagian dari instruksi yang bukan data menjadi bagian dari opcode, jumlah totalnya akan mencakup semua variasi yang mungkin. Namun, beberapa percaya bahwa imbuhan itu adalah bagian yang berbeda dari pengajaran.

Contoh: CPU Intel x86 sebenarnya tidak memiliki 4M opcode. Namun jika Anda menghitung semua awalan sebagai bagian dari opcode, CPU modern memungkinkan untuk instruksi selama 15 bYtes - itu BANYAK kemungkinan opcode. Meskipun banyak yang hanya akan melakukan hal yang sama - jadi ini tergantung pada definisi mereka "unik".

Mode

Sebuah prosesor mungkin memiliki beberapa mode operasi di mana ia mungkin memiliki set opcode yang sama sekali berbeda.

Contoh: intel x86_64 memiliki mode 32-bit (real / v86 / protected) dan 64-bit yang memiliki opcode yang berbeda. CPU ARM dapat memiliki mode ARM 32-bit dan jempol 16-bit.

Multiplexing bit bus

Pertanyaan menyatakan "jalur data" dan "jalur alamat", namun bus data internal dan bus alamat internal mungkin lebih luas daripada jumlah jalur bus aktual.

Data bus multipleks dikirim secara berurutan, yaitu babak pertama, lalu babak kedua. CPU menyimpannya ke dalam register internal berukuran penuh dan beroperasi pada mereka.

Ini sering dilakukan untuk mengurangi biaya dan / atau ukuran chip fisik tapak.

Contohnya termasuk intel 4004, apa pun di LPC data bus, dan NEC VR4300, CPU Nintendo64 yang hanya memiliki bus data 32-line.

Tidak ada bus paralel

Sebagai kelanjutan dari poin sebelumnya, CPU bahkan tidak perlu mengekspos bus paralel sama sekali.

CPU dapat dengan mudah hanya mengekspos sekuensial bus seperti I2C, SPI, dll.

Mungkin tidak terlalu hemat biaya untuk menghasilkan CPU khusus seperti itu, tetapi banyak mikrokontroler dengan jumlah kecil (termasuk CPU dan memori) dibuat sedemikian rupa untuk menghemat pin-pin berharga tersebut untuk sesuatu yang lebih bermanfaat. Misalnya, chip atmel ATTINY4 / 5/6/10 hanya memiliki total 6 pin, dua untuk daya, satu untuk reset, tiga tujuan umum. Instruksi dikirim melalui antarmuka 3-baris eksklusif secara berurutan.

Tergantung pada definisi Anda tentang mikrokontroler, itu dapat dianggap mikroprosesor atau dapat diprogram untuk bertindak satu (yaitu mensimulasikan CPU khusus dengan bus berurutan atau bus).

Pertanyaan ini dengan jelas menyatakan bahwa beberapa jenis bus data terpapar, tetapi bukan bahwa itu adalah bus paralel. Dalam teori 12-jalur data bus bisa terdiri dari data serial tunggal baris dan 11 auxilary / tanah / Status garis , walaupun itu mungkin tidak akan menjadi ide yang sangat waras.

Bus instruksi khusus

Sebenarnya prosesor bahkan tidak perlu menerima instruksi pada jalur bus yang sama seperti halnya data.

Ini dapat dengan mudah menjadi kasus ketika ALU adalah chip diskrit daripada bagian dari mikroprosesor tetapi tidak layak secara ekonomi sekarang sebagian besar waktu.

Tetapi tidak ada yang menghalangi Anda untuk mengimplementasikan CPU dengan jalur khusus hanya untuk instruksi. CPU seperti itu mungkin berguna ketika operasi tunggal harus dilakukan pada array data (SIMD).

Karena lebar bus instruksi sepenuhnya arbitrer, demikian juga jumlah opcode maksimum yang dimungkinkan.

Jack White
sumber
4
Yang menarik, x86-64 memiliki antara 1.000 dan 6000 opcodes, tergantung pada siapa yang Anda tanyakan ( 1 , 2 , 3 ).
LMS
Tidak pernah mencoba menghitungnya, tetapi dengan semua variasi itu masuk akal.
Jack White
13

Jumlah maksimum opcodes memang dapat dipikirkan dalam beberapa cara:

  • Jumlah maksimum opcode unik yang dimungkinkan.

Ini dapat dikumpulkan dari lebar instruksi dan bukan lebar bus data. Biasanya opcode akan masuk ke dalam satu akses memori, dan kemudian jawabannya adalah 2 ^ 12. Tetapi prosesor dapat menerapkan proses decoding opcode multi-siklus untuk memperpanjang jumlah opcode yang mungkin melampaui 2 ^ 12.

  • Jumlah instruksi maksimum (berisi opcodes) yang dapat langsung ditangani oleh prosesor.

Jumlah maksimum instruksi (berisi opcodes) yang dapat langsung ditangani oleh prosesor dibatasi oleh lebar bus alamat (2 ^ 16). Namun secara tidak langsung prosesor dapat mengatasi lebih banyak memori misalnya opcode dapat memfasilitasi pertukaran halaman atau operasi serupa untuk mengambil instruksi dari sumber lain.

HKOB
sumber
2
Pertanyaannya tidak ambigu. Jika seharusnya ditafsirkan sebagai poin kedua Anda, itu akan dirumuskan sebagai "jumlah maksimum instruksi yang dapat disimpan / ditangani / ...". Kata "opcode" membuatnya sangat jelas tentang set instruksi, bukan tentang kisaran adressable.
redup iman yang hilang pada
11
+1 untuk menyebutkan bahwa multi-kata op-kode sangat mungkin, jadi pertanyaannya tidak terlalu bagus.
Spehro Pefhany
2
Penutur asli bahasa Inggris sering kali memiliki bias yang membuatnya sulit bagi mereka untuk hanya memahami arti kata-kata yang mereka gunakan. Ketika penutur bahasa Inggris internasional membaca atau mendengarnya, mereka mungkin tidak mendapatkan makna kedua (yang dimaksudkan). Hal yang sama berlaku ketika seorang siswa mempelajari ungkapan baru - jika formulasinya ambigu, mudah untuk salah paham. Jadi saya kira siswa telah belajar bahwa setiap instruksi berisi bagian opcode di dalamnya. Ya, saya akan mengatakan itu benar. Sungguh, kata-kata dari pertanyaan 01. bersifat mendua.
HKOB
4
@SpehroPefhany Yap, pertanyaannya tidak diragukan lagi ambigu tanpa konteks lebih lanjut. Jika OP diajarkan bahwa, berapa pun panjang instruksi, opcode akan diambil pada akses memori pertama, maka jawabannya adalah (c), jika tidak, itu tidak dapat dijawab. Intinya adalah, apakah OP memberikan konteks yang cukup dalam pertanyaan EE.SE- nya , atau apakah gurunya memberikan sesuatu untuk diberikan dan merumuskan pertanyaan yang ambigu?
Lorenzo Donati mendukung Monica
1
@SpehroPefhany Benar :) Tapi Inggris - mungkin jengkel ringan mereka - juga merupakan bagian dari dunia English International ( bbc.com/capital/story/... )
HKOB
4

Anda benar-benar bingung oleh pertanyaan ini - ini ditulis dengan sangat buruk.

Namun, saya menduga bahwa maksud dari pertanyaan ini adalah untuk menentukan ukuran kata instruksi untuk mesin. Mengingat data yang diberikan sangat tidak lengkap, ini harus sesuai dengan lebar bus data ; lebar bus alamat menentukan ukuran maksimum memori utama.

Dalam praktiknya, bidang "opcode" dari instruksi mesin yang diberikan seringkali jauh lebih kecil daripada instruksi itu sendiri, namun instruksinya mungkin lebih luas daripada bus data.

Motorola 68008 yang lama adalah contohnya - itu adalah versi yang dikurangi dari 68000 dengan bus data 8-bit, tetapi menggunakan kata-kata instruksi 16-bit yang sama, di mana biasanya 7 bit menentukan opcode (sisanya) mengidentifikasi sumber dan register tujuan, dan mode pengalamatan, yang semuanya harus dianggap operan , bukan opcode ). Jika Anda memasukkan bit mode pengalamatan ke dalam opcode, seperti yang dilakukan beberapa orang, itu membuat bidang opcode 10-bit secara total. Instruksi sebenarnya bisa jauh lebih lama dalam beberapa mode pengalamatan.

Chromatix
sumber
"sisanya mengidentifikasi register sumber dan tujuan, dan mode pengalamatan, yang semuanya harus dianggap operan, bukan opcode" ... yah, itu sedikit masalah pendapat. Untuk arsitektur RISC, itu jelas benar, tetapi dalam banyak kasus arsitektur CISC didefinisikan sedemikian rupa sehingga mungkin masuk akal untuk menghitung setiap kombinasi sebagai opcode terpisah. Z80 adalah kasus di titik - sementara banyak dari instruksi memiliki satu atau dua pilihan mendaftar dikodekan dalam bit opcode, mode pengalamatan sepenuhnya ad-hoc dan prefiks mengubah interpretasi ...
Jules
... keduanya menangani mode dan mendaftar dalam banyak kasus, yang membuat interpretasi register dari bitfield sedikit lebih mudah. Sebagian besar dokumentasi dan assembler tampaknya bekerja pada pemahaman, oleh karena itu, bahwa setiap kombinasi instruksi dan register adalah opcode terpisah, dan hanya nilai langsung dan nilai offset alamat tidak langsung yang benar-benar operan. Pandangan dunia ini dibagikan oleh pendahulunya, intel 8080, di mana format bahasa assembly standar telah diregistrasi oleh instruksi yang dikodekan sebagai bagian dari mnemonik, tidak diberikan sebagai argumen.
Jules
Benar - Z80 adalah tipikal CPU mikrokode 8-bit seperti itu. 6502 memiliki pemetaan opcode yang lebih logis yang memungkinkan sirkuit decode dioptimalkan. Tapi saya secara khusus berbicara tentang 68K, yang memiliki bidang pengalamatan mode dan tujuan-register yang sangat berbeda dalam instruksinya. Setelah mengurangkannya, bidang opcode masih bisa lebih luas dari bus data 68008.
Chromatix
1

Edson DeCastro mendesain komputer hampir persis seperti itu, PDP-8, dengan 15 alamat dan 12 jalur data.

Jadi jawaban untuk pertanyaan yang diposting adalah 574 op-kode, karena PDP-8 memiliki 284 op-kode, dan Ed hanya setengah gila.

Slartibartfast
sumber
2
Tidak yakin mengapa downvote - ini adalah jawaban yang bagus, mengingat pertanyaan itu pada dasarnya tidak ada artinya. :)
Jules
Saya menduga downvote adalah karena 284 * 2 = 568, bukan 574.
Markus