マイクロプロセッサーのオペコードの最大数


13

ここに画像の説明を入力してください

質問のオペコードの最大数は何ですか、答えはcオプションですが、各アドレスが各メモリ位置を指定するため、オプションアドレスdであると思います。これは、16個のアドレス行があるため、2 ^ 16アドレス、つまり2 ^ 16のメモリ位置。

したがって、各場所に1つのオペコードが含まれる場合、合計2 ^ 16個の場所に2 ^ 16個のオペコードが含まれ、これは最大数のオペコードですが、答えはcとして与えられます。これは2 ^ 12です。これはどのように可能ですか?


7
問題は、可能な限り最大のプログラムを構成できる命令の数ではなく、ISA内の異なるオペコードの数を尋ねることです。
ブライアンドラモンド

5
@BrianDrummond-しかし、その解釈では、普遍的ではないISAの動作方法について仮定を立てる場合にのみ意味があります。たとえば、Z80には8ビットのデータバスがありますが、800バイトの有効なオペコードの領域にあります-プレフィックスバイトを使用して利用可能な操作を拡張および変更するためです。
ジュール

15
この本で述べられている質問は意味をなしません。バスサイズとオペコードサイズの間には、固有の直接的な対応関係はありません。JVMは32ビットデータモデルに基づいていますが、8ビットのオペコードがあります。
クリリス

10
この質問は、質問で与えられた以上の多くの情報がない限り、一貫性がありません。答えを得るには、プロセスの特性について多くの仮定を立てる必要があります。これは、大多数の実世界のプロセッサには当てはまりません。
デビッドシュワルツ

14
質問はでたらめです。必要に応じて、命令オペコードは複数のメモリワードにまたがることができます。固有の制限はありません。
ホットリック

回答:


31

すべてのオプションが間違っています。プロセッサが実行できる(一意の)オペコードの最大数は、バス幅によって制限されません。


通常、12ビット以上のCPUは、ほとんどの命令を一度に読み取ることができるように、データワードごとに1つのコマンドを持つように設計されています。したがって、通常のCPUは2 ^ 12オペコードの制限まで設計されます。

2 ^ 12 = 4096を超えるオペコードを持つ既存のCPUアーキテクチャは、学習するのに多すぎる、実際に役立つには多すぎる、コストのかかるシリコンスペースを浪費するなど、それほど多く必要としないという理由で非常にまれです。

更新:コメントで指摘されているように、x86命令セットのすべての可能なバリエーションは、カウント方法に応じて実際に6000を超える可能性があります!ただし、これは例外です。

ただし、4ビットCPUの場合、2 ^ 4 = 16命令では十分でないことが非常に多いため、このようなプロセッサの多くにはさらに多くの命令があります。

CPUがデータバスに収まるよりも多くのオペコードを組み込む可能性のある複数の方法と理由があります。

単語にまたがる指示

プロセッサは、単一のデータサイクルでコマンドを読み取る必要はありません。結果として複数のサイクルを使用できます。実際、ほとんどのCPUはそうではありませんが、オペコードスペースを拡張するためではなく、命令引数としてより一般的に使用されています。

例:intel 4004には、データ/アドレスライン、4ビットデータワードとして多重化されている4行のみがありますが、8ビット命令では40以上のオペコードがあります。

プレフィックスとサフィックス

(CISC)プロセッサには、必要な数の命令プレフィックスとサフィックスが含まれる場合があります。

それらは実際の命令の前に付けられて、その動作を変更します-少しまたは完全に。

「一意のオペコード」の定義に依存します。データではない命令の一部がオペコードの一部であると想定した場合、その総数には考えられるすべてのバリエーションが含まれます。ただし、これらの接辞は指導の別個の部分であると考える人もいます。

例:Intel x86 CPUには実際には4Mオペコードがありません。ただし、すべてのプレフィックスをオペコードの一部として数えると、最新のCPUでは15バイトまでの命令が許可されます。これは可能なオペコードの多くです。多くの人が同じことをしますが、これは「一意」であるという定義に依存します。

モード

プロセッサには、完全に異なるオペコードのセットを持つ複数の動作モードがある場合があります。

