ダウンロード 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を使用している人ならば日常的に行っているスタイルのことです。ですから身構えず、気楽にこれ以降を読み進めてください。
この記事は参考になりましたか?
- この記事の著者
-
インドリ(インドリ)
分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
