SHOEISHA iD

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

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

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

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

VB.NETで仮想CPUを作ろう(12)
- 機械語駆動式 関数電卓を作ろう!

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

ダウンロード VirtualCPU12.zip (384.9 KB)

 本記事はVB.NETの初歩的な記法だけを使って、簡単な機械語で動く仮想CPUの実装法を解説します。その過程を通じて、初心者でもバイナリプログラミングが楽しめることと、バイナリプログラミングの魅力を伝えたいと思っています。今回は今まで学習してきたことを試すために作成するアプリケーションの仕様を解説します。

はじめに

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

 今回は今まで学習してきたことを試すため、作成するアプリケーションの仕様を解説します。

これまでの連載

下準備

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

作成するアプリケーションの概要

 今まで学習してきた機械語と仮想CPUの知識をより強固なものにするためにアプリケーションを作ります。その名前は「機械語駆動式 関数電卓」です。なぜ電卓なのかは、一言で言うと開発の基礎が詰まっているからです。

 この連載の目的は、バイナリプログラミングの魅力を伝えることと、初心者の方の技術力向上に貢献することです。この目的にふさわしいアプリケーションについて考えるために、筆者は一度初心に帰って初心者のとき、どのような学習をしたのかを思い出しました。それで思いついたのが電卓です。

 電卓は一見とても簡単そうです。しかし、作ってみると分かると思いますが意外と難しいのです。プログラミング言語の基礎文法をフル活用し、電卓の動きを観察しながら実装していかねばなりません。その行為は基本的には実務と同じです。ですから、この連載の題材にふさわしいと筆者は考えました。

 前置きはこれぐらいにして本題に入ります。筆者はどうせ作るのならば、Windowsに付属している関数電卓とは違うものを作りたいと考えました。なので今回作成する電卓は一工夫します。そこで筆者が考えたのが機械語で動く関数電卓、名づけて「機械語駆動式 関数電卓」です。

 以降では、実際のソフトウェア開発を模倣してこの機械語駆動式 関数電卓を作成していきます。

要求仕様段階

 ソフトウェア開発の一番最初の段階では、作るものを明確化するために、要求をまとめてアプリケーションの仕様を定めます。そのやり方は色々ありますが、今回は機械語駆動式 関数電卓に必要な機能の要件(以降、機能要件)を列挙します。

  1. 現在の値と、これから指定する値のどちらも確認できるようにする。
  2. 指定する値と保存場所にレジスタを指定できるようにする。
  3. レジスタの他に自由な値を指定できるようにする。
  4. 2進、8進、10進、16進の4個の数値表現を扱えるようにする。
  5. 四則演算(加算、減算、乗算、除算)機能をつける。
  6. インクリメント、デクリメント、Moveが行えるようにする。
  7. 指定した機械語が確認できるようにする。
  8. 機械語の実行順序を利用者が変更できるようにする。
  9. 機械語の実行を柔軟に行いたいので、逐次実行・範囲実行・一括実行ができるようにする。
  10. 指定した機械語をバイナリ形式で保存できるようにする。
  11. バイナリ形式のファイルは、普通のテキストファイルのように扱えるようにする。

 これで、機械語駆動式 関数電卓の要求が固まりました。次は外部設計を行います。

 実際の開発ではもっと考えますが、あまり実務的に解説しすぎると面白くないので意図的に省略しています。

次のページ
外部設計

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

VB.NETで学ぶ機械語の基礎連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー