SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 本記事は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の解説をします。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
要求仕様4の実装例

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
VB.NETで学ぶ機械語の基礎連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3424 2010/04/27 12:04

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング