通常の命令サイクルでは、フェッチ、デコード、実行が1つのサイクルを形成します。私の質問は、デコード手順についてです:デコードされる部分は何ですか?それは命令のオペコードですか?もしそうなら、なぜそれがエンコードされているのですか?
実際、私はdecodingを、セキュリティの分野でキーを指定してメッセージをデコードするのと同じようにここで理解しています。これは少し混乱します。
Decodeは、命令を解析してその意味を判別することを意味します。
一般的な命令は、オペコードと(通常)1つ以上の引数で構成されます。これらの引数は、特定のレジスタまたはメモリアドレスを参照するか、実行中に直接使用される即時値にすることができます。さらに、一部の命令にはプレフィックス(x86のLOCK
など)または機能コード(一部のMIPS命令のfunct
フィールドなど)があり、それらの機能を変更する場合があります。
デコード中、プロセッサは次のことを行う必要があります。
最新のプロセッサでは、これはパイプラインに複数のステージを必要とする複雑な操作になる可能性があります。このプロセスを高速化するために、専用キャッシュを使用して、頻繁に実行される命令のマイクロオペレーションを格納できます。
最新のプロセッサで高性能を実現するために使用される手法の詳細については、 この回答 をお読みください。
アセンブリ命令には、オペコードの他に、レジスタとアドレッシングモード(絶対、相対、自動インクリメントなど)を示すビットフィールドが含まれていることがよくあります。
デコードは、オペコードとその他のビットフィールドを解釈して、命令が何を操作するか、または他の方法で何を実行するかを決定するサイクルです。
概要:命令のオプションの詳細を把握します
例:0x90(10010000バイナリ)は通常、8086命令セットの場合、操作なしのNOP
と見なされます。
しかし、バイナリ10010reg(reg = 3ビット)、(0x90 + reg)として表されるXCHG
命令があります。これは、AX
命令を持つ16ビット交換レジスタです。 「reg」で示される3ビットは、交換するレジスタを定義します。
バイナリ000の「reg」は「レジスタAX
」を意味します。したがって、0x90は「AX
をAX
と交換」としてデコードしますが、これはあまり効果がありません。別名、操作なしNOP
命令とアドレス指定モードがデコードされます。命令+アドレッシングモードは、オペコードと、オペコードの直後のデータ(オペランド)で構成されます。
もしそうなら、なぜそれがエンコードされているのですか?
RAMの値を使用して、命令とアドレッシングモードを「表す」ためです。X=任意の命令+任意のアドレッシングモードであるスキームが存在する必要があります。ASCII/ Unicodeがスキームであるのと同様です。これは、数字、文字、および端末制御コードを「表します」。
可能な命令ごとにスイッチが1つあるマシンを使用している場合、デコード手順は必要ありません。これに相当する「RAM」は、8ビット(または他の)バイトのビットあたり1命令であり、複数のビットがオンの場合、すべての命令(および、そのうちの8つに制限されます)はで「起動」します。そのステップ。 60年代後半から70年代前半のPDPアセンブリは、これからそれほど遠くないと思います。
実際、ここでは、セキュリティの分野でキーを指定してメッセージをデコードするのと同じようにデコードすることを理解しています。
いいえ、MPEGデータを未加工のビデオデータにデコードするようなものです。未加工のMPEGデータを画面に直接描画することはできません。正確に何を意味するかを調べるには、処理して「展開」する必要があります。
オペコードは単なる数であり、n個の異なる可能性を列挙にパックします。適切なオペコードをアドレッシングモードとオプションから分離することに加えて、本当にこのオペコードを実装ハードウェアで実際の意味を持つ一連の制御ビットにデコードします。最新のCPUはさらに複雑で、1つのアセンブリ命令を複数のマイクロオペレーションに拡張する可能性があります。
YouTubeで「ゼロから」CPUを構築するためのビデオを見つけることができます。