SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

VB.NETで仮想CPUを作ろう (3) - 仮想CPUのGUI化

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

ダウンロード VirtualCPU3.zip (193.3 KB)

テストドライバの内容

 重要なポイントは、TestFormのLoadイベントと、MoveDataButtonのClickイベントの2か所です。

 Loadイベントでは、テスト対象となるIntelCpuオブジェクトの用意、エラー防止のための工夫、レジスタの値を見やすくするための準備の3つを行っています。コードは次のとおりです。

Private Sub TestForm_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load

    'テスト対象となるIntelCpuオブジェクトを用意する
    cpu = New IntelCpu()

    'エラーを防止するために、レジスタが必ず選択されている状態にする。
    RegisterCombo.SelectedIndex = 0

    '値を見やすくするための設定
    format = New NumberFormatInfo()
    format.NumberDecimalDigits = 0
End Sub

 MoveDataButtonのClickイベントは、RegisterTextに入力された値をレジスタに送る処理をしています。

 最初は、次のIf文で選択されたレジスタを判定しています。

If RegisterCombo.SelectedItem(0) = "E" Then

 ポイントはダブルワード(32ビット)レジスタは名前の先頭がEになっていることと、1ワード(16ビット)レジスタは一番最後の文字がXになっていることです。それ以外は必ず1バイト(8ビット)のレジスタとなります。

※注
 これは32ビットCPUの場合です。64ビットのCPUでは少し異なります。

 次に行っているのは、入力された文字が正しいのか判定して、正しくない場合はエラーを表示することです。それは次のIf文で行っています。

If UInteger.TryParse(RegisterText.Text, value) = True Then

 このTryParseメソッドは、指定された文字が正しい数値ならばvalue変数に値を設定し、正しくない場合はFalseを返すメソッドです。このメソッドを使用すれば、簡単に入力された文字のエラーチェックが行えるので便利です。実務でも必要な場面が多々ありますので、このメソッドは覚えておいて損はありません。この機会にぜひ習得してください。

 最後に行っているのは、IntelCpuオブジェクトに値を代入して、その最新の値を10進表記と16進表記で表示することです。「レジスタは入れ子状態になっているので」ShowEaxRegistersなどのメソッドで、関連しているレジスタ値の表示を更新していることに注目してください。これがこのテストドライバの特徴です。例えば、EAXの値を4万以上の値で更新して確認してください。そうすれば、AX、AH、ALの値も更新されます。

 初心者の方はMoveDataButton_Clickメソッドが長くて難しく感じがちですが、大まかな流れさえつかめば単純な処理の集まりであることが分かります。このように簡単なプログラム集まりが難しく感じる場合が実務でもありますが、慌てず大まかな流れをつかむようにします。そうすればおのずと分ってきます。

 これでテストドライバの作成は終わりです。実際に実行して、いろいろな値を設定してみてください。そうすれば、CPUのレジスタの動きが視覚的に確認できます。

まとめ

 いかがだったでしょうか? 今回はついにCPUの大まかな動作を実装し、仮想CPUの動きを視覚的にテストするための準備を行いました。その中で実務でも役に立つテクニックをなるべく提供するべく工夫しました。

 GUIのテストドライバで1つ注意点があります。実務ではこういった視覚テストよりもプログラムによる単体テストをするのが一般的だと思います。しかしながら、趣味で楽しくプログラミングする際には必ずしも実務にすべての作業を合わす必要はありません。実務と同じにするのではなく、いかに楽しく学習するのかを工夫をしましょう。そうすれば、楽しく学習を続けられて技術力を向上させられますし、どんな高度な技術でも高いモチベーションで学べば習得できます。

 この記事により、一見地味で面白みを感じづらいバイナリプログラミングでも、楽しく、なおかつプログラミング技術の向上につなげられることが伝われば幸いです。

 次回は、機械語の動作を実装することにより、CPUの動作の細部を実装していきます。今回、GUIで動作確認できるようになったので、次回以降さらに面白くなってくるでしょう。お楽しみに。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
VB.NETで学ぶ機械語の基礎連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2769 2010/04/27 12:00

イベント

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

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

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

メールバックナンバー