はじめに
本記事はVB.NETの初歩的な記法だけを使って、簡単な機械語で動く仮想CPUの実装法を解説します。CPUにもいろいろありますが、この記事ではIntel社が製造している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命令実装
- VB.NETで仮想CPUを作ろう (7) - ADD命令実装
- VB.NETで仮想CPUを作ろう (8) - SUB命令実装
- VB.NETで仮想CPUを作ろう (9) - INC命令&DEC命令の実装と命令長
- VB.NETで仮想CPUを作ろう (10) - MLU命令の実装とModR/Mについて
- VB.NETで仮想CPUを作ろう (11) - DIV命令の実装とイベント設計について
下準備
今回は前回の実装を拡張していきますので、あらかじめ第11回までの部分の実装を済ませておいてください。
作成するアプリケーションの概要
今まで学習してきた機械語と仮想CPUの知識をより強固なものにするためにアプリケーションを作ります。その名前は「機械語駆動式 関数電卓」です。なぜ電卓なのかは、一言で言うと開発の基礎が詰まっているからです。
この連載の目的は、バイナリプログラミングの魅力を伝えることと、初心者の方の技術力向上に貢献することです。この目的にふさわしいアプリケーションについて考えるために、筆者は一度初心に帰って初心者のとき、どのような学習をしたのかを思い出しました。それで思いついたのが電卓です。
電卓は一見とても簡単そうです。しかし、作ってみると分かると思いますが意外と難しいのです。プログラミング言語の基礎文法をフル活用し、電卓の動きを観察しながら実装していかねばなりません。その行為は基本的には実務と同じです。ですから、この連載の題材にふさわしいと筆者は考えました。
前置きはこれぐらいにして本題に入ります。筆者はどうせ作るのならば、Windowsに付属している関数電卓とは違うものを作りたいと考えました。なので今回作成する電卓は一工夫します。そこで筆者が考えたのが機械語で動く関数電卓、名づけて「機械語駆動式 関数電卓」です。
以降では、実際のソフトウェア開発を模倣してこの機械語駆動式 関数電卓を作成していきます。
要求仕様段階
ソフトウェア開発の一番最初の段階では、作るものを明確化するために、要求をまとめてアプリケーションの仕様を定めます。そのやり方は色々ありますが、今回は機械語駆動式 関数電卓に必要な機能の要件(以降、機能要件)を列挙します。
- 現在の値と、これから指定する値のどちらも確認できるようにする。
- 指定する値と保存場所にレジスタを指定できるようにする。
- レジスタの他に自由な値を指定できるようにする。
- 2進、8進、10進、16進の4個の数値表現を扱えるようにする。
- 四則演算(加算、減算、乗算、除算)機能をつける。
- インクリメント、デクリメント、Moveが行えるようにする。
- 指定した機械語が確認できるようにする。
- 機械語の実行順序を利用者が変更できるようにする。
- 機械語の実行を柔軟に行いたいので、逐次実行・範囲実行・一括実行ができるようにする。
- 指定した機械語をバイナリ形式で保存できるようにする。
- バイナリ形式のファイルは、普通のテキストファイルのように扱えるようにする。
これで、機械語駆動式 関数電卓の要求が固まりました。次は外部設計を行います。
実際の開発ではもっと考えますが、あまり実務的に解説しすぎると面白くないので意図的に省略しています。