內容簡介
本書從應用編程的角度解釋x86處理器的內部架構和執行環境,全麵介紹如何用x86匯編語言編寫可被高級語言調用的函數。主要內容包括:x86-32核心架構(第1章和第2章),x87浮點單元(第3章和第4章),MMX技術(第5章和第6章),流式SIMD擴展(第7章至第11章),高級嚮量擴展(第12章至第16章),x86-64核心架構(第17章和第18章),x86-64SSE和AVX(第19章和第20章),高級主題(第21章和第22章)。書中包含瞭大量的示例代碼,以幫助讀者快速理解x86匯編語言編程和x86平颱的計算資源。本書可作為高等院校計算機及相關專業學生的教材,也可供想要學習x86匯編語言編程的軟件開發者使用。
目錄
齣版者的話
譯者序
前言
關於技術審校者
第1章x86-32核心架構 1
1.1 簡史 1
1.2 數據類型 3
1.2.1 基本數據類型 3
1.2.2 數值數據類型 4
1.2.3 組閤數據類型 5
1.2.4 其他數據類型 6
1.3 內部架構 6
1.3.1 段寄存器 7
1.3.2 通用寄存器 7
1.3.3 EFLAGS寄存器 8
1.3.4 指令指針 9
1.3.5 指令操作數 9
1.3.6 內存尋址模式 10
1.4 指令集瀏覽 11
1.4.1 數據傳輸 13
1.4.2 二進製算術 13
1.4.3 數據比較 14
1.4.4 數據轉換 14
1.4.5 邏輯運算 14
1.4.6 鏇轉和移位 15
1.4.7 字節設置和二進製位串 15
1.4.8 串 16
1.4.9 標誌操縱 16
1.4.10 控製轉移 17
1.4.11 其他指令 17
1.5 總結 17
第2章x86-32核心編程 18
2.1 開始 18
2.1.1 第一個匯編語言函數 19
2.1.2 整數乘法和除法 22
2.2 x86-32編程基礎 24
2.2.1 調用約定 25
2.2.2 內存尋址模式 28
2.2.3 整數加法 31
2.2.4 條件碼 34
2.3 數組 38
2.3.1 一維數組 39
2.3.2 二維數組 42
2.4 結構體 47
2.4.1 簡單結構體 47
2.4.2 動態結構體創建 50
2.5 字符串 52
2.5.1 字符計數 52
2.5.2 字符串拼接 54
2.5.3 比較數組 57
2.5.4 反轉數組 60
2.6 總結 62
第3章x87浮點單元 63
3.1 x87 FPU核心架構 63
3.1.1 數據寄存器 63
3.1.2 x87 FPU專用寄存器 64
3.1.3 x87 FPU操作數和編碼 65
3.2 x87 FPU指令集 68
3.2.1 數據傳輸 68
3.2.2 基本運算 69
3.2.3 數據比較 70
3.2.4 超越函數 71
3.2.5 常量 71
3.2.6 控製 72
3.3 總結 72
第4章x87 FPU編程 73
4.1 x87 FPU編程基礎 73
4.1.1 簡單計算 73
4.1.2 浮點比較 76
4.2 x87 FPU高級編程 79
4.2.1 浮點數組 79
4.2.2 超越指令(超越函數指令) 84
4.2.3 棧的高級應用 87
4.3 總結 92
第5章MMX技術 93
5.1 SIMD處理概念 93
5.2 迴繞和飽和運算 94
5.3 MMX執行環境 95
5.4 MMX指令集 96
5.4.1 數據傳輸 97
5.4.2 算術運算 97
5.4.3 比較 98
5.4.4 轉換 99
5.4.5 邏輯和位移 99
5.4.6 解組和重排 99
5.4.7 插入和提取 100
5.4.8 狀態和緩存控製 100
5.5 總結 100
第6章MMX技術編程 101
6.1 MMX編程基礎 101
6.1.1 組閤整型加法 102
6.1.2 組閤整型移位 108
6.1.3 組閤整型乘法 111
6.2 MMX高級編程 113
6.2.1 整數數組處理 114
6.2.2 使用MMX和x87 FPU 120
6.3 總結 125
第7章流式SIMD擴展 126
7.1 x86-SSE概覽 126
7.2 x86-SSE執行環境 127
7.2.1 x86-SSE寄存器組 127
7.2.2 x86-SSE數據類型 128
7.2.3 x86-SSE的控製-狀態寄存器 128
7.3 x86-SSE處理技術 129
7.4 x86-SSE指令集概覽 132
7.4.1 標量浮點數據傳輸 133
7.4.2 標量浮點算術運算 133
7.4.3 標量浮點比較 134
7.4.4 標量浮點轉換 134
7.4.5 組閤浮點數據傳輸 135
7.4.6 組閤浮點算術運算 135
7.4.7 組閤浮點比較 136
7.4.8 組閤浮點轉換 136
7.4.9 組閤浮點重排和解組 137
7.4.10 組閤浮點插入和提取 137
7.4.11 組閤浮點混閤 137
7.4.12 組閤浮點邏輯 138
7.4.13 組閤整數擴展 138
7.4.14 組閤整數數據傳輸 138
7.4.15 組閤整數算術運算 139
7.4.16 組閤整數比較 139
7.4.17 組閤整數轉換 139
7.4.18 組閤整數重排和解組 140
7.4.19 組閤整數插入和提取 140
7.4.20 組閤整數混閤 141
7.4.21 組閤整數移位 141
7.4.22 文本字符串處理 141
7.4.23 非臨時數據傳輸和緩存控製 142
7.4.24 其他 142
7.5 總結 143
第8章x86-SSE編程——標量浮點 144
8.1 標量浮點運算基礎 144
8.1.1 標量浮點算術運算 144
8.1.2 標量浮點數的比較 148
8.1.3 標量浮點數的類型轉換 151
8.2 高級標量浮點編程 157
8.2.1 用標量浮點指令計算球體錶麵積和體積 157
8.2.2 用標量浮點指令計算平行四邊形麵積和對角綫長度 159
8.3 總結 165
第9章x86-SSE編程——組閤浮點 166
9.1 組閤浮點運算基礎 166
9.1.1 組閤浮點算術運算 167
9.1.2 組閤浮點數的比較 171
9.1.3 組閤浮點數的類型轉換 175
9.2 高級組閤浮點編程 178
9.2.1 組閤浮點數最小二乘法 178
9.2.2 用組閤浮點數進行4×4矩陣的計算 183
9.3 總結 192
第10章 x86-SSE編程——組閤整數 193
10.1 組閤整數基礎 193
10.2 高級組閤整數編程 197
10.2.1 組閤整數直方圖 197
10.2.2 組閤整數閾值分割 203
10.3 總結 214
第11章 x86-SSE編程——字符串 215
11.1 字符串基礎知識 215
11.2 字符串編程 221
11.2.1 計算字符串長度 221
11.2.2 字符替換 224
11.3 總結 231
第12章 AVX——高級嚮量擴展 232
12.1 x86-AVX概述 232
12.2 x86-AVX執行環境 233
12.2.1 x86-AVX寄存器組 233
12.2.2 x86-AVX數據類型 233
12.2.3 x86-AVX指令語法 234
12.3 x86-AVX功能擴展 235
12.4 x86-AVX指令集概述 236
12.4.1 升級版的x86-SSE指令 236
12.4.2 新指令 239
12.4.3 功能擴展指令 242
12.5
前言/序言
從個人電腦發明那一天起,很多軟件開發者就使用匯編語言編程,以解決各種各樣的難題。在PC時代的早期,用x86匯編語言編寫大段的程序或整個應用是很普遍的。即便是在C、C++和C#等高級語言越來越流行的今天,許多軟件開發者也仍然使用匯編語言來編寫性能攸關的代碼。雖然近些年編譯器進步很快,編譯齣來的機器碼變得更短、更快,但在某些情況下,軟件開發者還是需要努力發揮匯編語言編程的優勢。 現代x86處理器包含單指令多數據(SIMD)架構,這給我們提供瞭另一個持續關注匯編語言編程的原因。SIMD架構的處理器可以同時計算多個數據,這可以顯著提高那些需要實時響應的應用軟件的性能。SIMD架構也非常適閤那些計算密集型的領域,比如圖像處理、音視頻編碼、計算機輔助設計、計算機圖形學和數據挖掘等。遺憾的是許多高級語言和開發工具不能完全發揮現代x86處理器的SIMD能力。而匯編語言恰恰可以讓軟件開發者充分利用處理器的全部計算資源。 現代x86匯編語言編程 本書是專門針對x86匯編語言編程的一本啓發性教材,其主要目的是教你如何用x86匯編語言編寫可被高級語言調用的函數。本書從應用程序編程的角度來解釋x86處理器的內部架構。書中包含瞭非常多的示例代碼,幫助你快速理解x86匯編語言編程和x86平颱的計算資源。這本書的主要議題包括: x86-32核心架構、數據類型、內部寄存器、內存尋址模式和基本指令集。 x87核心架構、寄存器棧、特殊寄存器、浮點編碼和指令集。 MMX技術和對組閤整數進行計算。 流式SIMD擴展(SSE)和高級嚮量擴展(AVX),包括內部寄存器、組閤整型和浮點運算以及相關指令集。 x86-64核心架構、數據類型、內部寄存器、內存尋址模式和基本指令集。 SSE和AVX技術的64位擴展。 x86微架構和匯編語言優化技術。 在討論其他內容之前,我想特彆聲明一下本書沒有覆蓋到的內容。本書沒有介紹x86匯編語言的傳統內容,比如16位實模式應用和分段內存模型。除瞭幾處曆史性的迴顧和比較外,所有其他討論和示例代碼都是假定處於x86保護模式和平坦綫性內存模型下。本書沒有討論x86的特權指令和用以支持開發操作係統內核的CPU功能,也沒有介紹如何用x86匯編語言去開發操作係統或者設備驅動程序。不過,如果你真的想用x86匯編語言去開發那些係統軟件,那麼需要先充分理解這本書的內容。 雖然理論上仍然可以完全用匯編語言開發一個應用程序,但是現實中的各種需求使得這種方法很難實行。所以本書重點關注如何創建可被C++調用的x86匯編語言模塊和函數。本書中的所有示例代碼和示例程序都是用微軟的Visual C++工具編寫並使用微軟的宏匯編器編譯的。這兩個工具都包含在微軟的Visual Studio開發工具集裏麵。 目標讀者 本書是針對下麵幾類軟件開發者而編寫的: 在Windows平颱下開發應用程序並想用x86匯編語言提高程序性能的軟件開發者。 在非Windows環境下開發應用程序並想要學習x86匯編語言編程的軟件開發者。 對x86匯編語言編程有基本瞭解,想要學習x86的SSE和AVX指令集的軟件開發者。 想要或需要更好理解x86平颱(包括其內部架構和指令集)的軟件開發者和計算機學院的學生。 本書主要是針對Windows平颱上的軟件開發者編寫的,因為示例代碼采用瞭Visual C++和微軟宏匯編編譯器。但是,本書並不是一本介紹如何使用微軟開發工具的書,非Windows平颱開發者也可以從本書獲益,因為大多數內容的編寫和介紹並不依賴任何特彆的操作係統。具有C和C++編程經驗有助於讀懂本書的內容和示例代碼,但是並不需要讀者事先具有Visual Studio使用經驗,也不需要先學習Windows API。 . 內容概要 本書的主要目的是幫助你學習x86匯編語言編程。為瞭達到這個目的,你需要全麵理解x86處理器的內部架構和執行環境。本書的章節和內容是按照這樣的思路規劃的。下麵簡要介紹一下本書的主要議題和各章節的內容。 x86-32核心架構——第1章涵蓋瞭x86-32平颱的核心架構,討論瞭這個平颱的基本數據類型、內部架構、指令操作數和內存尋址模式。這一章也簡要介紹瞭x86-32的核心指令集。第2章講解瞭利用x86-32核心指令集和常用編程結構編寫x86-32匯編語言程序的基礎知識。第2章及其後章節討論的示例代碼都是可以獨立運行的程序,這意味著你可以運行、修改或者用這些代碼做一些實驗來提高學習效果。 x87浮點單元——第3章探討x87浮點單元(FPU)的架構,描述瞭x87 FPU的寄存器棧、控製字寄存器、狀態字寄存器和指令集。這一章還深入探討瞭用於錶達浮點數和某些特殊值的二進製編碼方案。第4章包含瞭一些示例,用以演示如何用x87 FPU指令集進行浮點運算。對於那些需要維護x87 FPU代碼或者要在不具有x86-SSE和x86-AVX的處理器(比如Intel的Quark)上工作的讀者來說,本章的內容是最適用的。 MMX技術——第5章描述瞭x86的第一個SIMD擴展,即MMX技術。它分析瞭MMX技術的架構,包括它的寄存器組、操作數類型和指令集。這一章也討論瞭一些相關課題,包括SIMD處理概念和組閤整型運算。第6章包含瞭用以演示基本MMX運算的示例。
現代X86匯編語言程序設計 下載 mobi epub pdf txt 電子書