Small-Cは、8ビットパソコン向けの簡略化されたC言語で、この本は、Small-Cの開発者自身の著書の、日本語訳です。
本について
発行日は昭和60年(1985年)7月10日初版発行、昭和63年6月25日第1版第2刷発行。
内容としては、まずはインテルの8080というプロセッサについて、レジスタの構成やスタックの仕組みなどCPUの初歩が書かれます。
そして、マシン語からアセンブリ言語へと話が進み、さらに、プログラムをリロケータブルにするということまで触れられます。
リロケータブル(relocatable、再配置可能)というのは、プログラムをメモリ上のどの位置に読み込んでも実行可能にすること。
例えば、プログラムがアドレス3000に読み込まれ、アドレス3010のデータを読み込む、という命令があったとします。
ここでもし、プログラムがアドレス5000に読み込まれたら、読み込むデータは、アドレス3010ではなく、アドレス5010にあることになります。
であれば、データを読み込む命令上のアドレスも、3010から、5010に書き換えないといけません。
リロケータブルにするということは、そのアドレス書き換えのための仕組みを備える、ということです。
基本的なところから順を追って書かれているので、教科書として読んでもよさそうな本です。
Small-Cについて
Small-Cは、広く使われるプログラミング言語であるC言語の、サブセット版。簡単に言えば、8ビットパソコンで使える小さいC言語です。
Small-Cの発表が1980年、この本に載っているのは、バージョン2.1とのこと。
フルセットのC言語(ただし、ANSIで規格化される前の、旧い仕様)と比べて、異なるところはいろいろありますが、目に付いたところだけ取り上げてみます。
- データ型
- Small-Cで使える型は、
int
とchar
のみ。int
は16ビットのshort int
相当。signed
とunsigned
、浮動小数点数のfloat
やdouble
、void
、32ビットのlong int
などはありません。 - 配列
- 配列は、多次元配列はなく、1次元配列のみ。
- 関数の戻り値
- 関数の戻り値は、
int
のみ。 - フルセットのCにない記法
- 例えば、
256()
と書いた場合、アドレス256にあるサブルーチンがコールされます。
まあでも、概ね、普通のC言語感覚でプログラミングできそうです。
コンパイラのソース
この本には、Small-C自身で書かれたSmall-Cコンパイラのソースが載っています。
その言語自身で書かれた、と聞くと不思議な感じがしますが、割とよくあります。
もちろん、何もないところからいきなりその言語で書くことはできません。
最初は、何か別の言語で書き、ある程度機能が揃ったらその言語自身で書き直すことで、実現します。以降は、コンパイラの改良をその言語自身を用いて行うことができます。
この本の付録.Aには、Small-Cコンパイラのソースが、55ページに渡って続きます。
その後の付録.Bには、アセンブリ言語で書かれた「算術・論理ライブラリ」が8ページ載っています。これは例えば、乗算ルーチンとか。
ただし、処理系のソースは載っていますが、標準ライブラリ(入出力等)は載っていません。言語自体に入出力等の機能を持たないC言語の場合、ライブラリを用意する方が分量が多くて大変だったりします。
おわりに
ソースが載っているので、コンパイラについても、なかなか勉強になります。