はじめに
本記事はVB.NETの初歩的な記法だけを使って、簡単な機械語で動く仮想CPUの実装法を解説します(※CPUにもいろいろありますが、この記事ではIntel社が製造しているCPUを対象とします)。その過程を通じて、初心者でもバイナリプログラミングが楽しめることと、バイナリプログラミングの魅力を伝えたいと思っています。
今回は第12回で課題とした機械語駆動式関数電卓の実装例を紹介します。これはあくまでも実装例であって、自分が実装したものと違うところがあっても、第12回で提示した設計の方針さえ合っていればよいので気にしないでください。
下準備
今回は前回の実装を拡張していきますので、あらかじめ第12回までの部分の実装を済ませておいてください。
要求仕様1の実装例
読みやすいように要求仕様1を再掲します。
「現在の値と、これから指定する値のどちらも確認できるようにする」
この仕様を満たすために必要なものは、IntelCpu型オブジェクトの変数です。この変数はこの機械語駆動式関数電卓(Calculator
クラス)全体で使用するので、フィールドとして宣言します。参照の追加でVirtualCPUプロジェクトを追加してから次のコードを記述します。
Imports VirtualCPU Public Class Calculator Private cpu As IntelCpu End Class
これで準備ができたので、後は適切なイベントが発生した時、適切な場所へcpu
変数のプロパティを表示するだけです。今回の場合は、RegisterComboコンボボックスと、ValueComboコンボボックスの選択項目が変わった時に、ResultLabelラベルか、ValueBoxテキストボックスに表示します。コードは次のとおりです。
'対象として指定された値を表示します Private Sub RegisterCombo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RegisterCombo.SelectedIndexChanged Select Case RegisterCombo.SelectedIndex Case 0 ResultLabel.Text = cpu.EAX.ToString() Case 1 ResultLabel.Text = cpu.EBX.ToString() Case 2 ResultLabel.Text = cpu.ECX.ToString() Case 3 ResultLabel.Text = cpu.EDX.ToString() End Select End Sub '値として指定された値を表示します Private Sub ValueCombo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ValueCombo.SelectedIndexChanged ValueBox.Enabled = False Select Case ValueCombo.SelectedIndex Case 0 ValueBox.Enabled = True Case 1 ValueBox.Text = cpu.EAX.ToString() Case 2 ValueBox.Text = cpu.EBX.ToString() Case 3 ValueBox.Text = cpu.ECX.ToString() Case 4 ValueBox.Text = cpu.EDX.ToString() End Select End Sub
これで要求仕様1については完了です。2と3は他の仕様を満たした後でないと理解しにくいので、2と3を飛ばして4の解説をします。