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

匯編語言程序設(shè)計(jì)

匯編語言程序設(shè)計(jì)

定 價(jià):¥48.00

作 者: (美)布魯姆;馬朝暉譯
出版社: 機(jī)械工業(yè)出版社
叢編項(xiàng): 開發(fā)人員專業(yè)技術(shù)叢書
標(biāo) 簽: 匯編語言程序設(shè)計(jì)

ISBN: 9787111175322 出版時(shí)間: 2006-01-01 包裝: 平裝
開本: 16開 頁數(shù): 409 字?jǐn)?shù):  

內(nèi)容簡介

  每種高級語言程序在連接為可執(zhí)行程序之前,都必須被編譯為匯編語言程序,因此對于高級語言程序設(shè)計(jì)者來說,了解編譯器如何生成匯編語言代碼十分有用。本書分為三部分。第一部分講解匯編語言程序設(shè)計(jì)環(huán)境基礎(chǔ),第二部分研究匯編語言程序設(shè)計(jì),最后一部分講解高級匯編語言技術(shù)。本書的主要目的是向使用高級語言的程序員講解編譯器如何從C和C++程序創(chuàng)建匯編語言例程,以及編程人員應(yīng)如何掌握生成的匯編語言代碼,調(diào)整匯編語言例程以提高應(yīng)用程序的性能。本書適合有一定編程經(jīng)驗(yàn)的開發(fā)人員參考。每種高級語言(比如C和C++)在連接為可執(zhí)行程序之前都會(huì)被編譯器轉(zhuǎn)換成匯編語言。本書面向使用高級語言的開發(fā)人員,講解如何查看和解釋編譯器生成的匯編語言代碼,了解它們是如何創(chuàng)建的,從而可以修改編譯器生成的代碼或創(chuàng)建自己的匯編語言例程。本書揭示如何使程序中的函數(shù)更快更高效的內(nèi)幕,以及提高應(yīng)用程序性能的方法。本書主要內(nèi)容:查看高級語言程序生成的匯編語言代碼的好處;如何為Linux奔騰處理器環(huán)境創(chuàng)建獨(dú)立的匯編語言程序;如何將高級函數(shù)和庫整合到匯編語言程序中;如何將匯編語言例程整合到C和C++應(yīng)用程序中;如何在匯編語言程序中使用Linux系統(tǒng)調(diào)用;如何在應(yīng)用程序中使用奔騰處理器的MMX和SSE功能。

