《高級匯編語言程序設計實用教程(第2版)/高等院校信息技術規劃教材》介紹基于80x86匯編語言程序設計的技術和方法,內容包括80x86指令系統、尋址方式、宏指令與偽指令、匯編語言格式與程序結構、分支程序設計、循環程序設計、子程序設計、宏匯編技術、系統功能調用與使用方法、高級語言與匯編語言的調用接口、匯編語言程序調試方法、逆向工程與反匯編等。本書注重實踐,突出應用,在系統地介紹匯編語言程序設計方法和技術的基礎上,通過大量的實例,培養學生分析問題和解決問題的能力;各章均附有單元測試,部分章有單元實驗,便于學生上機實踐和課后練習。本書可作為高等院校計算機及電子信息類專業學生匯編語言程序設計課程的教材,也可作為相關領域的工程技術人員的參考書。
Foreword2009年,我們編寫了《匯編語言程序設計實用教程》教材。教材出版后,得到了許多高校的認可,受到了專家和師生的好評。在此,對一直支持我們工作的各位專家、教師和讀者表示衷心的感謝!
“匯編語言程序設計”是高校計算機科學與技術、軟件工程、網絡工程、電子工程等專業必修的核心課程之一。本書在第1版的基礎上,根據師生反饋意見和微機技術發展,添加了第9章逆向工程與反匯編。本書以實用為目標,重視實驗以及習題的環節,使學習者在學習理論的同時,能夠根據教程提供的單元實驗進行實際動手能力的培養,能夠根據教程提供的標準化單元測試題對所學知識進一步加深理解。本書形成了學習知識、復習測試和操作技能互相融合的整體。
本書源于教學實踐,積累了一線任課教師的教學經驗,具有以下特點。
充分體現知識內容的基礎性和系統性,以突出“實用”為目標。
知識內容具有系統性、完整性和實用性。
本書配有單元實驗,并提供實驗參考程序(單元實驗均在MASM6.11和MASMPlus上調試成功),以提高學生綜合程序設計能力。
本書配有單元測試,有不同難易程度的標準化習題,并附有參考答案,供教師和學生進行測試和練習。
本書內容的組織方式深入淺出,循序漸近,選用內容豐富的應用實例,對基本概念、基本技術與方法的闡述準確明晰,通俗易懂。
本書可作為各類高等學校本科計算機各專業教材以及工科專業教學參考書,也可作為高等學校成人教育的培訓或自學參考書。
本書由任向民、王克朝、王喜德、馮阿芳編寫,其中,第1~3章、第4.1~4.7節由任向民編寫,第4.8節、第4章單元實驗及單元測試、第5章、附錄A~G由馮阿芳編寫,第6章、第9章由王克朝編寫,第7章、第8章由王喜德編寫,最后由任向民、王克朝、王喜德、馮阿芳統稿、定稿。
再版工作得到了清華大學出版社的大力支持和幫助,在此表示衷心的感謝。由于編者時間倉促和水平所限,書中難免有欠妥之處,敬請廣大專家、讀者不吝批評指正。
編者2015年2月
第1章微型計算機系統1
1.1微型計算機系統硬件結構1
1.1.1微型計算機系統的基本組成1
1.1.2微型計算機系統的系統結構3
1.1.3微型計算機系統的性能指標4
1.1.4微型計算機系統的性能評價5
1.28086/8088微處理器6
1.2.18086/8088微處理器的結構6
1.2.28086/8088的寄存器8
1.2.38086/8088的存儲器組織11
1.380x86系列微處理器簡介14
1.3.180286處理器14
1.3.280386處理器15
1.3.380486處理器17
1.3.4奔騰及以上處理器18
1.4微型計算機軟件系統19
1.5計算機硬件系統和軟件系統之間的關系19
單元測試120
第2章程序設計基礎24
2.1程序設計語言24
2.1.1機器語言24
2.1.2匯編語言24
2.1.3高級程序設計語言25
2.1.44GL語言27
2.1.5程序設計語言的比較27
2.2結構化程序設計28◆高級匯編語言程序設計實用教程(第2版)目錄2.2.1結構化程序設計思想28
2.2.2結構化程序設計方法29
2.2.3面向對象程序設計簡介30
2.3程序設計風格30
2.3.1程序設計風格的概念30
2.3.2良好的程序設計風格31
2.4程序設計的基本過程32
單元測試233
第3章指令系統36
3.1指令系統概述36
3.1.1機器指令格式36
3.1.2尋址技術37
3.1.3立即尋址37
3.1.4寄存器尋址38
3.1.5存儲器尋址方式38
3.28086/8088指令系統42
3.2.1數據傳送指令42
3.2.2算術運算指令48
3.2.3邏輯運算和移位指令52
3.2.4處理器控制指令57
3.380x86指令系統58
3.3.180286指令系統58
3.3.280386指令系統60
3.3.380486指令系統66
3.3.4Pentium指令系統67
單元測試368
第4章匯編語言74
4.1匯編語言語句74
4.1.1匯編語言語句分類74
4.1.2匯編語言語句格式74
4.2符號定義語句75
4.2.1等值語句75
4.2.2等號語句76
4.2.3解除定義語句76
4.3數據定義語句76
4.4匯編語言數據表示與運算符78
4.4.1常數78
4.4.2變量79
4.4.3標號80
4.4.4表達式80
4.5其他偽指令語句86
4.5.1段結構偽指令86
4.5.2完整段定義偽指令89
4.5.3過程定義偽指令90
4.5.4模塊定義偽指令90
4.5.580x86指令集選擇偽指令91
4.5.6簡化段定義偽指令92
4.6宏指令94
4.6.1宏指令定義、調用及展開94
4.6.2宏操作符96
4.6.3LOCAL偽指令99
4.7重復匯編與條件匯編100
4.7.1重復匯編100
4.7.2條件匯編102
4.8常用的DEBUG命令104
4.8.1DEBUG程序的調用104
4.8.2DEBUG的主要命令105
單元實驗匯編語言程序的調試與運行111
實驗1MASM使用方法111
實驗2DEBUG命令113
單元測試4115
第5章匯編語言程序設計基本技術123
5.1順序程序設計123
5.2分支程序設計125
5.2.1轉移指令126
5.2.2雙分支結構程序設計129
5.2.3多分支結構程序設計131
5.3循環程序設計135
5.3.1循環控制指令135
5.3.2串操作指令136
5.3.3循環程序結構141
5.3.4循環控制方法142
5.3.5多重循環程序設計146
5.4子程序設計148
5.4.1子程序定義148
5.4.2子程序的調用和返回149
5.4.3子程序的參數傳遞153
5.4.4子程序嵌套與遞歸157
單元實驗匯編語言程序設計160
實驗1順序程序設計160
實驗2分支程序設計161
實驗3循環程序設計(一)163
實驗4循環程序設計(二)164
實驗5子程序設計165
單元測試5166
第6章系統功能調用175
6.1系統功能調用概述175
6.2DOS系統功能調用177
6.2.1常用DOS系統功能調用177
6.2.2DOS系統功能調用實例185
6.3BIOS系統功能調用191
6.3.1BIOS系統功能調用概述191
6.3.2BIOS系統功能調用實例193
單元實驗系統功能調用195
單元測試6201
第7章匯編語言與高級語言接口204
7.1混合編程204
7.2C/C++的嵌入式匯編205
7.2.1在C/C++程序中嵌入匯編語句206
7.2.2在嵌入式匯編中訪問C/C++的數據209
7.2.3用匯編語言程序段編寫C函數210
7.2.4匯編程序調用C/C++函數213
7.3用C/C++調用匯編214
7.3.1接口214
7.3.2調用匯編模塊216
單元實驗混合編程225
實驗1在C/C++中嵌入匯編225
實驗2使用模塊連接方式編程227
單元測試7229
第8章綜合程序設計233
8.1顯示程序設計233
8.1.1顯示程序概述233
8.1.2顯示程序設計實例237
8.2鍵盤輸入/輸出程序設計241
8.2.1鍵盤輸入/輸出程序概述241
8.2.2鍵盤輸入/輸出程序設計實例243
8.3文件管理246
8.3.1文件管理概述246
8.3.2文件管理程序設計實例251
單元實驗綜合程序設計254
實驗1顯示程序設計254
實驗2輸入/輸出程序設計258
實驗3文件存取程序設計264
單元測試8269
第9章逆向工程與反匯編273
9.1逆向工程與反匯編概述273
9.1.1反匯編的概念273
9.1.2反匯編的應用場景274
9.1.3反匯編的方法275
9.1.4基本的反匯編算法275
9.1.5軟件逆向工程275
9.2常用逆向工程與反匯編工具276
9.2.1分類工具277
9.2.2摘要工具278
9.2.3反匯編器279
9.3反匯編程序中函數的理解280
9.3.1概述280
9.3.2函數調用約定282
9.3.3函數參數286
9.3.4函數的局部變量290
9.3.5函數的返回值291
9.3.6函數原型的還原291
9.4反匯編程序中數據結構的理解294
9.4.1數組294
9.4.2結構體299
9.5反匯編程序中分支語句的理解304
9.5.1if分支語句305
9.5.2switch分支語句306
9.6反匯編程序中循環語句的理解308
9.6.1for循環語句308
9.6.2while/do…while循環語句310
9.7綜合實例313
單元測試9322
附錄A單元測試參考答案325
附錄B80x86指令集339
附錄C偽指令簡表345
附錄DDEBUG命令表348
附錄EASCII碼表350
附錄FDOS系統功能調用表(INT 21H)352
附錄GBIOS中斷355
參考文獻358