セカイノカタチ

世界のカタチを探求するブログ。関数型言語に興味があり、HaskellやScalaを勉強中。最近はカメラの話題も多め

低レベルから理解できる!半導体からアセンブリ言語までをひとつの繋がりとして理解するための書籍3冊

f:id:qtamaki:20141216191316j:plain

コンピュータやプログラミング言語を低レベル*1で理解するというのは、なかなか難しいものですよね。

僕自身ずっとそのことが心の奥に引っかかっていて、もっと詳しくコンピュータのことが知りたい!と願っていたのですが、なんとなく続けてこの3冊を読んでみたところ、なんか凄くいい感じでした。

これって凄い偶然なんだと思いますが、この3冊はそれぞれ守備範囲が異なっており、続けて読むことによって半導体からアセンブリ言語までの繋がりをスムーズに理解できる構成と順番になっています。

それぞれ単体でもよく出来ていて面白い本なのですが、結果的に3冊読んでみて、それぞれの内容が頭のなかで一本の線で結ばれてより理解が深るという効果があり、とても得した気分です。

マンガでわかる半導体

マンガでわかる半導体

1番手は、安定のマンガでわかるシリーズです。(^^;

圧倒的な取っ付き易さが、一冊目としても最適です。

とはいえ、内容は結構ハードで、うかうかしているとアッという間に置いて行かれるので注意が必要です。(^^;

担当パートは、半導体の特性とトランジスタの仕組み、トランジスタを組み合わせた論理回路の構成までです。

以下に続く本では、さらっと「AND回路」などと記号で紹介され、チップの中身としてしか存在しない回路の仕組みスポットライトがあたり、実際の動きを納得するまで理解することができます。

また、トランジスタと言っても、実は出力特性が急峻なアナログ回路なので、実際のところでは色々悩ましい特性があったりして「コンピュータも所詮は機械装置なんだな」と見る目が変わるかもしれません。

CPUの創りかた

CPUの創りかた

トランジスタや抵抗を組み合わせてCPUを作る本です。

こちらも表紙がラブリーですね。電車の中で読むのがためらわれます。(^^;

中身は至って真面目なハードウェアの本で、先ほど主役だったトランジスタは裏方に回り、チップや回路が主役になります。

最終的には、ガチで演算ができ、プログラムも組める4bitコンピュータが出来上がります(作ってないですが(^^;)。

機械語の命令の設計もしますので、トランジスタを組み合わせて作ったコンピュータが、機械語という人間との最低限のインターフェースを獲得するまでの様子を知ることができます。

これまで、機械語なんてインテルとかIBMの偉い人が考えるものだと思っていましたが*2、市井のエンジニアにも手が届くシロモノだったのかと感動しました。

アセンブリ言語スタートブック

アセンブリ言語スタートブック

アセンブリ言語の本は結構多いですが、この本は割りとハード寄りで説明もとても丁寧なので、凄く良いです*3

冒頭にて論理回路や加算器、メモリの仕組みなどのCPU内部のハードウェア的な説明が出てくるのですが、上記2冊を読んでいればすんなり入ってくるはずです。

それどころか、実際のコンピュータが上記2冊の延長線上でどのような発展をしていくのかについて書かれているので、より理解が深まり、もう一度「CPUの作り方」を読み返したくなることうけあいです。(^^;

本書の主題は、CASL IIを使った機械語の解説とアセンブリ言語との対応です。

CASL IIは、仮想マシンCOMET II上で動くアセンブリ言語で、基本情報技術者試験にも登場する由緒正しきコンピュータ学習用エミュレータです。

専門学校の授業で使ったりもするみたいなので、名前を聞いただけで「うげっ」となる人もいるかと思いますが、遊んでみると案外おもしろいソフトです。

コンピュータ機械内部の動きをステップ・バイ・ステップで追いかけることができるので、ある程度複雑なコンピュータ上で機械語がどのように解釈されて動くのかについての理解が捗ります。

この本の終盤では、PentiumやPICなどの実際に利用されているCPUのアセンブリ言語を例にした解説もありますので、自分が使っているコンピュータと今までの話が繋がってきます。

ここまで辿り着くと、長い小説で伏線が全て回収されて「そうなるのか!?」みたいな納得感と驚きを味わうことができるとおもいます。

おわりに

これらの本を読むことによって、今までブラックボックスの部分の多かったコンピュータの一番低いところまで理解できるようになるはずです。

実際のプログラミングにどこまで役立つかは未知数ですが、仕組みを知ることは本質的な理解の為の道標になることは間違いないと思います。

コンピュータと言っても魔法の箱ではなく、所詮は電気の通った機械なんです。

プログラマーだって所詮は血の通った人間ですもんね(?)。

*1:勿論レベルが低いっていみじゃなくて低レイヤー。物理層に近いところで

*2:実際のCPUに積まれる機械語の設計は偉い人が考えているんでしょうけど

*3:ただし、実際のCPUを扱うわけではないので「今すぐx86アセンブリ言語でプログラミングしたい!」みたいな用途には向かないです