前回の電子回路に続き、今回からはアセンブラす。
アセンブラ関連の授業を大きく分けると
- 16進数の考え方
- SH4マイコンのアーキテクチャ
- アセンブリ言語によるプログラミング
の3項目でした。順番に振り返っていきます。
■16進数 2の補数の概念について考える
まずは16進数に関する授業です。本訓練は全くのプログラミング未経験者も対象ですので、アセンブラでは当然必要になる16進数の考え方についても授業があります。
一応元SEということで、さすがに16進数は知ってるよ、という感じで油断してましたが、コンピューターでマイナスを表すための「2の補数」の考え方については、わかっているようで理解があいまいな部分もありました。
なぜ2の補数を取って足し算すると、結果引き算の答えになるのか等、結構頭の体操になりましたね。
■SH4マイコンのアーキテクチャ
次に、アセンブラの前にいきなりSH4マイコンのアーキテクチャの説明です。
いきなり、CPU、メモリだけでなく、SH4にはこんなレジスタがあって…、とかメモリマップはこうなって…というように、結構細かい内容まで説明がありました。
わたし個人としては、マイコンのアーキテクチャにも興味があったので面白かったのですが、未経験者にとってはどうだったんでしょう…。人によってはかなり敷居の高い内容と感じたのでは、と少し心配になりました。
アセンブラについてはかなりのスパルタ教育で進める感じでしたね。
まあ、アセンブリ言語については、最悪授業についてこられなくても、実業務でアセンブリ言語を使うケースはあまりないということで、職業訓練側も割り切ってるような気もします。
■アセンブリ言語
で、いよいよアセンブリ言語です。
アセンブリ言語のプログラミングは本訓練ではHEW (High-performance Embedded Workshop)という統合開発環境で行いました。
Hewとはルネサスが提供する統合開発環境です。組込み関連の開発では業務でも広く使われているもののようです。
各マイコンの挙動をエミュレートする機能もあるので、SH4のようなマイコン実機がなくても、HEW上でアセンブリのソースのコンパイル、リンク、実行が可能です。
本訓練でもアセンブリについては特に実機は使わず、HEW上でSH4をエミュレートして訓練を進める形でした。
このHEWというのは体験版でも作成できる実行ファイルの大きさに制限があるだけで、他の機能は商用と同様で使えるようです。なのでダウンロードして家のPCでHEWを使うことも可能です。私もルネサスのアカウントを作って、家のPCにHEWを入れて動作確認したりしました。
■アセンブリ言語でのプログラミングはパズルのよう
実際にアセンブリ言語でプログラムを組んでみると、高級言語に慣れた私にとっては非常に組みづらいです。
普通の言語ならループ処理や条件分岐などはforやifで簡単に書けますが、アセンブリの場合、ループ用のレジスタを用意して、分岐用のラベルを用意して、…というようにかなり生産性が落ちます。
アセンブリで処理を考えていると、何かプログラミングというよりパズルを解くような感覚に陥りました。 この辺の感覚はアセンブリに慣れてくるとまた変わってくるのかもしれません。
また、改めて思うのが、以前も紹介した書籍 CPUの創りかたがおすすめ本だということです。
この本を読めば、なぜこんな処理の書きにくいアセンブリ言語なるものが存在するかもわかるようになってるんですよね。
■アセンブリで競馬ソフトを作った人もいます
あとは余談になります。昔のMS-DOSの有名な競馬ソフトにTARGETというのがあるのですが、このTARGETはほぼアセンブリ言語で作られているそうです。
当時からこの話は、ある意味伝説的に言われてましたが、実際に自分でアセンブリ言語によるプログラムを経験してみると、あの複雑な競馬ソフトをアセンブリで作ったということに驚かされます。
ちなみにそのTARGETは今はWindows版として競馬関係者も使うデファクトスタンダード的なソフトウェアになってます。
(参考)
Target Frontier JV: コンピューター競馬活用術
■アセンブリ言語プログラミング、面白い経験ができました
普通にSEをやっていると、アセンブリ言語を見るのはせいぜいダンプ解析をする時くらいで、がっつりアセンブリでプログラムを書くというような経験はなかなかできません。
ある意味貴重で、面白い経験をさせてもらいました。
ただ学んだアセンブリ言語が実業務でどれだけ役立つかは?ですが…。
次回からはいよいよC言語に入ります。