Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

VB.NETで仮想CPUを作ろう(13)
- 機械語駆動式 関数電卓を作ろう! 解答編(前半)

VB.NETで学ぶ機械語の基礎 第13回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/01/23 14:00

ダウンロード VirtualCPU13.zip (448.7 KB)

 本記事はVB.NETの初歩的な記法だけを使って、簡単な機械語で動く仮想CPUの実装法を解説します。その過程を通じて、初心者でもバイナリプログラミングが楽しめることと、バイナリプログラミングの魅力を伝えたいと思っています。今回は12回で課題とした機械語駆動式関数電卓の実装例を紹介します。

目次

はじめに

 本記事はVB.NETの初歩的な記法だけを使って、簡単な機械語で動く仮想CPUの実装法を解説します(※CPUにもいろいろありますが、この記事ではIntel社が製造しているCPUを対象とします)。その過程を通じて、初心者でもバイナリプログラミングが楽しめることと、バイナリプログラミングの魅力を伝えたいと思っています。

 今回は第12回で課題とした機械語駆動式関数電卓の実装例を紹介します。これはあくまでも実装例であって、自分が実装したものと違うところがあっても、第12回で提示した設計の方針さえ合っていればよいので気にしないでください。

下準備

 今回は前回の実装を拡張していきますので、あらかじめ第12回までの部分の実装を済ませておいてください。

要求仕様1の実装例

 読みやすいように要求仕様1を再掲します。

「現在の値と、これから指定する値のどちらも確認できるようにする」

 この仕様を満たすために必要なものは、IntelCpu型オブジェクトの変数です。この変数はこの機械語駆動式関数電卓(Calculatorクラス)全体で使用するので、フィールドとして宣言します。参照の追加でVirtualCPUプロジェクトを追加してから次のコードを記述します。

Calculatorクラスの内容
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の解説をします。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • インドリ(インドリ)

    分析・設計・実装なんでもありのフリーエンジニア。 ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。 アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。 座右の銘は温故知新で、新旧関係なく必要だと考えた...

バックナンバー

連載:VB.NETで学ぶ機械語の基礎

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5