Interfaceという工学向けの雑誌をよく読みます。ほとんどの号はさっぱり内容がわからないのですが、たまに理解できそうな特集があると買ってみます。この2011年7月号は「CPUの動作原理とアセンブラの基礎知識」ということで、ソフトがらみの内容のため、興味があったので買ってみました。
発売からだいぶ経ってしまいましたが、記事にしてみます。
全体
前半はCPUのハード的な技術話。後半はアセンブラの説明。筆者も別。
前半は習っていない所がもう習ってるかのように説明の中に出てくる箇所が結構あり、説明があまりうまくないなぁと思う。知識を散りばめるよりも、読者がすらすら読める事のほうが重要。本文の中にも「わかりやすく説明することは難しい」と書かれているが、それ以前の問題のような気がする。説明することは全体の一部でいいのでつじつまが合った文章を書いて欲しい。
後半は読みやすく書かれている。ただし何点か気になるところがあった。
・91ページの図7の左シフトで追い出されたビットが収納される四角にOFの表記がない
・第5章でのPOPとPUSHの定義(命令の文法)が書いてない。ので、PUSHにオペランドが2つあるものをどう解釈するかが明確にならない。
・95ページのフレームポインタの説明で、「いままで別の用途に使われていたものをフレームポインタとして使う」という点が書いてないので、初めにフレームポインタの値をスタックに入れる理由が説明からは理解出来ない。次のページの表記でやっとわかるが、それまではわからない。また、フレームポインタは汎用レジスタを使うという点も書いておいて欲しい。書いてないとSPのように独立してあるもののように見えてしまう。
・97ページのリスト11はSIZEではなく、TEST_SIZE
・101ページ、インデックスレジスタとスケーリングの間は「*(アスタリスク)」なのか「,(カンマ)」なのか。表6ではアスタリスク、本文中ではカンマ、図3ではカンマになっている。
しかし前半がちゃらんぽらんだっただけに後半の分かりやすさが引き立つな。第6章の途中で力尽きたのでとりあえずここまで。第6章は各例題に対してメモリ配置のイラストがあるといい。
アセンブラは思っていたより地味というか、装置をマニュアル操作している感じがあるというか。
若いころにやっておけばよかったと思った。public static void mainなんかよりも理解しやすい。仕組みが単純なのでやればやるだけ理解出来し、C言語の解説によくある、最後の最後でけむに巻かれる感じから解放されるかも。
以下は私の個人的なメモ
第1章 独断と偏見で語るCPUの完全理解
命令長は主に、バイト可変、16ビット可変、16ビット固定、32ビット固定が使われる。
アドレスの指定の方法をアドレッシングモードという。これには即値、レジスタ指定も含む。
命令に対応する、オペランドのアドレッシングモードの組み合わせ命令形式という。
オペコードとオペランドを合わせたものがニーモニック。
第5章
メモリのアドレス付けが8ビット単位だと「バイトアドレッシング」16ビット単位だと「ワードアドレッシング」
間接アドレッシングで使うレジスタを指標レジスタという。