ダウンロード VirtualCPU13.zip (448.7 KB)
本記事はVB.NETの初歩的な記法だけを使って、簡単な機械語で動く仮想CPUの実装法を解説します。その過程を通じて、初心者でもバイナリプログラミングが楽しめることと、バイナリプログラミングの魅力を伝えたいと思っています。今回は12回で課題とした機械語駆動式関数電卓の実装例を紹介します。
はじめに
本記事は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の解説をします。
この記事は参考になりましたか?
- VB.NETで学ぶ機械語の基礎連載記事一覧
-
- VB.NETで仮想CPUを作ろう(14) - 機械語駆動式 関数電卓を作ろう! 解答編(後...
- VB.NETで仮想CPUを作ろう(13) - 機械語駆動式 関数電卓を作ろう! 解答編(前...
- VB.NETで仮想CPUを作ろう(12) - 機械語駆動式 関数電卓を作ろう!
- この記事の著者
-
インドリ(インドリ)
分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
