SHOEISHA iD

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

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

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

VB.NETで仮想CPUを作ろう (4) - テストドライバの改良

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

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

ダウンロード VirtualCPU4.zip (213.5 KB)

本稿では、VB.NETを利用し、簡単な機械語で動く仮想CPUを作ることでバイナリプログラミングを満喫します。実際の業務で直接使えるケースは少ないと思いますが、デバッグやプログラミングの地力向上に役立つでしょう。今回はテストドライバを改良して、以降、楽しく効率的に機械語を実装するための基盤を整えます。

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

はじめに

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

 前回は、仮想CPUの動きが目に見えるように実装しました。今回はそのテストドライバをさらに改良して機械語の実装を行いやすい環境を整えます。

これまでの連載

下準備

 今回は前回の実装を拡張していきますので、あらかじめ前回までの部分の実装を済ませておいてください。後は専門用語とCPU構造の確認のため、第1回で用意した3つのIntel社のマニュアルをすぐ読める状態にしてください。

 それに加えて、中巻 B: 命令セット・リファレンス N-ZのA-6とA-7ページを印刷しておくことをお勧めします。絶対に必要なことではありませんが、この表をあらかじめ印刷しておき、その紙を参照しながら実装作業をすると効率がよくなります。

テストドライバの利便化

 前回仮想CPUを可視化することができました。今回はそのテストドライバをより便利なように改良していきます。

 まず改良するべきところはMoveDataButton_Clickメソッドです。次の抜粋を見てください。

Select Case RegisterCombo.SelectedItem
    Case "EAX"
        cpu.EAX = value
        ShowEaxRegisters()
    Case "EBX"
        cpu.EBX = value
        ShowEbxRegisters()
    Case "ECX"
        cpu.ECX = value
        ShowEcxRegisters()
    Case "EDX"
        cpu.EDX = value
        ShowEdxRegisters()
End Select

 現状ではこのように内容を更新したレジスタに合わせて、いちいちShowEaxRegistersなどのメソッドを呼んでいます。前回はレジスタの内部を見るだけだったのでよかったのですが、以降、複数の機械語を実装していくのに問題が生じてきます。

 それは、「呼び出しを忘れたり間違ったりする」ことが十分にありえるからです。テストを効率化するためのテストドライバの間違いで時間を費やすのは無駄以外の何物でもありません。

 まずは、レジスタの値が変更されたら自動的にIntelCpuクラスがそれを通知するように改良します。このような形態をイベント駆動型プログラミングと呼びます。この名前を聞いたことがない人がいるかと思いますが、実はすでに行っているはずです。

 イベント駆動型とは、「ボタンがクリックされたら処理をする」といった、VBを使用している人ならば日常的に行っているスタイルのことです。ですから身構えず、気楽にこれ以降を読み進めてください。

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

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

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

メールバックナンバー

次のページ
RegisterValueChangedEventArgsクラスの定義

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

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

もっと読む

この記事の著者

インドリ(インドリ)

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング