現代 x86 彙編語言程序設計, 2/e (Modern X86 Assembly Language Programming: Covers x86 64-bit, AVX, AVX2, and AVX-512, 2/e)

Daniel Kusswurm 江紅,余青松,余靖 譯

買這商品的人也買了...

商品描述

本書全面更新至x86-64,主要面向軟件開發人員,
旨在通過實用的案例幫助讀者快速理解x86-64彙編語言程序設計的概念並掌握編程方法。
書中首先介紹x86-64平台,包括Core體系結構、數據類型、寄存器、內存尋址模式和基本指令集等;
然後討論AVX、AVX2和AVX-512,包括寄存器集、指令集和增強功能等,並利用這些指令集編寫性能增強函數和算法;
zui後討論提高程序性能的編碼策略及技巧。
此外,書中包含大量可免費下載的源代碼,便於讀者實踐。

作者簡介

Daniel Kusswurm

在軟件開發和計算機科學領域擁有超過30年的專業經驗。
在幾十年的職業生涯中,他曾為各種醫療設備、科學儀器和圖像處理應用編寫了大量創新性的代碼。
在這些項目中,他有很多使用x86彙編語言的成功經驗,有些是顯著提高計算密集型算法的性能,有些是巧妙解決技術難題。
丹尼爾擁有北伊利諾伊大學電子工程技術碩士學位和德保羅大學計算機科學博士學位。

目錄大綱

出版者的話
譯者序
前言
關於作者
關於技術評審專家
第1章 x86-64 Core體系結構 1
1.1 歷史回顧 1
1.2 數據類型 3
1.2.1 基本數據類型 3
1.2.2 數值數據類型 3
1.2.3 SIMD數據類型 4
1.2.4 其他數據類型 5
1.3 內部體系結構 5
1.3.1 通用寄存器 6
1.3.2 RFLAGS寄存器 7
1.3.3 指令指針 8
1.3.4 指令操作數 9
1.3.5 內存尋址 10
1.4 x86-64與x86-32編程的區別 11
1.4.1 無效指令 12
1.4.2 不推薦的指令 13
1.5 指令集概述 13
1.6 本章小結 15

第2章 x86-64 Core程序設計:第1部分 17
2.1 簡單的整數算術運算 17
2.1.1 加法和減法 18
2.1.2 邏輯運算 20
2.1.3 移位運算 22
2.2 高級整數算術運算 25
2.2.1 乘法和除法 25
2.2.2 使用混合類型的運算 28
2.3 內存尋址和條件代碼 33
2.3.1 內存尋址模式 33
2.3.2 條件代碼 37
2.4 本章小結 40

第3章 x86-64 Core程序設計:第2部分 42
3.1 數組 42
3.1.1 一維數組 42
3.1.2 二維數組 48
3.2 結構 56
3.3 字符串 58
3.3.1 字符計數 58
3.3.2 字符串拼接 61
3.3.3 比較數組 65
3.3.4 數組反轉 68
3.4 本章小結 71

第4章 AVX指令集 72
4.1 AVX概述 72
4.2 SIMD編程概念 73
4.3 環繞與飽和算術運算 74
4.4 AVX執行環境 75
4.4.1 寄存器集 75
4.4.2 數據類型 76
4.4.3 指令語法 76
4.5 AVX標量浮點數 77
4.5.1 浮點數編程概念 78
4.5.2 標量浮點寄存器集 80
4.5.3 控制狀態寄存器 80
4.5.4 指令集概述 81
4.6 AVX打包浮點值 82
4.7 AVX打包整數 85
4.8 x86-AVX和x86-SSE之間的區別 87
4.9 本章小結 88

第5章 AVX程序設計:標量浮點數 90
5.1 標量浮點算術運算 90
5.1.1 單精度浮點數運算 90
5.1.2 雙精度浮點數運算 93
5.2 標量浮點值的比較和轉換 97
5.2.1 浮點值比較 97
5.2.2 浮點值轉換 106
5.3 標量浮點數組和矩陣 111
5.3.1 浮點數組 111
5.3.2 浮點矩陣 114
5.4 調用約定 118
5.4.1 基本堆棧幀 118
5.4.2 使用非易失性通用寄存器 122
5.4.3 使用非易失性XMM寄存器 126
5.4.4 函數序言和函數結語的宏 131
5.5 本章小結 136

