大崎 博之 著
今や、アセンブリ言語は、
最初に学ぶプログラミング言語ではありません。
それでも、C言語をはじめとしたプログラムを書いて、
実行し、デバッグする中で、必ずたどり着くことになるのが、
アセンブリ言語であり、コンピュータアーキテクチャです。
本書は、CPUの仕組みやメモリ、
データ構造について学びながら、
・x86(IA-32)
・x86_64
・ARM
・AVR
・CASL II
といった幅広いアーキテクチャの
アセンブリ言語に触れ、
「コンピュータがどのように
プログラムを実行しているのか」を
深く理解するための一冊です。
■目次
・Chapter 1 アセンブラとアセンブリ言語
・Chapter 2 数の表現
・Chapter 3 文字の表現
・Chapter 4 コンピュータの構造:CPUの構成
・Chapter 5 コンピュータの構造:メモリとCPU処理の抽象モデル
・Chapter 6 コンピュータの構造:スタック
・Chapter 7 GNUアセンブラGAS
・Chapter 8 アセンブリ言語プログラムの実行とインラインアセンブラ
・Chapter 9 x86命令セット:レジスタ
・Chapter 10 x86命令セット:データ転送
・Chapter 11 x86命令セット:算術演算、論理演算
・Chapter 12 x86命令セット:実行制御
・Chapter 13 x86命令セット:浮動小数点演算
・Chapter 14 x86命令セット:SIMD命令
・Chapter 15 仮想コンピュータの例:COMET II
・Chapter 16 マイクロコントローラの例:Atmel AVR
・Chapter 17 RISC CPUの例:Armv8-A
・Chapter 18 64ビットCPUの例:x86-64
基礎的な知識・概念・機能を、サンプルプログラムを例示しながら詳細かつ丁寧に解説します。
押さえておきたいことを「note」で補足解説しています。プラスαの知識が身につきます。
各章末にある【理解度チェック】で、その章で学んだ事項を理解できたか確認できます。
Chapter 1 アセンブラとアセンブリ言語
1.1 アセンブリ?アセンブル?アセンブラ?
1.2 プログラムの表現
1.3 高級言語からアセンブリ言語へ
1.4 C言語から機械語へのコンパイル
1.5 アセンブリ言語から機械語へ
Chapter 2 数の表現
2.1 10進数と60進数
2.2 N進数
2.3 2進数(整数)
2.4 16進数
2.5 8進数
2.6 2進数(実数)
Chapter 3 文字の表現
3.1 文化・慣習による表記の違い
3.2 文字に関する用語
3.3 ASCII
3.4 UnicodeとUTF-8
Chapter 4 コンピュータの構造:CPUの構成
4.1 複雑化するコンピュータ
4.2 コンピュータの構成
4.3 CPUの構成
4.4 IA-32アーキテクチャのレジスタ
4.5 デバッガによるトレース(レジスタ)
Chapter 5 コンピュータの構造:メモリとCPU処理の抽象モデル
5.1 いろいろなメモリ
5.2 メモリのアドレスとアドレスマップ
5.3 リトルエンディアンとビッグエンディアン
5.4 データの大きさを表す用語
5.5 CPU処理の抽象モデル
5.6 デバッガによるトレース(メモリアクセス)
Chapter 6 コンピュータの構造:スタック
6.1 CPUとスタック
6.2 データ構造としての「スタック」
6.3 CPUとメモリによるスタックの実現
6.4 スタックによる関数呼び出しの実現
6.5 ABI(Application Binary Interface)
6.6 デバッガによるトレース(スタック)
Chapter 7 GNUアセンブラ(GAS)
7.1 GNUアセンブラ(GAS)とは
7.2 GNU binutilsによるバイナリファイル解析
7.3 GNUアセンブラを使ってみる
7.4 アセンブリ言語プログラムの例
7.5 GNUアセンブラ(GAS)の特徴
7.6 GASの文法
7.7 IA-32アーキテクチャ固有の話題
7.8 GASの疑似命令(ディレクティブ)
Chapter 8 アセンブリ言語プログラムの実行とインラインアセンブラ
8.1 インラインアセンブラとは?
8.2 C言語からアセンブリ言語プログラムの呼び出し
8.3 プログラムの例:CPUのTSC(Time Stamp Counter)取得
8.4 GCCの基本asm文
8.5 GCCの拡張asm文
8.6 インラインアセンブラの実例
Chapter 9 x86命令セット(レジスタ)
9.1 IA-32アーキテクチャのCPU
9.2 IA-32アーキテクチャのドキュメント
9.3 レジスタ
9.4 命令の分類
9.5 よく使われる命令ランキング
Chapter 10 x86命令セット(データ転送)
10.1 データ転送命令とは
10.2 汎用データ転送命令:MOV
10.3 データ拡張転送命令:MOVZX/MOVSX
10.4 交換命令:XCHG
10.5 スタック操作命令:PUSH
10.6 スタック操作命令:POP
10.7 アドレス計算命令:LEA
Chapter 11 x86命令セット(算術演算・論理演算)
11.1 本章で扱う命令
11.2 加算命令:ADD/ADC
11.3 減算命令:SUB/SBB
11.4 乗算命令:MUL/IMUL
11.5 除算命令:DIV/IDIV
11.6 インクリメント命令:INC
11.7 デクリメント命令:DEC
11.8 比較命令:CMP
11.9 論理命令:AND/OR/XOR
11.10 論理命令:NOT
11.11 ビットシフト命令:SAL/SAR/SHL/SHR
Chapter 12 x86命令セット(実行制御)
12.1 プログラムの実行制御とは?
12.2 無条件転送命令:JMP
12.3 サブルーチンの呼び出し:CALL
12.4 サブルーチンから戻る:RET
12.5 条件付きジャンプ命令:Jcc
12.6 コードリーディング
Chapter 13 x86命令セット(浮動小数点演算)
13.1 IA-32アーキテクチャにおける浮動小数点演算
13.2 x87 FPU(浮動小数点ユニット)
13.3 x87 FPUによる浮動小数点演算
13.4 x87 FPU命令の概要
13.5 デバッガによるトレース(浮動小数点演算)
13.6 コードリーディング
Chapter 14 x86命令セット(SIMD命令)
14.1 SIMDとは?
14.2 IA-32アーキテクチャにおけるSIMD命令
14.3 デバッガによるトレース(SIMD命令)
14.4 応用的プログラミング
Chapter 15 仮想コンピュータの例:COMET II
15.1 COMET IIとCASL IIの概要
15.2 CASL IIの文法
15.3 COMET IIのアーキテクチャ
15.4 COMET II命令セット(概要、アドレッシングモード)
15.5 COMET II命令セット(データ転送)
15.6 COMET II命令セット(算術/論理演算)
15.7 COMET II命令セット(実行制御)
15.8 シミュレータによるトレース
15.9 コードリーディング
Chapter 16 マイクロコントローラの例:Atmel AVR
16.1 Atmel AVRファミリの概要
16.2 GNUアセンブラ(AVR固有の機能)
16.3 AVRファミリCPUのアーキテクチャ
16.4 AVR命令セット(概要、アドレス指定モード)
16.5 AVR命令セット(データ転送)
16.6 AVR命令セット(算術/論理演算)
16.7 AVR命令セット(実行制御)
16.8 デバッガによるトレース(AVR)
16.9 コードリーディング
Chapter 17 RISC CPUの例:Armv8-A
17.1 Armv8-Aの概要
17.2 GNUアセンブラ(ARM固有の機能)
17.3 Armv8-Aアーキテクチャ
17.4 Armv8-A A64命令セット(概要、アドレス指定モード)
17.5 Armv8-A A64命令セット(データ転送)
17.6 Armv8-A A64命令セット(算術/論理演算)
17.7 Armv8-A A64命令セット(実行制御)
17.8 コードリーディング
Chapter 18 64ビットCPUの例:x86-64
18.1 Intel 64アーキテクチャの概要
18.2 Intel 64アーキテクチャの特徴
18.3 よく使われる命令ランキングとABI
18.4 コードリーディング
付属データはこちら
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。
刷数は奥付(書籍の最終ページ)に記載されています。
書籍の種類:
書籍の刷数:
本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。
対象の書籍は正誤表がありません。
発生刷 | ページ数 | 書籍改訂刷 | 電子書籍訂正 | 内容 | 登録日 | ||||
---|---|---|---|---|---|---|---|---|---|
1刷 | 037 表2.9 2列目 |
未 | 未 |
|
2024.11.25 | ||||
1刷 | 041 下から5行目 |
未 | 未 |
|
2021.10.08 | ||||
1刷 | 049 下から2行目 |
未 | 未 |
|
2022.08.25 | ||||
1刷 | 092 表3.8 3行目 |
未 | 未 |
|
2024.11.25 | ||||
1刷 | 174 「6.6.3デバッガからの出力を理解する」2つ目のコード |
未 | 未 |
|
2021.12.27 | ||||
1刷 | 175 「6.6.3デバッガからの出力を理解する」1つ目のコード |
未 | 未 |
|
2021.12.27 | ||||
1刷 | 175 「6.6.3デバッガからの出力を理解する」1つ目のコードの下の文章 2行目と4行目 |
未 | 未 |
|
2021.12.27 | ||||
1刷 | 242 本文下から5行目 |
未 | 未 |
|
2024.11.25 | ||||
1刷 | 244 リスト8.5のファイル名 |
未 | 未 |
|
2024.11.25 | ||||
1刷 | 257 1つ目のコード、1行目 |
未 | 未 |
|
2024.11.25 | ||||
1刷 | 257 2番目のコード、1行目 |
未 | 未 |
|
2024.11.25 | ||||
1刷 | 403 本文1行目 |
未 | 未 |
|
2024.11.25 | ||||
1刷 | 587 下から5行目 |
未 | 未 |
|
2024.10.03 |