例:intel x86_64には32ビット(real / v86 / protected)モードと64ビットモードがあり、それぞれに異なるオペコードがあります。ARM CPUには、ARM 32ビットモードとThumb 16ビットモードがあります。

バスビット多重化

質問には「データライン」と「アドレスライン」が記載されていますが、内部データバスと内部アドレスバスの両方が実際のバスラインの量よりも広い場合があります。

多重化されたバスデータは、順番に送信されます。つまり、前半、後半です。CPUはそれをフルサイズの内部レジスタに保存し、それらを操作します。

これは、コストやチップの物理的フットプリントサイズを削減するためによく行われます。

例としては、LPCデータバス上のインテル4004や、32行のデータバスしか持たないNintendo64のCPUであるNEC VR4300などがあります。

パラレルバスなし

前のポイントの続きとして、CPUはパラレルバスをまったく公開する必要さえありません。

CPUは、I2C、SPIなどのシーケンシャルバスのみを簡単に公開できます。

そのような専用CPUを製造することはおそらくそれほど費用対効果が高くありませんが、多くの低ピン数のマイクロコントローラー(CPUとメモリの両方を含む)は、それらの貴重なピンをより有用なものに保存するために作成されます。たとえば、atmel ATTINY4 / 5/6/10チップには、合計6ピン、電源用に2ピン、リセット用に1ピン、汎用ピンが3つしかありません。命令は、独自の3行インターフェースを介して順次送信されます。

マイクロコントローラの定義に応じて、マイクロプロセッサと見なすか、マイクロプロセッサとして動作するようにプログラムすることができます(つまり、1つまたは複数のシーケンシャルバスで専用CPUをシミュレートします)。

この質問は、ある種のデータバスが公開されていることを明確に示していますが、パラレルバスであることは示していません。理論的には、12ラインのデータバスは、1つのシリアルデータラインと11の補助/グランド/ステータスラインで構成できますが、おそらくそれはあまり健全な考えではないでしょう。

専用命令バス

実際、プロセッサは、データと同じバスラインで命令を受け入れる必要さえありません。

これは、ALUがマイクロプロセッサの一部ではなくディスクリートチップであったが、現在ではほとんどの場合経済的に実行可能でない場合に容易に起こり得ます。

しかし、命令のためだけの専用線でCPUを実装することを妨げるものは何もありません。このようなCPUは、単一の操作をデータの配列(SIMD)で実行する必要がある場合に役立ちます。

命令バスの幅は完全に任意なので、可能な最大オペコードカウントも同様です。


4
注目点として、x86-64では、あなたが(尋ねる人に応じて、1000年と6000オペコードの間で持っている123)。
LMS

それらを数えようとさえしなかったが、すべてのバリエーションでそれは理にかなっている。
ジャックホワイト

13

オペコードの最大数は、実際にはいくつかの方法で考えることができます。

  • 一意のオペコードの最大可能数。

これは、データバス幅ではなく、命令幅から収集できます。通常、オペコードは単一のメモリアクセスに収まり、答えは2 ^ 12です。しかし、プロセッサはマルチサイクルオペコードデコードプロセスを実装して、可能なオペコードの数を2 ^ 12を超えて拡張できます。

  • プロセッサが直接アドレス指定できる命令(オペコードを含む)の最大数。

プロセッサが直接アドレス指定できる命令(オペコードを含む)の最大数は、アドレスバス幅(2 ^ 16)によって制限されます。ただし、間接的にプロセッサはより多くのメモリをアドレスすることができます。たとえば、オペコードは、ページスワップまたは別のソースから命令をフェッチする同様の操作を容易にすることができます。


2
問題はそれほど曖昧ではありません。2番目のポイントとして解釈されることになっている場合、「格納/アドレス指定/ ...できる命令の最大数」として定式化されます。「オペコード」という言葉は、アドレス可能な範囲ではなく、命令セットに関するものであることをかなり明確にします。
SEの薄暗い失われた信仰

11
マルチワードのオペコードは非常に可能性があると言及したため、+ 1です。そのため、質問はあまり良いものではありません。
スペロペファニー18