第6章 AVX程序設計:打包浮點數 137
6.1 打包浮點算術運算 137
6.2 打包浮點值比較 142
6.3 打包浮點值轉換 146
6.4 打包浮點數組 150
6.4.1 打包浮點平方根 150
6.4.2 打包浮點數組的最小值和值 154
6.4.3 打包浮點最小二乘法 158
6.5 打包浮點矩陣 163
6.5.1 矩陣轉置 163
6.5.2 矩陣乘法 170
6.6 本章小結 175

第7章 AVX程序設計:打包整數 176
7.1 打包整數加法和減法運算 176
7.2 打包整數移位 181
7.3 打包整數乘法 184
7.4 打包整數圖像處理 189
7.4.1 像素的最小值和值 189
7.4.2 像素平均強度 196
7.4.3 像素轉換 200
7.4.4 圖像直方圖 206
7.4.5 圖像閾值化 213
7.5 本章小結 223

第8章 AVX2 224
8.1 AVX2執行環境 224
8.2 AVX2打包浮點數 224
8.3 AVX2打包整數 226
8.4 x86指令集擴展 226
8.4.1 半精度浮點數 227
8.4.2 乘法加法融合 227
8.4.3 通用寄存器指令集擴展 228
8.5 本章小結 229

第9章 AVX2程序設計:打包浮點數 230
9.1 打包浮點算術運算 230
9.2 打包浮點數組 236
9.2.1 簡單計算 236
9.2.2 列均值 241
9.2.3 相關係數 246
9.3 矩陣乘法和轉置 252
9.4 矩陣求逆 258
9.5 混合和排列指令 269
9.6 數據收集指令 273
9.7 本章小結 279

第10章 AVX2程序設計:打包整數 280
10.1 打包整數基礎 280
10.1.1 基本算術運算 280
10.1.2 打包和解包 284
10.1.3 大小提升 289
10.2 打包整數圖像處理 293
10.2.1 像素剪裁 293
10.2.2 RGB像素的最小值和值 298
10.2.3 RGB圖像到灰度圖像的轉換 304
10.3 本章小結 310

第11章 AVX2程序設計:擴展指令集 312
11.1 FMA程序設計 312
11.1.1 卷積 312
11.1.2 標量FMA 314
11.1.3 打包FMA 322
11.2 通用寄存器指令 329
11.2.1 不影響標誌位的乘法和移位 329
11.2.2 增強型位操作 333
11.3 半精度浮點轉換 336
11.4 本章小結 339

第12章 AVX-512 340
12.1 AVX-512概述 340
12.2 AVX-512執行環境 341
12.2.1 寄存器集 341
12.2.2 數據類型 342
12.2.3 指令語法 342
12.3 指令集概述 345
12.3.1 AVX512F 345
12.3.2 AVX512CD 346
12.3.3 AVX512BW 347
12.3.4 AVX512DQ 347
12.3.5 操作掩碼寄存器 348
12.4 本章小結 348

第13章 AVX-512程序設計:浮點數 349
13.1 標量浮點數 349
13.1.1 合併屏蔽 349
13.1.2 零屏蔽 352
13.1.3 指令級舍入 355
13.2 打包浮點數 358
13.2.1 打包浮點數算術運算 358
13.2.2 打包浮點值比較 365
13.2.3 打包浮點列均值 369
13.2.4 向量叉積 376
13.2.5 矩陣向量乘法 384
13.2.6 卷積 392
13.3 本章小結 395

第14章 AVX-512程序設計:打包整數 396
14.1 基本算術運算 396
14.2 圖像處理 400
14.2.1 像素轉換 401
14.2.2 圖像閾值化 406
14.2.3 圖像統計 411
14.2.4 RGB到灰度的轉換 420
14.3 本章小結 426

第15章 優化策略和技術 427
15.1 處理器微體系結構 427
15.1.1 處理器體系結構概述 427
15.1.2 微體系結構流水線功能 428
15.1.3 執行引擎 430
15.2 優化彙編語言代碼 431
15.2.1 基本技術 432
15.2.2 浮點算術運算 433
15.2.3 程序分支 433
15.2.4 數據對齊 435
15.2.5 SIMD技術 435
15.3 本章小結 436

第16章 高級程序設計 437
16.1 CPUID指令 437
16.2 非時態內存存儲 450
16.3 數據預獲取 454
16.4 多線程 461
16.5 本章小結 471
附錄A 472