2025/12/04 6:16
8086 Microcode Browser
RSS: https://news.ycombinator.com/rss
要約▶
要約(≈300字)
486Tangリリース後、8086を忠実再現するため原始マイクロコードを逆アセンブルし、オンラインブラウザ化した。21ビットのμ命令はフィールド別にデコード・ツールチップ表示され、ジャンプ先はクリック可能。主な機能
- 命令別閲覧:300種命令リストから選択すると該当μcodeへ即ジャンプ。
- 統一エントリ:内部に約60ユニークのμcode入口のみ存在し、ナビゲーションが容易。
- 設計洞察:レジスタIDは文脈依存、IPは次フェッチアドレスを指すなど、当時のインテル的再利用性と一貫性欠如が浮き彫りになる。
本文
486Tangをリリースしてから、私は元のチップにできる限り忠実な設計で8086を再現する作業に取り組んできました。この探求は自然と、2020年にアンドリュー・ジェンナーが抽出し逆アセンブルしたオリジナルの8086マイクロコードへと深く入り込むことになりました。
すべてのマイクロコーディングCPUと同様に、8086はアセンブリ層の下で多くの微妙な動作を隠しています。その研究過程で膨大なメモを書き留めた結果、それらはさらに有用なものへと発展し、全ての8086マイクロコードROMを閲覧できるインタラクティブブラウザとなりました。これがオンライン8086マイクロコードブラウザです。
21ビットの各マイクロ命令は読みやすいフィールドにデコードされます。任意のフィールドにカーソルを合わせると、その機能を説明するツールチップが表示されます。全てのジャンプ先はクリック可能で、8086 μcode には驚くほど多くの間接ジャンプ・呼び出し・短い分岐が使われています。
「命令別に閲覧」機能は非常に便利です。
- ボタンを押すと約300個の文書化された8086命令リストが表示されます。
- 任意の命令を選択すると、ビューアが直接その μcode エントリポイントへジャンプします。
内部にはわずか60程度のユニークな μcode エントリルーチンしか存在せず、この機能によりそれらへのナビゲーションが容易になります。
8086 μcode に関するいくつかの面白い事実:
- レジスタ ID は文脈によって意味が変わります。たとえば 10100 はソースとして使う場合は SIGMA(ALU の結果)を指しますが、デスティネーションとして使う場合は tmpaL(一時的な ALU レジスタの下位 8 ビット)を指します。
- N と R は同じ物理レジスタです。
- 一方で SI は内部では IJ と呼ばれます——チップ内の命名は極めて一貫性がなく、進化的設計プロセスを反映しています。
- IP(PC) は次の命令を指しているわけではありません;実際には次にフェッチされるアドレスを指します。μcode は分岐や割り込みを処理するとき、IP を本当の次命令境界へ巻き戻す専用マイクロオペレーション CORR を使用します。
- ほぼ全ての算術命令は同じ4つの μinstruction(008–00B)を共有しています。実際の計算処理は、opcode や ModRM ビットに応じて異なる算術動作を行う単一のマイクロオペレーション XI によって行われます。この再利用度合いは優雅であり、まさに1978年のインテルらしさです。