注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網(wǎng)絡軟件與程序設計匯編語言/編譯原理匯編語言編程藝術

匯編語言編程藝術

匯編語言編程藝術

定 價:¥98.00

作 者: (美)Randall Hyde 著;陳曙暉 譯
出版社: 清華大學出版社
叢編項:
標 簽: 匯編語言程序設計

ISBN: 9787302090571 出版時間: 2005-01-01 包裝: 平裝
開本: 26cm 頁數(shù): 796 字數(shù):  

內容簡介

  譯者簡介:陳曙暉,國防科技大學計算機專業(yè)博士,老師。1998年參加工作,在國防科技大學網(wǎng)絡與信息安全研究所從事銀河超級計算機網(wǎng)絡系統(tǒng)和核心路由器的開發(fā)工作,擔任核心路由器配置管理分系統(tǒng)的開發(fā)負責人,曾獲得軍隊科技進步獎一等獎一項(銀河超級計算機網(wǎng)絡系統(tǒng))、二等獎一項(核心路由器系統(tǒng))。審校者簡介:毛希平,博士,清華大學計算機系老師,主講“匯編語言程序設計”課程,并在清華大學計算機系高性能計算研究所從事研究工作,主要研究方向:并行計算和網(wǎng)格計算。查看本書序言(作者:清華大學教授溫冬嬋)相信很多人都看過該書的網(wǎng)絡版,它濃縮了網(wǎng)絡版的精華,特別是對HLA的講解,可謂入木三分?!狢herryLam(高級程序員,印度)我一直認為,只有經(jīng)過多年的學習和實際演練,才能掌握匯編語言程序設計,這本書改變了我的看法?!狫amesBrodin(軟件公司技術總監(jiān),美國)對于想快速成為匯編語言開發(fā)人員的學習者來說,本書是多年難遇的好書。——ConnyMeilin(大學教授,瑞典)作者將多年來的開發(fā)和教學經(jīng)驗融合在大量的編程實例中,讀者通過本書能快速地學會匯編語言程序設計,掌握其中的編程技巧——溫冬嬋(清華大學教授,中國)本書以X86系列微機為背景,從簡單的Hello程序開始,系統(tǒng)而詳細地闡述了X86微機匯編語言編程的各種基礎知識和編程技巧,內容涉及到數(shù)據(jù)表示、存儲器管理、各種數(shù)據(jù)類型、過程、與匯編語言相關的體系結構、控制結構、文件、宏指令、位處理指令、字符串指令、MMX指令、類和對象,以及混合語言編程等,尤其是在高級匯編語言(HLA)方面,該書給予了細致深入的講解。對于有意學習X86匯編語言編程的程序員來說,這是一本難得的好書。本書的作者RandallHyde在大學中教授匯編語言十多年,并且開發(fā)了好幾個商用軟件,具有豐富的匯編語言開發(fā)經(jīng)驗。該書的英文電子版受到了成千上萬的網(wǎng)站和高級程序員的高度評價,已經(jīng)成為了高級匯編語言編程方面的一本經(jīng)典之作。雖然該書的出版時間不長,但在Amazon上為該書作出評價的人很多,而且?guī)缀跛械娜硕冀o予5星的評價,可見其內容之好。筆者相信,隨著時間的推移,它在程序員中的影響回越來越大。

作者簡介

暫缺《匯編語言編程藝術》作者簡介

圖書目錄

