独習アセンブラ 新版(大崎 博之)|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. 独習アセンブラ 新版

独習アセンブラ 新版


形式:
書籍
発売日:
ISBN:
9784798170299
定価:
4,268(本体3,880円+税10%)
仕様:
B5変・736ページ
カテゴリ:
プログラミング・開発
キーワード:
#プログラミング,#開発環境,#開発手法,#Web・アプリ開発
シリーズ:
独習
紙の書籍

アセンブリ言語だけでなく
コンピュータアキーテクチャを学ぶ
標準教科書

今や、アセンブリ言語は、
最初に学ぶプログラミング言語ではありません。
それでも、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 コードリーディング

付属データはこちら

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

追加情報はありません。
この商品の「よくある質問」はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2024年11月25日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 037
表2.9 2列目
最小値(2進数) 1(2) 11(2) 111(2) 1111(2) 11111111(2) 1111111111111111(2) 1111...111(2) 1111...111(2)
最小値(2進数) 1(2) 10(2) 100(2) 1000(2) 1000000(2) 1000000000000000(2) 1000000...00000000(2) 1000000...00000000(2)
2024.11.25
1刷 041
下から5行目
163 ×3+162 ×10+161 ×2+160 ×14=14,984
163 ×3+162 ×10+161 ×2+160 ×14=14,894
2021.10.08
1刷 049
下から2行目
(= 65535.99609375) です。つまり、32ビットで表現できる値の範囲が0.00390625~65535.99609375となります。
(= 16777215.99609375) です。つまり、32ビットで表現できる値の範囲が0.00390625~16777215.99609375となります。
2022.08.25
1刷 092
表3.8 3行目
UTF-32L  |  0xff 0xfe 0x00 0x00
UTF-32LE  |  0xff 0xfe 0x00 0x00
2024.11.25
1刷 174
「6.6.3デバッガからの出力を理解する」2つ目のコード
2: /x $esp = 0xbffffabc
2: /x $esp = 0xbffffadc
2021.12.27
1刷 175
「6.6.3デバッガからの出力を理解する」1つ目のコード
3: x/32xb $esp 0xbffffabc: 0x41 0xfb 0xdf 0xb7 0x01 0x00 0x00 0x00   0xbffffac4: 0x54 0xfb 0xff 0xbf 0x5c 0xfb 0xff 0xbf   0xbffffacc: 0xe4 0xfa 0xff 0xbf 0x01 0x00 0x00 0x00   0xbffffad4: 0x00 0x00 0x00 0x00 0x00 0xf0 0xfb 0xb7  
3: x/32xb $esp 0xbffffadc: 0x41 0xfb 0xdf 0xb7 0x01 0x00 0x00 0x00 0xbffffae4: 0x74 0xfb 0xff 0xbf 0x7c 0xfb 0xff 0xbf 0xbffffaec: 0x04 0xfb 0xff 0xbf 0x01 0x00 0x00 0x00 0xbffffaf4: 0x00 0x00 0x00 0x00 0x00 0xf0 0xfb 0xb7
2021.12.27
1刷 175
「6.6.3デバッガからの出力を理解する」1つ目のコードの下の文章 2行目と4行目
2行目:現在、スタックの一番上が 0xbffffabcです。 4行目:その後、レジスタ ESP の値が 0xbffffac0 (= 現在のスタックポインタの値 + 4 バイト) に変化します。
2行目:現在、スタックの一番上が 0xbffffadcです。 4行目:その後、レジスタ ESP の値が 0xbffffae0 (= 現在のスタックポインタの値 + 4 バイト) に変化します。
2021.12.27
1刷 242
本文下から5行目
はint型の変数array_sizeの値をレジスタEDXに読み込んでいます。
はint型の配列arrayのアドレスをレジスタEDXに読み込んでいます。
2024.11.25
1刷 244
リスト8.5のファイル名
inline/rdtsc_ascm.s
inline/rdtsc_asm.s
2024.11.25
1刷 257
1つ目のコード、1行目
asm("movl $456, %%eax" // レジスタEAXに123を格納する(%は%%と表記)
asm("movl $456, %%eax" // レジスタEAXに456を格納する(%は%%と表記)
2024.11.25
1刷 257
2番目のコード、1行目
asm("movl $789, %0" // アドレス%0に123を格納する
asm("movl $789, %0" // アドレス%0に789を格納する
2024.11.25
1刷 403
本文1行目
SIMD も、SISDと同じように、一度に実行する命令は1つだけ(Single Data stream)ですが、
SIMD も、SISDと同じように、一度に実行する命令は1つだけ(Single Instruction stream)ですが、
2024.11.25
1刷 587
下から5行目
「Arvmなんとか-A」
「Armvなんとか-A」
2024.10.03