8086は16ビット命令を使用していますが、RAMアドレスは8ビットしか保持していません。 1つのアドレスをロードして、命令が1/2/3バイトを必要とするかどうかをチェックし(例えば、レジスタを8/16ビットに直接移動する)、操作を実行するか、1つのRAM 'space'が16ビッグビッグですか?RAMからのプログラムの読み込み8086
答えて
多くの命令はマルチバイトであり、複数の命令は2つ以上のアドレスにまたがることを意味します。
メモリバスは16ビットなので、1回の操作で16ビット(2つの隣接アドレス)をロードできます。あなたは、バイトアドレス可能なメモリとバスの幅を混同しています。
それは一つのアドレスをロードし、その命令は1/2/3バイト(例えばレジスタ8/16ビットにすぐに移動)
を必要とする場合には、継続的に命令バイトをフェッチチェックしません6バイトのバッファー(16ビットバスの16ビットCPUなので、一度に2バイト)。バッファは、最大許容8086命令(IDKとは別にデコードされる可能性のある接頭辞を除く)を保持するのに十分な大きさです。直前の命令の実行が終了すると、バッファを調べます。より詳しい説明については、下のリンクを参照してください。おそらく、バッファ全体を命令としてデコードしようとします。命令の終了を検出する前にフェッチバッファの最後にヒットした場合、次のフェッチサイクルが完了するまで待機し、再度試みます。
参考:8086 CPU architecture、これは「8086コードフェッチ」の最初のヒットです。それはフェッチと実行が重複することを確認するので、最も基本的な方法でパイプラインされます。
TL:DR:デコードする命令が完全になるまでバッファにフェッチします。その後、次の命令の一部であるため、余分なバイトはバッファの先頭にシフトされます。
私は通常、命令フェッチが8086のボトルネックであることを読んだので、コードサイズの最適化は他のほとんどすべてを上回っています。
パイプライン処理されたCPUは、復号化を開始するために前の命令の実行が完了するのを待つ必要はありません。現代のCPUもであり、多くの場合、は帯域幅の多いコードフェッチであるため、デコードされた命令のキューが用意されています(ブランチがこれを混乱させる場合を除いて)。とx86タグwikiのその他のリンクを参照してください。
また、非常に一般的な命令の1つは、push r16
のような1バイトです。
私は、私の古いお気に入り[** The Art of Assembly Sect 3.3.7 **]のデコードの雑草に入ることができると思います(https://courses.engr.illinois.edu/ece390/books/artofasm/CH03 /CH03-3.html#HEADING3-102)。これはデコードの概要です。 –
速いとポイントの答えに感謝します。 –
8086のプリフェッチキューはわずか6バイトでしたが、命令の長さに制限はありませんでした。あなたは、あなたが望むように多くの冗長プレフィックスを使用することができます.15バイトの制限が '386'で追加されました。冗長なプレフィックスがなければ、命令は6バイトを超える可能性があります。例えば、 'mov [es:0]、1234'は7バイトです。しかし、接頭辞がまったくなくても、8086命令が6バイトを超えることはできないと思います。私の推測では、プレフィックスバイトは別々にデコードされ、個々の命令と同じように個別にデコードされていました。 –
- 1. 読み込み、RAM VHDL
- 2. Python:大容量のファイル読み込みストア操作書き込みプログラムでのRAM使用量の削減
- 3. 異なるプログラムからの文字列の読み込み
- 4. プログラムでwin32のダンプファイルからメモリを読み込みます
- 5. C++でRAMからファイルに直接データを読み込む
- 6. RAMからCSVファイルを読み取る
- 7. 別のプログラムのあるプログラムからstdoutを読み込む
- 8. ファイルからバイト[]を読み込み、読み込みます
- 9. iOSのスレッドエラーテキストファイルからの読み込み
- 10. dbからのビューの読み込み
- 11. ファイルからの蟻の読み込み?
- 12. テキストファイルからのJavaの読み込み
- 13. k6のファイルからの読み込み
- 14. Cのファイルからの読み込み
- 15. PySparkのURLからの読み込み
- 16. Javaのテキストファイルからの読み込み
- 17. UTF8からのファイルの読み込み
- 18. iframeのリソースファイルからの読み込み
- 19. AngularJSのデータベースからの読み込み
- 20. xibからカスタムUIViewをプログラムで読み込み
- 21. ファイルから動的にリソースをプログラムに読み込み
- 22. AJAX読み込みページ内の別のページからdivを読み込み
- 23. XMLファイルからの読み込みC#
- 24. ファイルからの読み込み(python)
- 25. レジスタからの読み込みUnity 3d
- 26. PYSPARK:RDDからの読み込みエラー
- 27. java InputMismatchExceptionファイルからの読み込み
- 28. Highchards - dbaseからのデータ読み込み
- 29. テキストファイルからの読み込み
- 30. c:ファイルからの読み込み
実際にはRAMは24ビットです。これは、セグメントレジスタとオフセットで整列された段落の理由です。 8ビットアドレスを指定すると、セグメントレジスタがベースであるとみなされます。 –