アセンブリの勉強法 (2/2)
この記事はアセンブリの勉強法の2/2の記事です。
前回の記事(1/2)はこちら
アセンブリおすすめ本その1:コンピュータハイジャッキング(前回)
アセンブリおすすめ本その2:低レベルプログラミング(今回)
低レベルプログラミングという本は前回ご紹介したコンピュータハイジャッキングの次に読むべきだと個人的に思っている本です。アセンブリの知識を更に次のレベルに進めてくれますし、発売が2018年1月なので新しい情報が得られます。
この本の目的
この本で身につく知識は次のものがあると前書きに書かれています。
- アセンブリ言語で自由自在に書くことができる。
- Intel 64のプログラミングモデルを理解する。
- C11で、保守が用意で堅牢なコードを書ける。
- コンパイルのプロセスを理解し、アセンブリリストを解読できる。
- コンパイルされたアセンブリコードのエラーをデバッグできる。
- 適切な計算モデルを使うことで、プログラムの複雑さを大きく減らせる。
- 性能が重視されるコードを書ける。
この内容の通り、それなりにレベルが高い本です。
そしてすごくおもしろい本です!
想定読者
この本の前書きには想定読者として、「プログラミングを学ぶ学生から、中程度から高程度のプログラマ、そしてプログラミングに取り憑かれたマニアまで」と書かれています。中程度のプログラマでもかなり読み応えがある本ですので、本当の初心者には難しいです。
一方で、アセンブリ言語を少し理解しているならば、自分のアセンブリの知識を中上級者にするためにこの本はぴったりな選択肢です。
前提知識
個人的には、次の知識がないと厳しいと感じました。
本書の内容については後でも書きますが、コンピュータアーキテクチャについての基礎的な説明はわずか20ページだけであり、その次からはアセンブリ言語について重めの説明が始まります。そのため、システムプログラミング言語でヒープやスタックなどをある程度意識してプログラムを書いた経験がないとアセンブリ言語が何をしようとしているのかいまいち理解できない可能性があります。
レジスタとシステムコールについては、この本を最初に読んだときにいまいちパッとしませんでした。具体的には、機械語が2進数(あるいは16進数)の連続であるとして、それがどうやってCPU内で処理されるのか、ということです。
それはオペコード(命令)+オペランド(引数)の繰り返しです。ざっくり解説すると、個々のオペコード(16進数)は後に取る引数(=オペランド)のバイト数(=長さ)が決まっていて、オペランドが終われば次の数字はオペコードで、その次はそのオペコードに対応するオペランドが来て…という規則で数字を「命令(オペコード)」と「引数(オペランド)」に変えて実行しています。
これらの知識が少しはないと難しい可能性があります。もし知らなければ、前回ご紹介したコンピュータハイジャッキング等を読んで知識を埋めることをおすすめします。
本の構成
第2部 プログラミング言語C
- 第8章 基礎
- 第9章 型システム
- 第10章 コードの構造
- 第11章 メモリ
- 第12章 構文と意味と実際
- 第13章 良いコードを書くには
第3部 Cとアセンブラの間
- 第14章 変換処理の詳細
- 第15章 共有オブジェクトとコードモデル
- 第16章 性能
- 第17章 マルチスレッド
第4部 付録
参考:https://www.shoeisha.co.jp/book/detail/9784798155036