圖書簡介
本書通過使用標準命令行工具和大量實例,循序漸進地介紹了安騰彙編語言,並結合當代計算機體系結構的發展,詳細闡述了安騰體系結構設計。
本書涵蓋的內容包括:
·顯式並行指令計算(EPIC)的潛能
·安騰體系結構中的創新,例如暫存器棧引擎(RSE)和廣泛使用的謂詞等
·過程調用以及過程調用機制
·浮點操作
·I/O技術,包括從簡單的調試到檔案的使用等
·開主和源碼、Intel和HP-UX編譯程式的輸出最佳化
編輯推薦
本書每章都包括翔實的數字、論述以及編程練習,並且提供了大量的參考文獻和豐富的網上資源。本書可作為計算機及相關專業學生學習計算機體系結構或彙編語言的教材,也是研究人員系統了解安騰體系結構的必備資源。
目錄
第1章體系結構和實現方法1
1.1類比:鋼琴的體系結構1
1.2計算機語言的類型2
1.3為什麼要學習彙編語言3
1.4二進制倍數的詞頭4
1.5指令集體系結構4
1.6計算機體系結構的生命周期5
1.6.132位Intel體系結構及其先前結構5
1.6.2AlphaTM體系結構及其先前結構6
1.6.3安騰體系結構及其先前結構7
1.6.4體系結構和實現方法的命名8
1.7SQUARES:第一個編程實例9
1.7.1C、FORTRAN和COBOL語言描述9
1.7.2安騰體系結構的彙編語言描述11
1.8記數系統的回顧13
1.8.1位置係數和權值13
1.8.2二進制和十六進制表示14
1.8.3帶符號整數15
本章總結16
參考文獻16
練習題18
第2章計算機結構和數據表示20
2.1計算機結構20
2.1.1中央處理器21
2.1.2存儲器21
2.1.3輸入輸出系統23
2.2指令的執行24
2.3指令集體系結構的類別25
2.4向64位體系結構過渡26
2.5安騰體系結構的信息單位和數據類型28
2.5.1整數29
2.5.2浮點數29
2.5.3字母數字字元32
本章總結35
參考文獻35
練習題36
第3章彙編程式和調試程式38
3.1編程環境38
3.2程式開發步驟39
3.3比較源檔案的不同41
3.4彙編語句的類型42
3.4.1語句格式42
3.4.2符號地址43
3.4.3彙編語言操作符的種類43
3.5符號彙編程式的功能44
3.5.1常量44
3.5.2符號或標識符45
3.5.3存儲器分配45
3.5.4單元計數器47
3.5.5表達式48
3.5.6控制語句49
3.5.7清單檔案的組成部分49
3.6彙編過程51
3.7連線過程52
3.8調試程式55
3.8.1調試程式的功能55
3.8.2使用gdb(Linux和HPUX)運行SQUARES56
3.8.3使用adb(HPUX)運行SQUARES57
3.8.4調試命令舉例58
3.9編寫程式的約定61
本章總結62
參考文獻62
練習題63
第4章安騰指令格式和定址方式65
4.1安騰指令格式概述66
4.1.1指令包66
4.1.2指令位欄位格式67
4.1.3安騰指令類型67
4.2整數算術指令69
4.2.1加法和減法69
4.2.2算術溢出70
4.2.3左移相加指令71
4.2.4算術操作的特殊情況71
4.2.516位帶符號整數的乘法72
4.2.6全寬度的乘法和除法73
4.3安騰指令的位編碼73
4.4HEXNUM:使用算術指令76
4.5數據存取指令78
4.5.1安騰高速快取結構78
4.5.2整型存儲指令80
4.5.3整型裝入指令80
4.5.4長立即數傳送指令81
4.5.5存取簡單的記錄結構82
4.5.6存取專用CPU暫存器83
4.6其他ALU指令84
4.6.1符號擴展指令84
4.6.2零擴展指令85
4.6.3寬度小於64位的指令85
4.7DOTPROD:使用數據存取指令85
4.8安騰定址方式88
4.8.1立即定址88
4.8.2暫存器直接定址88
4.8.3暫存器間接定址88
4.8.4自動增量定址89
4.8.5安騰定址方式小結89
4.8.6前面程式中的定址細節89
4.9其他體系結構中的定址94
4.9.1基於暫存器間接定址的方式94
4.9.2基於偏移定址的方式94
4.9.3體系結構定址方式的比較95
本章總結96
參考文獻96
練習題96
第5章比較、轉移和判斷99
5.1控制流的硬體基礎99
5.1.1條件碼100
5.1.2狀態管理方法100
5.1.3謂詞暫存器101
5.2整數比較指令102
5.2.1帶符號比較和等式102
5.2.2無符號比較103
5.3程式轉移104
5.3.1普通轉移指令104
5.3.2轉移的時間考慮105
5.3.3if…then…else結構106
5.3.4循環結構108
5.3.5轉移的定址範圍109
5.3.6局部性和程式性能109
5.4DOTLOOP:使用計數循環110
5.5暫停、指令組和性能111
5.5.1DOTLOOP中的暫停和分組111
5.5.2數據相關性的簡化規則113
5.5.3安騰彙編程式處理暫停的方法115
5.5.4循環的局部標號115
5.5.5循環、轉移和整體性能115
5.6DOTCLOOP:使用循環計數暫存器115
5.7其他結構化程式設計成分117
5.7.1無條件比較指令118
5.7.2嵌套的if…then…else結構118
5.7.3多路轉移119
5.7.4簡單的分情況結構120
5.8MAXIMUM:使用條件指令122
本章總結123
參考文獻124
練習題124
第6章邏輯操作、移位操作和位元組操作126
6.1邏輯函式126
6.1.1兩個變數的布爾函式126
6.1.2邏輯指令128
6.1.3邏輯函式的套用128
6.1.4一位測試指令129
6.1.5並行(邏輯)條件130
6.1.6加法的邏輯基礎131
6.2HEXNUM2:使用邏輯掩碼132
6.3位操作和欄位操作134
6.3.1移位指令134
6.3.2移位操作的套用135
6.3.3右移對指令135
6.3.4提取指令和存放指令135
6.4SCANTEXT:處理位元組137
6.5整數乘法和除法138
6.5.1乘法的Booth算法138
6.5.2無符號乘法141
6.5.3使用已知倒數的除法141
6.6DECNUM:將整數轉換成十進制格式143
6.7使用C語言進行ASCII輸入和輸出145
6.7.1GETPUT:封裝C函式146
6.7.2IO_C:一個簡單的測試程式146
6.7.3其他概念148
6.8BACKWARD:使用位元組操作148
本章總結151
參考文獻151
練習題152
第7章子例程、過程和函式155
7.1存儲器棧155
7.1.1CISC體系結構的棧定址155
7.1.2裝入/存儲體系結構的棧定址156
7.1.3安騰體系結構的棧定址156
7.1.4用戶定義的棧158
7.2DECNUM2:使用棧操作159
7.3暫存器棧161
7.3.1SPARC暫存器窗162
7.3.2安騰暫存器棧163
7.3.3alloc指令163
7.3.4暫存器棧引擎(RSE)164
7.3.5存儲體暫存器164
7.4程式分段165
7.4.1源級模組性165
7.4.2傳統子例程166
7.4.3協同例程166
7.4.4過程和函式167
7.4.5共享庫函式167
7.5調用約定167
7.5.1暫存器競爭和使用約定168
7.5.2調用和返迴轉移指令168
7.5.3變元傳送:位置171
7.5.4變元傳送:方法172
7.5.5開始部分和結束部分172
7.5.6.regstk命令176
7.6DECNUM3和BOOTH:建立一個函式176
7.6.1定義接口176
7.6.2BOOTH:可調用的函式177
7.6.3DECNUM3:測試程式178
7.6.4位置獨立的代碼180
7.7整數商和餘數181
7.7.1高級語言使用的例程181
7.7.2Intel公司的開放源例程182
7.8RANDOM:一個可調用的函式182
7.8.1選擇一個算法183
7.8.2RANDOM:函式的開發183
7.8.3高級語言調用程式186
本章總結187
參考文獻188
練習題189
第8章浮點操作191
8.1整數指令和浮點指令之間的並行性191
8.2浮點值的表示192
8.2.1IEEE特殊值192
8.2.2安騰浮點暫存器中的值193
8.3複製浮點數據194
8.3.1浮點存儲指令194
8.3.2浮點裝入指令195
8.3.3浮點裝入對指令196
8.3.4用於暫存器暫存器複製的浮點偽指令197
8.3.5浮點合併指令198
8.4浮點算術指令198
8.4.1加法、減法和乘法198
8.4.2熔絲型乘加和乘減指令199
8.4.3規範化為另一個特例200
8.4.4最大值和最小值操作200
8.4.5捨入、異常和浮點控制200
8.5HORNER:計算一個多項式201
8.6基於浮點值的判斷203
8.6.1浮點比較指令204
8.6.2浮點類指令204
8.7浮點執行部件中的整數操作205
8.7.1數據轉換指令206
8.7.2整數乘法指令208
8.7.3乘法策略209
8.7.4浮點邏輯指令209
8.8倒數和平方根的近似209
8.8.1浮點倒數的近似210
8.8.2倒數平方根的近似211
8.8.3浮點除法211
8.8.4Intel公司的開放源例程212
8.9APPROXPI:使用浮點指令212
本章總結216
參考文獻216
練習題217
第9章文本的輸入和輸出219
9.1檔案系統220
9.1.1UnixI/O軟體220
9.1.2LinuxI/O軟體221
9.2鍵盤和顯示器I/O221
9.2.1未格式化的I/O行221
9.2.2格式化的I/O222
9.3SCANTERM:使用C的標準I/O223
9.4SORTSTR:排序串226
9.5文本檔案I/O230
9.5.1目錄級的訪問230
9.5.2未格式化的I/O行231
9.5.3格式化的I/O232
9.6SCANFILE:檔案的輸入輸出232
9.7SORTINT:對檔案中的整數進行排序236
9.8二進制檔案240
本章總結241
參考文獻241
練習題241
第10章性能考慮244
10.1處理器級的並行性244
10.1.1簡化的指令流水線244
10.1.2超標量流水線245
10.1.3安騰2處理器流水線246
10.1.4流水線冒險247
10.2指令級並行性249
10.2.1RISC方法249
10.2.2VLIW思想250
10.2.3EPIC:體系結構發展的一個方向250
10.3安騰處理器中的顯式並行性250
10.3.1指令模板251
10.3.2數據相關和猜測254
10.3.3控制相關和猜測257
10.3.4組合的控制和數據猜測258
10.4軟體流水線循環258
10.4.1傳統的循環展開259
10.4.2軟體流水線259
10.4.3循環式暫存器260
10.4.4循環階段260
10.4.5軟體流水線的轉移指令261
10.5按模調度一個循環262
10.5.1DOTCTOP:獨立實現的調度262
10.5.2DOTCTOP2:安騰2處理器的調度266
10.5.3進一步的考慮267
10.6程式最佳化因素269
10.6.1指令寬度269
10.6.2定址方式270
10.6.3指令能力270
10.6.4程式長度270
10.6.5將數據預取到高速快取中271
10.6.6直接插入式函式的使用271
10.6.7指令重新排序271
10.6.8遞歸及相關因素272
10.7斐波納契數272
10.7.1FIB1:使用遞歸的函式273
10.7.2FIB2:無遞歸的函式275
10.7.3FIB3:使用暫存器棧的函式275
10.7.4TESTFIB:顯示遞歸的開銷276
本章總結278
參考文獻278
練習題279
第11章查看編譯程式的輸出281
11.1類RISC系統的編譯程式281
11.1.1開放源碼編譯程式的最佳化級別282
11.1.2Intel編譯程式的最佳化級別283
11.1.3HPUX編譯程式的最佳化級別284
11.1.4附加的最佳化可能性284
11.2編譯一個簡單程式285
11.2.1比較gcc和ecc(Linux)的輸出286
11.2.2比較gcc和g77(Linux)的輸出289
11.2.3比較cc_bundled和f90(HPUX)的輸出292
11.3最佳化一個簡單程式295
11.3.1比較g77(Linux)的-O1級別和-O2級別的輸出296
11.3.2編譯程式信息298
11.3.3f90(HPUX)的循環的長度和最佳化299
11.4直接插入式最佳化304
11.5剖面制導的最佳化或其他最佳化306
11.6調試經過最佳化的程式306
11.7重訪斐波納契數的遞歸307
本章總結309
參考文獻310
練習題311
第12章並行操作313
12.1計算系統的分類313
12.2整數並行操作315
12.3整數乘法的套用316
12.3.1源運算元32×32位得到32位無符號乘積316
12.3.2源運算元32×32位得到64位無符號數317
12.4機遇和挑戰319
12.5浮點並行操作319
12.6支持並行處理的信號量320
12.6.1先前的體系結構321
12.6.2安騰體系結構321
本章總結324
參考文獻324
練習題325
第13章實現方法的變異326
13.1為什麼改變實現方法327
13.1.1需求和機遇327
13.1.2摩爾定律的含義327
13.1.3期望體系結構具有較長的生命周期328
13.2如何改變實現方法328
13.3最初的安騰處理器329
13.3.1與安騰2處理器的對比329
13.3.2高速快取的層次結構330
13.3.3執行部件和發射連線埠331
13.3.4流水線331
13.3.5等待因子332
13.3.6轉移預測332
13.3.7其他區別和特徵334
13.4軟體的主要作用334
13.4.1新的體系結構335
13.4.2新的實現方法335
13.4.3新的指令或者更多的暫存器336
13.5IA32指令集模式337
13.6確定擴展和實現方案337
本章總結338
參考文獻338
練習題340
附錄A命令行環境341
參考文獻344
練習題344
附錄B推薦的系統資源345
B.1系統硬體345
B.1.1安騰工作站或伺服器345
B.1.2IA32 Linux系統上的Ski模擬器345
B.1.3Linux虛擬機上的Ski模擬器346
B.1.4其他模擬器346
B.2系統軟體347
B.2.1Linux347
B.2.2HPUX347
B.2.3Ski模擬器348
B.2.464位Windows350
B.2.5FreeBSD350
B.2.6OpenVMS351
B.3桌面客戶訪問軟體351
B.3.1Linux個人計算機351
B.3.2Macintosh個人計算機351
B.3.3Windows個人計算機352
參考文獻353
附錄C安騰指令集354
表C1按功能排列的安騰指令354
表C2按彙編程式操作碼排列的安騰指令360
參考文獻366
附錄D安騰暫存器及其用途367
D.1指令指示字367
D.2通用暫存器和NaT位367
D.3謂詞暫存器369
D.4轉移暫存器369
D.5浮點暫存器370
D.6套用暫存器370
D.7狀態管理暫存器372
D.8系統信息暫存器373
D.9系統控制暫存器373
參考文獻374
附錄E條件彙編和宏(GCC彙編程式)375
E.1顯式停止的干擾375
E.2重複塊376
E.2.1簡單重複塊376
E.2.2使用.irp命令的不定重複塊377
E.2.3使用.irpc命令的不定重複塊378
E.3條件彙編379
E.4宏的處理380
E.4.1宏的定義381
E.4.2宏的調用381
E.4.3定位參數的處理383
E.4.4默認值和關鍵字參數的處理383
E.4.5串參數的處理384
E.5宏標號的使用384
E.6遞歸宏385
E.7目標區塊386
E.8MONEY:用於說明段的宏387
本章總結389
參考文獻390
練習題390
附錄F直接插入式彙編392
F.1HPUX的C編譯程式392
F.2用於Linux 的GCC 編譯程式394
F.3Intel的Linux編譯程式395
參考文獻395
參考文獻匯總396
部分練習題答案及提示403
術語表410