はじめに
この連載ではVB.NETの初歩的な記法だけを使って、簡単な機械語で動く仮想CPUの実装法を解説します(※CPUにもいろいろありますが、この記事ではIntel社が製造しているCPUを対象とします)。その過程を通じて、初心者でもバイナリプログラミングが楽しめることと、バイナリプログラミングの魅力を伝えたいと思っています。
今回はADD命令の実装を通じてCPUの理解を深めます。
これまでの連載
- VB.NETで仮想CPUを作ろう
- VB.NETで仮想CPUを作ろう (2) - レジスタの実装
- VB.NETで仮想CPUを作ろう (3) - 仮想CPUのGUI化
- VB.NETで仮想CPUを作ろう (4) - テストドライバの改良
- VB.NETで仮想CPUを作ろう (5) - CPUの基礎動作の実装
- VB.NETで仮想CPUを作ろう (6) - MOV命令実装
下準備
前回の実装を拡張していきますので、あらかじめ前回までの部分の実装を済ませておいてください。後は専門用語とCPU構造の確認のため、前回用意した3つのIntel社のマニュアルをすぐ読める状態にしてください。
それに加えて、『中巻 B: 命令セット・リファレンス N-Z』(PDF)のA-6とA-7ページを印刷しておくことをお勧めします。絶対に必要なことではありませんが、この表をあらかじめ印刷しておき、その紙を参照しながら実装作業をすると効率が良くなります。
前置き
まずは、四則演算について説明します。機械語で四則演算をするには、ADD(加算)、SUB(減算)、MUL(乗算)、DIV(除算)の四個の命令が用意されています。今後の連載では、この四個の命令を実装していきます。
今回はADD命令を実装していきます。
ADD命令実装の大まかな流れ
ADD命令を実装するには、バイナリから命令を判別するためのSearchOpeCodeMap
メソッドと、実行部分を実装したExecuteCommand
メソッドに、少し変更を加え、ADD命令そのものを実装するためにAdd
メソッドを追加します。そして最後に、IntelCpuクラスの利便性を良くするための工夫をします。