ということで、「ARMで学ぶアセンブリ言語入門」が6月22日に発売になります。
一言で内容を表すと「C言語で組み込み開発している人向けのARMアセンブリ言語入門」。言い方を変えると「バリバリとアセンブリコードが書ければ言うことないけど、C言語でコードを書いてたとしても、アセンブリ言語がどんなモノで、どんな風に成り立っているのか知っておこうよ。後できっと役に立つよ」。
内容としては、ARMアーキテクチャの話から、アセンブリ言語特有の考え方(レジスタ、命令など)、命令解説、C言語との連携、例外・割り込みの解説など、アセンブリ言語を扱うのに必要なところを一通り、といった感じで。
サンプルコードは特定ハードウェア(評価ボード)に依存せず、QEMU(ARMプロセッサをエミュレートするソフトウェア)上で動作することが前提となっている。よくあるパターンで、ARMプロセッサの解説本だと何かしらのARMプロセッサを搭載したハードウェアを対象にしてるものもあるけど、本書はQEMUが前提なので、PC1台で試すことができる。どうしてもハードウェア上で動かしてみたいのであれば、RaspberryPIでもOK。
目次
01 コンピュータの基礎
- 組み込み機器とは
- コンピュータでソフトウェアが動作するには
- CPUと周辺機器
02 ARMプロセッサ
- ARMプロセッサの特徴
- ARMプロセッサのラインナップ
- ARM命令とThumb命令
03 開発環境の構築
- 組み込みシステム開発の概要
- 本書で利用する環境
- はじめてのクロス開発
04 始めてのアセンブリ言語プログラミング
- 数値
- アセンブリ言語の仕組み
- メモリ
- アセンブリコードを記述する
- インラインアセンブラ
- はじめてのアセンブリプログラミング(2つの値を加算する)
- 1から指定した値までの合計を求める
- まとまった機能を呼び出す(サブルーチン)
05 アセンブリ言語の詳細
- 本章で扱うARM命令セットについて
- ムーブ命令
- 算術演算命令
- シフト命令
- 論理演算命令
- 比較命令
- テスト命令
- 分岐命令
- プログラムステータスレジスタ命令
- ロード命令/ストア命令(単一レジスタ)
- ロード命令/ストア命令(複数レジスタ)
- ソフトウェア割り込み命令
- バレルシフタ
- 条件実行
06 アセンブリ言語とC言語
07 例外と割り込み
使う機会は少ないけれども
アセンブリ言語でバリバリとコードを書く人は減ってきた印象がある(まあ、その必然性も年々無くなってきてる感じはあるし) ただ、「知っているのと知らないのじゃ、対応方法や対応に必要な時間が違ってくるよなあ」と感じる場面はままある。特にトラブルシューティングのときなんかがそう。
パッと思いつくのは、不運にもコンパイラのバグに遭遇してしまった場面など(滅多にないけどゼロではない)。これはC言語のコードだけ読んでても絶対に原因が分からない。
最初は自分のコードが悪いか、コンパイラが悪いのか見当すらつかず、しばらく悩む。そして、あれこれ試すと、コンパイラのオプションで現象が変化することが分かって、C言語のコードとアセンブリ言語のコードを読み進めて明確になるという。
他には、ソースコードがなくバイナリしか手元にないときに内部の動作を知る必要がある場合なんかもあったりする。
こう考えていくと、アセンブリ言語の知識が必要な場面って限られるな。でも、先のような場面に遭遇したときに対応できるかどうかで他者からの評価が決まったりするしねぇ。
紆余曲折
この本は、執筆中に紆余曲折があった。執筆初期の頃に、書きながら「自分が考えていたのと何か違う!」と感じて、いろいろ迷走しかけた時期がある。どの程度、迷いがあったかというと、一時期はラノベ風にしようかと真剣に考えたほど(結局、編集者さんの反対によって無くなったけど) 本書の文章は普通なので心配なきよう。
そんなこんなで、今時珍しいアセンブリ言語本ですし、解説してる命令はRaspberryPIでも動きますので、低レイヤーに進む第一歩として購入してみてはいかがでしょうか。