アセンブラ=低水準/低級言語って何? ”忘れ去られた“言語!?
“アセンブラ”のお話です。
Java、C#、PHPなどの高級言語を使い統合開発環境で効率的にソフトウェアを開発している現在は、可視性を考慮したコーティング規約などを守りながら効率よく開発を行っています。そんななかでも、80年台の後半では史上初の高水準言語FORTRAN(フォートラン)やBasic、アセンブラ、C言語など主流だったと記憶しています。
今回は、その一つである『アセンブラ』とちょこっと関わることになった私のお話しです。
当時の私は制御系の組込み(マイコン)のチームに属していました。それがアセンブラとの出会いでした。
命令は数も少なくシンプルですが、先輩がデバックしているのを見て…、16進のdump(ダンプ)データを見て…、プログラムの修正を機械語でパッチしているのを見て…、
「こんなの絶対無理!」と泣きそうになったのを今でも鮮明に覚えています。
そんな状況であった私ですが、アセンブラを通じてハードウェアの知識、CPUや周辺チップの制御を学ぶことができました。
CPUが動作する0と1の機械語を人がわかるようにしているプログラム言語がアセンブラです。CPUの動作やハードウェアの勉強をする上で非常に有益です。命令文が必要最低限しかないため、いろいろな試行錯誤でプログラムを構築していく必要があります。OSと高水準言語などのおかげで、楽にいろいろなアプリを作れる時代は理にかなっていると思いますが、全く新しいアルゴリズムを考えてコーディングとなると、簡単には習得できません。
組込みの世界では、OSやドライバーの役割、通信やアプリなどをすべて作る必要がありました。
例えば押されたキーを画面に表示するのは、もっとも簡単なプログラムですが、それを
OSなしの世界+アセンブラ で実現するのは容易ではありません。
キーが接続されているポートを一定周期でスキャンして、どのキーが押されているのか判断をします。その際に信号が断続を繰り返す現象がおこるため、一定時間をまってキーが押されたのか?長押しされたのか?のプログラムが必要となります。こうなると、画面表示も簡単には出せません。
周波数を制御するために、小数点の割り算を足し引き算とビット操作しかできなく、プログラム容量の制限など、制約だらけの中、コーディングしましたが、決められた時間内に計算を終わらすことは容易ではなく、何度もロジックを考え直して、試行錯誤しました・・・
Cなど高級言語なら単なる割り算の実行だけです(涙)。対して、アセンブラは難しいアルゴリズム/ロジックや論理的思考、それらを鍛えるのに非常に役立ったと思います(笑)。
初期のCから実装されているインラインアセンブラで試されてはいかがでしょうか?
C言語のコード中にアセンブリ言語を記述するには__asmキーワードを使います。
asm サンプル
#include <stdio.h>
int main(void) {
int cnt;
__asm mov cnt, 0x1F
printf(“cnt=%d\n”, i);
return 0;
}
ぜひ、試してくださいね。
このまま消えて行かずに教育用とかで用途を見出してほしいと切に願っています。
連絡先:treee事務局
e-mail:info@treee.work