作者簡介

  Richard Blum 畢業(yè)于美國普度大學(xué)電氣工程專業(yè),在美國一家政府組織工作了15年以上。在此期間,他使用過各種編程語言(C、C++、Java和Microsoft VB .NET以及C#)編寫實(shí)用程序,因此他發(fā)現(xiàn)一個(gè)非常有價(jià)值的事實(shí):通過研究編譯器生成的匯編語言代碼及使用匯編語言例程,可明顯提高高級語言程序的執(zhí)行速度。本書正是他多年實(shí)踐與研究的成果。

圖書目錄

第一部分  匯編語言程序設(shè)計(jì)環(huán)境基礎(chǔ)
第1章  什么是匯編語言        1
1.1  處理器指令        1
1.1.1  指令碼處理        1
1.1.2  指令碼格式        2
1.2  高級語言        5
1.2.1  高級語言的種類        5
1.2.2  高級語言的特性        7
1.3  匯編語言        8
1.3.1  操作碼助記符        8
1.3.2  定義數(shù)據(jù)        9
1.3.3  命令        11
1.4  小結(jié)        11
第2章  IA-32平臺(tái)        13
2.1  IA-32處理器的核心部分        13
2.1.1  控制單元        14
2.1.2  執(zhí)行單元        18
2.1.3  寄存器        19
2.1.4  標(biāo)志        21
2.2  IA-32的高級特性        23
2.2.1  x87浮點(diǎn)單元        23
2.2.2  多媒體擴(kuò)展        24
2.2.3  流化SIMD擴(kuò)展        24
2.2.4  超線程        25
2.3  IA-32處理器系列        25
2.3.1  Intel處理器        25
2.3.2  非Intel處理器        26
2.4  小結(jié)        27
第3章  相關(guān)的工具        29
3.1  開發(fā)工具        29
3.1.1  匯編器        29
3.1.2  連接器        31
3.1.3  調(diào)試器        31
3.1.4  編譯器        32
3.1.5  目標(biāo)代碼反匯編器        32
3.1.6  簡檔器        33
3.2  GNU匯編器        33
3.2.1  安裝匯編器        33
3.2.2  使用匯編器        35
3.2.3  關(guān)于操作碼語法        36
3.3  GNU連接器        37
3.4  GNU編譯器        39
3.4.1  下載和安裝gcc        39
3.4.2  使用gcc        40
3.5  GNU調(diào)試器程序        42
3.5.1  下載和安裝gdb        42
3.5.2  使用gdb        42
3.6  KDE調(diào)試器        44
3.6.1  下載和安裝kdbg        44
3.6.2  使用kdbg        45
3.7  GNU objdump程序        46
3.7.1  使用objdump        46
3.7.2  objdump范例        47
3.8  GNU簡檔器程序        48
3.8.1  使用簡檔器        48
3.8.2  簡檔范例        50
3.9  完整的匯編開發(fā)系統(tǒng)        51
3.9.1  Linux基礎(chǔ)        51
3.9.2  下載和運(yùn)行MEPIS        52
3.9.3  新的開發(fā)系統(tǒng)        53
3.10  小結(jié)        53
第4章  匯編語言程序范例        55
4.1  程序的組成        55
4.1.1  定義段        55
4.1.2  定義起始點(diǎn)        55
4.2  創(chuàng)建簡單程序        56
4.2.1  CPUID指令        56
4.2.2  范例程序        58
4.2.3  構(gòu)建可執(zhí)行程序        60
4.2.4  運(yùn)行可執(zhí)行程序        60
4.2.5  使用編譯器進(jìn)行匯編        60
4.3  調(diào)試程序        61
4.4  在匯編語言中使用C庫函數(shù)        65
4.4.1  使用printf        66
4.4.2  連接C庫函數(shù)        67
4.5  小結(jié)        68
第二部分  匯編語言程序設(shè)計(jì)基礎(chǔ)
第5章  傳送數(shù)據(jù)        71
5.1  定義數(shù)據(jù)元素        71
5.1.1  數(shù)據(jù)段        71
5.1.2  定義靜態(tài)符號        73
5.1.3  bss段        73
5.2  傳送數(shù)據(jù)元素        75
5.2.1  MOV指令格式        75
5.2.2  把立即數(shù)傳送到寄存器和內(nèi)存        76
5.2.3  在寄存器之間傳送數(shù)據(jù)        77
5.2.4  在內(nèi)存和寄存器之間傳送數(shù)據(jù)        77
5.3  條件傳送指令        83
5.3.1  CMOV指令        83
5.3.2  使用CMOV指令        85
5.4  交換數(shù)據(jù)        86
5.4.1  數(shù)據(jù)交換指令        87
5.4.2  使用數(shù)據(jù)交換指令        91
5.5  堆棧        93
5.5.1  堆棧如何工作        93
5.5.2  壓入和彈出數(shù)據(jù)        94
5.5.3  壓入和彈出所有寄存器        96
5.5.4  手動(dòng)使用ESP和EBP寄存器        97
5.6  優(yōu)化內(nèi)存訪問        97
5.7  小結(jié)        98
第6章  控制執(zhí)行流程        99
6.1  指令指針        99
6.2  無條件分支        100
6.2.1  跳轉(zhuǎn)        100
6.2.2  調(diào)用        103
6.2.3  中斷        106
6.3  條件分支        106
6.3.1  條件跳轉(zhuǎn)指令        106
6.3.2  比較指令        108
6.3.3  使用標(biāo)志位的范例        109
6.4  循環(huán)        112
6.4.1  循環(huán)指令        112
6.4.2  循環(huán)范例        113
6.4.3  防止LOOP災(zāi)難        113
6.5  模仿高級條件分支        114
6.5.1  if語句        115
6.5.2  for循環(huán)        118
6.6  優(yōu)化分支指令        120
6.6.1  分支預(yù)測        120
6.6.2  優(yōu)化技巧        122
6.7  小結(jié)        124
第7章  使用數(shù)字        126
7.1  數(shù)字?jǐn)?shù)據(jù)類型        126
7.2  整數(shù)        127
7.2.1  標(biāo)準(zhǔn)整數(shù)長度        127
7.2.2  無符號整數(shù)        128
7.2.3  帶符號整數(shù)        129
7.2.4  使用帶符號整數(shù)        131
7.2.5  擴(kuò)展整數(shù)        131
7.2.6  在GNU匯編器中定義整數(shù)        134
7.3  SIMD整數(shù)        135
7.3.1  MMX整數(shù)        136
7.3.2  傳送MMX整數(shù)        136
7.3.3  SSE整數(shù)        137
7.3.4  傳送SSE整數(shù)        138
7.4  二進(jìn)制編碼的十進(jìn)制        139
7.4.1  BCD是什么        140
7.4.2  FPU BCD值        140
7.4.3  傳送BCD值        141
7.5  浮點(diǎn)數(shù)        142
7.5.1  浮點(diǎn)數(shù)是什么        143
7.5.2  標(biāo)準(zhǔn)浮點(diǎn)數(shù)據(jù)類型        144
7.5.3  IA-32浮點(diǎn)值        146
7.5.4  在GNU匯編器中定義浮點(diǎn)值        146
7.5.5  傳送浮點(diǎn)值        146
7.5.6  使用預(yù)置的浮點(diǎn)值        148
7.5.7  SSE浮點(diǎn)數(shù)據(jù)類型        149
7.5.8  傳送SSE浮點(diǎn)值        150
7.6  轉(zhuǎn)換        153
7.6.1  轉(zhuǎn)換指令        154
7.6.2  轉(zhuǎn)換范例        154
7.7  小結(jié)        155
第8章  基本數(shù)學(xué)功能        157
8.1  整數(shù)運(yùn)算        157
8.1.1  加法        157
8.1.2  減法        165
8.1.3  遞增和遞減        169
8.1.4  乘法        169
8.1.5  除法        173
8.2  移位指令        175
8.2.1  移位乘法        175
8.2.2  移位除法        177
8.2.3  循環(huán)移位        178
8.3  十進(jìn)制運(yùn)算        178
8.3.1  不打包BCD的運(yùn)算        178
8.3.2  打包BCD的運(yùn)算        180
8.4  邏輯操作        181
8.4.1  布爾邏輯        182
8.4.2  位測試        182
8.5  小結(jié)        183
第9章  高級數(shù)學(xué)功能        185
9.1  FPU環(huán)境        185
9.1.1  FPU寄存器堆棧        185
9.1.2  FPU狀態(tài)、控制和標(biāo)記寄存器        185
9.1.3  使用FPU堆棧        190
9.2  基本浮點(diǎn)運(yùn)算        193
9.3  高級浮點(diǎn)運(yùn)算        196
9.3.1  浮點(diǎn)功能        196
9.3.2  部分余數(shù)        199
9.3.3  三角函數(shù)        201
9.3.4  對數(shù)函數(shù)        203
9.4  浮點(diǎn)條件分支        205
9.4.1  FCOM指令系列        205
9.4.2  FCOMI指令系列        207
9.4.3  FCMOV指令系列        208
9.5  保存和恢復(fù)FPU狀態(tài)        209
9.5.1  保存和恢復(fù)FPU環(huán)境        209
9.5.2  保存和恢復(fù)FPU狀態(tài)        210
9.6  等待和非等待指令        213
9.7  優(yōu)化浮點(diǎn)運(yùn)算        213
9.8  小結(jié)        214
第10章  處理字符串        216
10.1  傳送字符串        216
10.1.1  MOVS指令        216
10.1.2  REP前綴        220
10.1.3  其他REP指令        224
10.2  存儲(chǔ)和加載字符串        225
10.2.1  LODS指令        225
10.2.2  STOS指令        225
10.2.3  構(gòu)建自己的字符串函數(shù)        226
10.3  比較字符串        227
10.3.1  CMPS指令        228
10.3.2  CMPS和REP一起使用        229
10.3.3  字符串不等        230
10.4  掃描字符串        232
10.4.1  SCAS指令        232
10.4.2  搜索多個(gè)字符        233
10.4.3  計(jì)算字符串長度        235
10.5  小結(jié)        236
第11章  使用函數(shù)        237
11.1  定義函數(shù)        237
11.2  匯編函數(shù)        238
11.2.1  編寫函數(shù)        239
11.2.2  訪問函數(shù)        240
11.2.3  函數(shù)的放置        242
11.2.4  使用寄存器        242
11.2.5  使用全局?jǐn)?shù)據(jù)        243
11.3  按照C樣式傳遞數(shù)據(jù)值        244
11.3.1  回顧堆棧        244
11.3.2  在堆棧之中傳遞函數(shù)參數(shù)        244
11.3.3  函數(shù)開頭和結(jié)尾        246
11.3.4  定義局部函數(shù)數(shù)據(jù)        246
11.3.5  清空堆棧        247
11.3.6  范例        248
11.3.7  在操作之中監(jiān)視堆棧        249
11.4  使用獨(dú)立的函數(shù)文件        252
11.4.1  創(chuàng)建獨(dú)立的函數(shù)文件        252
11.4.2  創(chuàng)建可執(zhí)行文件        253
11.4.3  調(diào)試獨(dú)立的函數(shù)文件        254
11.5  使用命令行參數(shù)        255
11.5.1  程序剖析        255
11.5.2  分析堆棧        255
11.5.3  查看命令行參數(shù)        257
11.5.4  查看環(huán)境變量        258
11.5.5  使用命令行參數(shù)的范例        259
11.6  小結(jié)        261
第12章  使用Linux系統(tǒng)調(diào)用        262
12.1  Linux內(nèi)核        262
12.1.1  內(nèi)核組成        262
12.1.2  Linux內(nèi)核版本        267
12.2  系統(tǒng)調(diào)用        268
12.2.1  查找系統(tǒng)調(diào)用        268
12.2.2  查找系統(tǒng)調(diào)用定義        269
12.2.3  常用系統(tǒng)調(diào)用        270
12.3  使用系統(tǒng)調(diào)用        271
12.4  復(fù)雜的系統(tǒng)調(diào)用返回值        275
12.4.1  sysinfo系統(tǒng)調(diào)用        276
12.4.2  使用返回結(jié)構(gòu)        277
12.4.3  查看結(jié)果        278
12.5  跟蹤系統(tǒng)調(diào)用        278
12.5.1  strace程序        278
12.5.2  高級strace參數(shù)        279
12.5.3  監(jiān)視程序系統(tǒng)調(diào)用        280
12.5.4  附加到正在運(yùn)行的程序        282
12.6  系統(tǒng)調(diào)用和C庫        284
12.6.1  C庫        284
12.6.2  跟蹤C(jī)函數(shù)        285
12.6.3  系統(tǒng)調(diào)用和C庫的比較        287
12.7  小結(jié)        287
第三部分  高級匯編語言技術(shù)
第13章  使用內(nèi)聯(lián)匯編        289
13.1  什么是內(nèi)聯(lián)匯編        289
13.2  基本的內(nèi)聯(lián)匯編代碼        292
13.2.1  asm格式        292
13.2.2  使用全局C變量        294
13.2.3  使用volatile修飾符        296
13.2.4  使用替換的關(guān)鍵字        296
13.3  擴(kuò)展asm        296
13.3.1  擴(kuò)展asm格式        296
13.3.2  指定輸入值和輸出值        297
13.3.3  使用寄存器        298
13.3.4  使用占位符        299
13.3.5  引用占位符        301
13.3.6  替換的占位符        302
13.3.7  改動(dòng)的寄存器列表        303
13.3.8  使用內(nèi)存位置        304
13.3.9  使用浮點(diǎn)值        305
13.3.10  處理跳轉(zhuǎn)        306
13.4  使用內(nèi)聯(lián)匯編代碼        308
13.4.1  什么是宏        308
13.4.2  C宏函數(shù)        309
13.4.3  創(chuàng)建內(nèi)聯(lián)匯編宏函數(shù)        310
13.5  小結(jié)        311
第14章  調(diào)用匯編庫        312
14.1  創(chuàng)建匯編函數(shù)        312
14.2  編譯C和匯編程序        313
14.2.1  編譯匯編源代碼文件        314
14.2.2  使用匯編目標(biāo)代碼文件        314
14.2.3  可執(zhí)行文件        315
14.3  在C程序中使用匯編函數(shù)        317
14.3.1  使用整數(shù)返回值        317
14.3.2  使用字符串返回值        318
14.3.3  使用浮點(diǎn)返回值        321
14.3.4  使用多個(gè)輸入值        322
14.3.5  使用混合數(shù)據(jù)類型的輸入值        323
14.4  在C++程序中使用匯編函數(shù)        327
14.5  創(chuàng)建靜態(tài)庫        328
14.5.1  什么是靜態(tài)庫        328
14.5.2  ar命令        328
14.5.3  創(chuàng)建靜態(tài)庫文件        329
14.5.4  編譯靜態(tài)庫        331
14.6  使用共享庫        331
14.6.1  什么是共享庫        331
14.6.2  創(chuàng)建共享庫        332
14.6.3  編譯共享庫        332
14.6.4  運(yùn)行使用共享庫的程序        333
14.7  調(diào)試匯編函數(shù)        334
14.7.1  調(diào)試C程序        334
14.7.2  調(diào)試匯編函數(shù)        336
14.8  小結(jié)        337
第15章  優(yōu)化例程        338
15.1  優(yōu)化編譯器代碼        338
15.1.1  編譯器優(yōu)化級別1        338
15.1.2  編譯器優(yōu)化級別2        339
15.1.3  編譯器優(yōu)化級別3        341
15.2  創(chuàng)建優(yōu)化的代碼        341
15.2.1  生成匯編語言代碼        341
15.2.2  查看優(yōu)化的代碼        344
15.2.3  重新編譯優(yōu)化的代碼        345
15.3  優(yōu)化技巧        345
15.3.1  優(yōu)化運(yùn)算        345
15.3.2  優(yōu)化變量        348
15.3.3  優(yōu)化循環(huán)        352
15.3.4  優(yōu)化條件分支        356
15.3.5  通用子表達(dá)式消除        361
15.4  小結(jié)        363
第16章  使用文件        365
16.1  文件處理順序        365
16.2  打開和關(guān)閉文件        366
16.2.1  訪問類型        366
16.2.2  UNIX權(quán)限        367
16.2.3  打開文件代碼        368
16.2.4  打開錯(cuò)誤返回代碼        369
16.2.5  關(guān)閉文件        370
16.3  寫入文件        370
16.3.1  簡單的寫入范例        370
16.3.2  改變文件訪問模式        372
16.3.3  處理文件錯(cuò)誤        372
16.4  讀取文件        373
16.4.1  簡單的讀取范例        374
16.4.2  更加復(fù)雜的讀取范例        375
16.5  讀取、處理和寫入數(shù)據(jù)        377
16.6  內(nèi)存映射文件        379
16.6.1  什么是內(nèi)存映射文件        379
16.6.2  mmap系統(tǒng)調(diào)用        380
16.6.3  mmap匯編語言格式        381
16.6.4  mmap范例        383
16.7  小結(jié)        387
第17章  使用高級IA-32特性        388
17.1  SIMD簡介        388
17.1.1  MMX        388
17.1.2  SSE        389
17.1.3  SSE2        389
17.2  檢測支持的SIMD操作        390
17.2.1  檢測支持        390
17.2.2  SIMD特性程序        391
17.3  使用MMX指令        392
17.3.1  加載和獲得打包的整數(shù)值        393
17.3.2  執(zhí)行MMX操作        393
17.4  使用SSE指令        400
17.4.1  傳送數(shù)據(jù)        400
17.4.2  處理數(shù)據(jù)        401
17.5  使用SSE2指令        405
17.5.1  傳送數(shù)據(jù)        405
17.5.2  處理數(shù)據(jù)        406
17.6  SSE3指令        408
17.7  小結(jié)        409

本目錄推薦

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