2
英語を母国語とする人は、しばしば、彼らが使用する単語の意味を理解するのを難しくするような偏見を持っています。英語を話す外国人がそれを読んだり聞いたりすると、2番目の(意図した)意味が得られないことがあります。学生が新しい表現を学習する場合も同じことが当てはまります。定式化があいまいな場合、誤解されやすいです。そのため、生徒は各命令にオペコード部分が含まれていることを知っていると思います。はい、そうです。本当に、質問01.の文言はあいまいです。
HKOB

4
@SpehroPefhanyうん、質問はそれ以上の文脈がなければ間違いなく曖昧です。OPが、命令の長さに関係なく、最初のメモリアクセスでオペコードがフェッチされることを教えられた場合、答えは(c)であり、そうでない場合、答えられません。要点は、OPは彼の EE.SE質問に十分な背景を与えましか、それとも彼の教師は当たり前の何かを与え、曖昧な質問を作成しましたか?
ロレンツォドナティは、モニカをサポートします

1
@SpehroPefhany真:)しかし、英語が-おそらく彼らの穏やかな苛立ちに-また、国際英語の世界(の一部であるbbc.com/capital/story/...
HKOB

4

あなたはこの質問に混乱するのは正しいです-それは非常にひどく書かれています。

ただし、この質問の目的は、マシンの命令語サイズを決定することだと思います。提供されるデータが非常に不完全な場合、これはデータバスの幅に対応する必要がありますアドレスバスの幅によって、メインメモリの最大サイズが決まります。

実際には、特定のマシンの命令の「オペコード」フィールドは多くの場合、命令自体よりもかなり小さくなりますが、命令はデータバスよりも広い場合があります。

古いMotorola 68008はその典型例です。8ビットデータバスを備えた68000のコスト削減バージョンでしたが、同じ16ビット命令ワードを使用しました。通常、7ビットがオペコードを決定します(残りソースとデスティネーションのレジスタ、およびアドレス指定モードを識別します。これらはすべてopcodeではなくオペランドと見なされる必要があります)。オペコードにアドレッシングモードビットを含めると(一部のように)、合計10ビットのオペコードフィールドが作成されます。一部のアドレッシングモードでは、実際の命令が大幅に長くなる場合があります。


「残りはソースとデスティネーションのレジスタ、およびアドレス指定モードを識別します。これらはすべてオペコードではなくオペランドと見なされる必要があります」...それはちょっとした意見の問題です。RISCアーキテクチャの場合、これは明らかに真実ですが、多くの場合、CISCアーキテクチャは、各組み合わせを個別のオペコードとしてカウントするのが理にかなっているようなアドホックな方法で定義されています。その命令の多くは、1つのまたは2つのレジスタの選択は...アドレッシングモードは完全にアドホックであり、接頭辞はの解釈を変更し、オペコードのビットで符号化されているが- Z80はポイントでケースです
ジュール・

...多くの場合、アドレッシングモードとレジスタの両方。これにより、ビットフィールドからのレジスタの解釈が簡単になります。したがって、ほとんどのドキュメントとアセンブラは、命令とレジスタの各組み合わせが個別のオペコードであり、即値と間接アドレスオフセット値のみが実際にオペランドであるという理解に取り組んでいるようです。この世界観は、その前身であるインテル8080によって共有されています。インテル8080では、標準アセンブリ言語形式では、引数としてではなく、ニーモニックの一部としてエンコードされた命令によって操作されるレジスタがありました。
ジュール

True-Z80は、8ビットマイクロコード化されたCPUの典型です。6502には、デコード回路を最適化できる、より論理的なオペコードマッピングがありました。しかし、私は具体的に68Kについて話していました。68Kには、命令に非常に明確なアドレス指定モードと宛先レジスタのフィールドがあります。それらを差し引いた後でも、オペコードフィールドは68008のデータバスよりも広い可能性があります。
Chromatix

1

エドソン・デカストロは、15のアドレスと12のデータ行を備えたPDP-8とほぼ同じコンピューターを設計しました。

そのため、PDP-8には284個のオペコードがあり、エドは半ばクレイジーなので、投稿された質問に対する答えは574個のオペコードです。


2
ダウン投票の理由がわからない-質問が本質的に無意味であることを考えると、これは他と同じくらい良い答えです。:)
ジュール

ダウン投票は574 * 2ではなく284 * 2 = 568であると思われます。–
マーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.