第1章  進入?yún)R編語言的世界 1
1.1  本章概述 1
1.2  HLA程序的結構 1
1.3  運行第一個HLA程序 3
1.4  基本的HLA數(shù)據(jù)聲明 4
1.5  布爾值 6
1.6  字符值 6
1.7  Intel 80x86處理器簡介 7
1.8  基本的機器指令 11
1.9  基本的HLA控制結構 15
1.9.1  HLA語句中的布爾表達式 15
1.9.2  HLA的IF..THEN..ELSEIF..ELSE..ENDIF語句 17
1.9.3  布爾表達式中的邏輯與、邏輯或以及邏輯非 19
1.9.4  WHILE..ENDWHILE語句 21
1.9.5  FOR..ENDFOR語句 21
1.9.6  REPEAT..UNTIL語句 22
1.9.7  BREAK和BREAKIF語句 23
1.9.8  FOREVER..ENDFOR語句 23
1.9.9  TRY..EXCEPTION..ENDTRY語句 24
1.10  HLA標準庫入門 27
1.10.1  STDIO模塊中的預定義常量 28
1.10.2  標準輸入與標準輸出 29
1.10.3  stdout.newln例程 29
1.10.4  stdout.putiX例程 29
1.10.5  stdout.putiXSize例程 30
1.10.6  stdout.put例程 31
1.10.7  stdin.getc例程 32
1.10.8  stdin.getiX例程 34
1.10.9  stdin.readLn與stdin.flushInput例程 35
1.10.10  stdin.get例程 36
1.11 關于TRY..ENDTRY的其他細節(jié) 36
1.11.1  TRY..ENDTRY嵌套語句 37
1.11.2  TRY..ENDTRY語句中不受保護的子句 39
1.11.3  TRY..ENDTRY語句中的ANYEXCEPTION子句 42
1.11.4  寄存器與TRY..ENDTRY語句 42
1.12  高級匯編語言與低級匯編語言的比較 44
1.13  更多信息 45
第2章  數(shù)據(jù)表示 46
2.1  本章概述 46
2.2  數(shù)字系統(tǒng) 46
2.2.1  回顧十進制系統(tǒng) 46
2.2.2  二進制數(shù)字系統(tǒng) 47
2.2.3  二進制格式 48
2.3  十六進制數(shù)字系統(tǒng) 49
2.4  數(shù)據(jù)結構 51
2.4.1  位 51
2.4.2  半字節(jié) 51
2.4.3  字節(jié) 52
2.4.4  字 53
2.4.5  雙字 54
2.4.6  四字與長字 55
2.5  二進制數(shù)與十六進制數(shù)的算術運算 56
2.6  關于數(shù)字及其表示法 56
2.7  位邏輯運算 59
2.8  二進制數(shù)和位串的邏輯運算 61
2.9  有符號數(shù)和無符號數(shù) 63
2.10  符號擴展、零擴展、壓縮和飽和 67
2.11  移位和循環(huán)移位 71
2.12  位域和壓縮數(shù)據(jù) 75
2.13  浮點運算簡介 79
2.13.1  IEEE浮點格式 82
2.13.2  HLA為浮點數(shù)值提供的支持 85
2.14  BCD數(shù)據(jù)表示 88
2.15  字符 89
2.15.1  ASCII字符譯碼 89
2.15.2  HLA對ASCII字符提供的支持 92
2.16  Unicode字符集 96
2.17  更多信息 96
第3章  存儲器的訪問與結構 97
3.1  本章概述 97
3.2  80x86的尋址方式 97
3.2.1  80x86寄存器尋址方式 97
3.2.2  80x86的32位存儲器尋址方式 98
3.3  運行時存儲器的結構 104
3.3.1  代碼段 105
3.3.2  靜態(tài)段 106
3.3.3  只讀數(shù)據(jù)段 107
3.3.4  存儲段 108
3.3.5  @NOSTORAGE屬性 108
3.3.6  Var段 109
3.3.7  程序中聲明段的結構 110
3.4  HLA如何為變量分配內存 111
3.5  HLA對數(shù)據(jù)對齊的支持 112
3.6  地址表達式 115
3.7  類型強制轉換 117
3.8  寄存器類型強制轉換 119
3.9  棧段與PUSH及POP指令 120
3.9.1  基本的PUSH指令 120
3.9.2  基本的POP指令 121
3.9.3  用PUSH和POP指令來保護寄存器 123
3.9.4  棧的LIFO數(shù)據(jù)結構 123
3.9.5  其他的PUSH和POP指令 125
3.9.6  不使用出棧而從棧內移除數(shù)據(jù) 127
3.9.7  訪問已入棧而未出棧的數(shù)據(jù) 129
3.10  動態(tài)內存分配和堆段 130
3.11  INC和DEC指令 134
3.12  獲取存儲器對象的地址 134
3.13  更多信息 135
第4章  常量、變量與數(shù)據(jù)類型 136
4.1  本章概述 136
4.2  一些額外的指令:INTMUL、BOUND、INTO 136
4.3  TBYTE數(shù)據(jù)類型 141
4.4  HLA常量和數(shù)值聲明 141
4.4.1  常量類型 145
4.4.2  字符串和字符字面常量 145
4.4.3  CONST段中的字符串常量與文本常量 147
4.4.4  常量表達式 149
4.4.5  HLA程序中的多個CONST段以及它們的順序 151
4.4.6  HLA的VAL段 151
4.4.7  在程序中的任意位置修改VAL對象 152
4.5  HLA的TYPE段 153
4.6  ENUM 和HLA枚舉數(shù)據(jù)類型 154
4.7  指針數(shù)據(jù)類型 155
4.7.1  在匯編語言中使用指針 156
4.7.2  在HLA中聲明指針 157
4.7.3  指針常量和指針常量表達式 158
4.7.4  指針變量和動態(tài)內存分配 159
4.7.5  指針的常見問題 160
4.8  HLA標準庫CHARS.HHF模型 164
4.9  復合數(shù)據(jù)類型 166
4.10  字符串 167
4.11  HLA字符串 169
4.12  訪問字符串中的某個字符 175
4.13  HLA字符串模塊和其他與字符串相關的例程 177
4.14  存儲器內轉換 188
4.15  字符集 190
4.16  在HLA中實現(xiàn)字符集 190
4.17  HLA字符集常量和字符集表達式 192
4.18  HLA HLL布爾表達式中的IN操作符 193
4.19  HLA標準庫對字符集的支持 194
4.20  在HLA程序中使用字符集 197
4.21  數(shù)組 198
4.22  在HLA程序中聲明數(shù)組 199
4.23  HLA數(shù)組常量 200
4.24  訪問一維數(shù)組的元素 201
4.25  多維數(shù)組 204
4.25.1  以行為主排列 205
4.25.2  以列為主排列 208
4.26  多維數(shù)組的存儲空間分配 209
4.27  匯編語言中多維數(shù)組元素的訪問 211
4.28  大數(shù)組和MASM(只適用于Windows程序員) 212
4.29  記錄 212
4.30  記錄常量 215
4.31  記錄數(shù)組 216
4.32  數(shù)組/記錄作為記錄字段 217
4.33  控制記錄中的字段偏移量 220
4.34  對齊記錄中的字段 221
4.35  記錄指針 223
4.36  聯(lián)合 224
4.37  匿名聯(lián)合 226
4.38  變量類型 227
4.39  聯(lián)合常量 228
4.40  命名空間 229
4.41  匯編語言中的動態(tài)數(shù)組 232
4.42  HLA標準庫數(shù)組支持 234
4.43  更多信息 237
第5章  過程與單元 238
5.1  本章概述 238
5.2  過程 238
5.3  機器狀態(tài)的保存 240
5.4  過程的提前返回 244
5.5  局部變量 245
5.6  其他局部和全局符號類型 250
5.7  參數(shù) 250
5.7.1  值傳遞 251
5.7.2  引用傳遞 254
5.8  函數(shù)和函數(shù)的結果 257
5.8.1  返回函數(shù)結果 257
5.8.2  HLA的指令合成 258
5.8.3  HLA過程的@RETURNS選項 260
5.9  遞歸 262
5.10  過程的向前引用 266
5.11  過程的底層實現(xiàn)與CALL指令 267
5.12  過程與堆棧 269
5.13  活動記錄 272
5.14  標準入口序列 275
5.15  標準出口序列 276
5.16  自動(局部)變量的底層實現(xiàn) 277
5.17  參數(shù)的底層實現(xiàn) 279
5.17.1  在寄存器中傳遞參數(shù) 279
5.17.2  在代碼流中傳遞參數(shù) 281
5.17.3  在堆棧中傳遞參數(shù) 284
5.18  過程指針 304
5.19  過程參數(shù) 307
5.20  無類型的引用參數(shù) 308
5.21  管理大型程序 309
5.22  #INCLUDE偽指令 310
5.23  忽略重復的#INCLUDE操作 311
5.24  單元與EXTERNAL偽指令 312
5.24.1  偽指令EXTERNAL的行為 316
5.24.2  HLA中的頭文件 317
5.25  命名空間的污染 319
5.26  更多信息 321
第6章  算術運算 322
6.1  本章概述 322
6.2  80x86的整數(shù)運算指令 322
6.2.1  MUL和IMUL指令 322
6.2.2  DIV和IDIV指令 325
6.2.3  CMP指令 327
6.2.4  SETcc指令 331
6.2.5  TEST指令 333
6.3  算術表達式 334
6.3.1  簡單賦值語句 335
6.3.2  簡單表達式 336
6.3.3  復雜表達式 338
6.3.4  可交換運算符 342
6.4  邏輯(布爾)表達式 343
6.5  機器特征與運算技巧 345
6.5.1  不使用MUL、IMUL或INTMUL的乘法 346
6.5.2  不使用DIV或IDIV的除法 347
6.5.3  使用AND實現(xiàn)模N計數(shù)器 347
6.5.4  疏忽使用機器特性 348
6.6  浮點運算 348
6.6.1  FPU寄存器 348
6.6.2  FPU的數(shù)據(jù)類型 355
6.6.3  FPU的指令集 356
6.6.4  FPU的數(shù)據(jù)轉移指令 356
6.6.5  換算指令 358
6.6.6  算術運算指令 360
6.6.7  比較指令 365
6.6.8  常量指令 367
6.6.9  超越指令 367
6.6.10  其他指令 369
6.6.11  整數(shù)操作 370
6.7  浮點表達式到匯編語言的轉換 370
6.7.1  算術表達式到后綴表示法的轉換 372
6.7.2  把后綴表達式轉換成匯編語言 373
6.8  HLA標準庫對浮點算術運算的支持 375
6.8.1  函數(shù)stdin.getf和fileio.getf 375
6.8.2  HLA數(shù)學庫中的三角函數(shù) 375
6.8.3  HLA數(shù)學庫中的指數(shù)函數(shù)和對數(shù)函數(shù) 376
6.9  算術運算小結 377
第7章  低級控制結構 378
7.1  本章概述 378
7.2  低級控制結構 378
7.3  語句標號 378
7.4  無條件控制轉移(JMP) 380
7.5  條件跳轉指令 383
7.6  “中級”控制結構:JT和JF 386
7.7  使用匯編語言實現(xiàn)通用控制結構 386
7.8  選擇 386
7.8.1  IF..THEN..ELSE序列 388
7.8.2  將HLA的IF語句翻譯成純匯編語言語句 391
7.8.3  使用完全布爾求值實現(xiàn)復雜的IF語句 396
7.8.4  “短路”布爾求值 397
7.8.5  “短路”布爾求值與完全布爾求值 399
7.8.6  匯編語言中IF語句的高效實現(xiàn) 401
7.8.7  SWITCH/CASE語句 405
7.9  狀態(tài)機和間接跳轉 415
7.10  “面條式”代碼 418
7.11  循環(huán) 418
7.11.1  WHILE循環(huán) 419
7.11.2  REPEAT..UNTIL循環(huán) 420
7.11.3  FOREVER..ENDFOR循環(huán) 421
7.11.4  FOR循環(huán) 422
7.11.5  BREAK和CONTINUE語句 423
7.11.6  寄存器的使用與循環(huán) 427
7.12  性能提高 428
7.12.1  將結束條件判斷放在循環(huán)結尾 429
7.12.2  反向執(zhí)行循環(huán) 431
7.12.3  循環(huán)不變計算 432
7.12.4  循環(huán)展開 433
7.12.5  歸納變量 434
7.13  HLA中的混合控制結構 435
7.14  更多信息 437
第8章  文件 438
8.1  本章概述 438
8.2  文件組織 438
8.2.1  作為記錄列表的文件 438
8.2.2  二進制文件與文本文件的比較 440
8.3  順序文件 442
8.4  隨機訪問文件 449
8.5  ISAM文件 453
8.6  截斷文件 456
8.7  更多信息 458
第9章  高級算術運算 459
9.1  本章概述 459
9.2  多精度操作 459
9.2.1  擴充精度操作的HLA標準庫支持 459
9.2.2  多精度加法操作 462
9.2.3  多精度減法操作 464
9.2.4  擴充精度比較操作 465
9.2.5  擴充精度乘法操作 470
9.2.6  擴充精度除法操作 473
9.2.7  擴充精度NEG操作 482
9.2.8  擴充精度AND操作 483
9.2.9  擴充精度OR操作 484
9.2.10  擴充精度XOR操作 484
9.2.11  擴充精度NOT操作 485
9.2.12  擴充精度移位操作 485
9.2.13  擴充精度循環(huán)操作 488
9.2.14  擴充精度I/O 489
9.3  對不同長度的操作數(shù)進行操作 509
9.4  十進制算術運算 510
9.4.1  文字BCD常量 512
9.4.2  80x86的DAA指令和DAS指令 512
9.4.3  80x86 AAA、AAS、AAM和AAD指令 514
9.4.4  使用FPU的壓縮十進制算術操作 515
9.5  表 517
9.5.1  通過表查找進行函數(shù)計算 517
9.5.2  域調節(jié) 521
9.5.3  產(chǎn)生表 522
9.5.4  表查找的性能 526
9.6  更多信息 526
第10章  宏與HLA編譯時語言 527
10.1  本章概述 527
10.2  編譯時語言 527
10.3  #PRINT和#ERROR語句 528
10.4  編譯時常量和變量 530
10.5  編譯時表達式和操作符 530
10.6  編譯時函數(shù) 533
10.6.1  類型轉換編譯時函數(shù) 533
10.6.2  數(shù)字編譯時函數(shù) 535
10.6.3  字符分類編譯時函數(shù) 535
10.6.4  編譯時字符串函數(shù) 535
10.6.5  編譯時模式匹配函數(shù) 536
10.6.6  編譯時符號信息 537
10.6.7  其他編譯時函數(shù) 538
10.6.8  編譯時TEXT對象的類型轉換 539
10.7  條件編譯(編譯時決定) 540
10.8  重復編譯(編譯時循環(huán)) 544
10.9  宏(編譯時過程) 547
10.9.1  標準宏 548
10.9.2  宏的參數(shù) 550
10.9.3  宏中的局部符號 556
10.9.4  作為編譯時過程的宏 559
10.9.5  使用宏模擬函數(shù)重載 559
10.10  編寫編譯時“程序” 565
10.10.1  在編譯時構造數(shù)據(jù)表 565
10.10.2  循環(huán)展開 570
10.11  在不同的源文件中使用宏 571
10.12  更多信息 571
第11章  位操作 573
11.1  本章概述 573
11.2  位數(shù)據(jù) 573
11.3  位操作指令 574
11.4  作為位累加器的進位標志位 581
11.5  位串的壓縮與解壓縮 581
11.6  接合位組與分布位串 584
11.7  壓縮的位串數(shù)組 586
11.8  搜索位 588
11.9  位的計數(shù) 590
11.10  倒置位串 593
11.11  合并位串 595
11.12  提取位串 596
11.13  搜索位模式 598
11.14  HLA標準庫的位模塊 599
11.15  更多信息 600
第12章  字符串指令 602
12.1  本章概述 602
12.2  80x86字符串指令 602
12.2.1  字符串指令的操作過程 603
12.2.2  REP/REPE/REPZ和REPNZ/REPNE前綴 603
12.2.3  方向標志位 604
12.2.4  MOVS指令 606
12.2.5  CMPS指令 611
12.2.6  SCAS指令 614
12.2.7  STOS指令 615
12.2.8  LODS指令 615
12.2.9  從LODS和STOS構建復雜的字符串函數(shù) 616
12.3  80x86字符串指令的性能 617
12.4  更多信息 617
第13章  MMX指令集 618
13.1  本章概述 618
13.2  判斷CPU是否支持MMX指令集 618
13.3  MMX編程環(huán)境 619
13.3.1  MMX寄存器 619
13.3.2  MMX數(shù)據(jù)類型 621
13.4  設計MMX指令集的目的 622
13.5  飽和算法和回轉模式 622
13.6  MMX指令操作數(shù) 623
13.7  MMX技術指令 625
13.7.1  MMX數(shù)據(jù)傳遞指令 625
13.7.2  MMX轉換指令 625
13.7.3  MMX壓縮算術指令 630
13.7.4  MMX邏輯指令 632
13.7.5  MMX比較指令 634
13.7.6  MMX移位指令 637
13.7.7  EMMS指令 639
13.8  MMX編程方案 640
13.9  更多信息 650
第14章  類與對象 651
14.1  本章概述 651
14.2  通用原則 651
14.3  HLA中的類 653
14.4  對象 656
14.5  繼承 657
14.6  重載 658
14.7  虛擬方法與靜態(tài)過程 659
14.8  編寫類方法和過程 661
14.9  對象實現(xiàn) 665
14.9.1  虛擬方法表 668
14.9.2  帶繼承的對象表達式 669
14.10  構造函數(shù)和對象初始化 673
14.10.1  構造函數(shù)中的動態(tài)對象分配 674
14.10.2  構造函數(shù)和繼承 676
14.10.3  構造函數(shù)的參數(shù)和過程重載 680
14.11  析構函數(shù) 680
14.12  HLA的“_initialize_”和“_finalize_”字符串 681
14.13  抽象方法 687
14.14  運行時類型信息(RTTI) 690
14.15  調用基類的方法 691
14.16  更多信息 692
第15章  混合語言編程 693
15.1  本章概述 693
15.2  在同一程序中混合使用HLA和MASM/Gas代碼 693
15.2.1  在HLA程序中內嵌(MASM/Gas)匯編代碼 693
15.2.2  鏈接MASM/Gas匯編模塊和HLA模塊 696
15.3  使用Delphi/Kylix和HLA編程 700
15.3.1  鏈接HLA模塊與Delphi/Kylix程序 701
15.3.2  寄存器保存 704
15.3.3  函數(shù)的結果 705
15.3.4  調用慣例 711
15.3.5  Kylix中的值傳遞、引用傳遞、CONST參數(shù)和OUT參數(shù) 717
15.3.6  Delphi/Kylix和HLA之間對應的標量數(shù)據(jù)類型 718
15.3.7  在Delphi/Kylix和HLA代碼之間傳遞字符串數(shù)據(jù) 720
15.3.8  在HLA和Kylix之間傳遞記錄數(shù)據(jù) 722
15.3.9  在Delphi/Kylix和HLA之間傳遞集合數(shù)據(jù) 726
15.3.10  在HLA和Delphi/Kylix之間傳遞數(shù)組數(shù)據(jù) 727
15.3.11  從HLA代碼中引用Delphi/Kylix對象 727
15.4  使用C/C++和HLA編程 730
15.4.1  鏈接HLA模塊和C/C++程序 731
15.4.2  寄存器保存 734
15.4.3  函數(shù)結果 734
15.4.4  調用慣例 734
15.4.5  C/C++中的值傳遞和引用傳遞 738
15.4.6  C/C++和HLA之間的標量數(shù)據(jù)類型一致性 738
15.4.7  在C/C++和HLA代碼之間傳遞字符串數(shù)據(jù) 740
15.4.8  在HLA和C/C++之間傳遞記錄/結構數(shù)據(jù) 740
15.4.9  在HLA和C/C++之間傳遞數(shù)組數(shù)據(jù) 742
15.5  更多信息 742
附錄A  ASCII字符集 743
附錄B  80x86指令集 747

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號