隨著計算機技術的發(fā)展,學生要學習的課程越來越多,每門課的學時越來越少,而匯編語言從16位過渡到32位,指令越來越多,如何在有限的時間里學到盡可能多的知識,特別是如何提高匯編語言的編程能力,壓力越來越大。于是,本書作者結(jié)合多年的教學與軟件開發(fā)的經(jīng)驗,編寫了本書。
本書雖詳盡介紹了CPU指令和FPU指令等,但在實際程序設計過程中,往往可能只需要掌握其中20%的指令,就能解決現(xiàn)實工作中80%的問題,而剩余20%的問題,可以根據(jù)具體的需要,查閱具體的指令;其中的案例也是作者根據(jù)多年教學經(jīng)驗歸納、總結(jié)、設計的,文字表述也是經(jīng)過再三斟酌的,插圖也是經(jīng)過專門加工的。
第1章 匯編語言基礎知識 1
1.1 計數(shù)制 1
1.1.1 十進制(Decimal) 1
1.1.2 二進制(Binary) 1
1.1.3 八進制(Octal) 2
1.1.4 十六進制(HexaDecimal) 2
1.2 進制數(shù)間的轉(zhuǎn)換 3
1.2.1 十進制轉(zhuǎn)二進制 3
1.2.2 十進制轉(zhuǎn)八進制和十六進制 4
1.2.3 十進制轉(zhuǎn)二進制加法口算方法 4
1.2.4 十進制轉(zhuǎn)二進制減法口算方法 5
1.2.5 十進制轉(zhuǎn)二進制其他口算方法 6
1.3 計算機計量單位 6
1.3.1 計算機存儲容量計量單位 6
1.3.2 計算機時鐘周期計量單位 6
1.4 數(shù)值數(shù)據(jù)的表示 7
1.4.1 無符號整數(shù)的表示 7
1.4.2 有符號整數(shù)的表示 7
1.4.3 移碼 8
1.4.4 BCD碼 9
1.4.5 浮點數(shù) 9
1.5 字符數(shù)據(jù)的表示 12
1.5.1 ASCII碼 12
1.5.2 機內(nèi)碼 12
1.5.3 Unicode 13
1.5.4 UTF-8 14
習題1 14
第2章 Win32匯編語言基本組成 16
2.1 程序結(jié)構 16
2.1.1 處理器選擇偽指令 17
2.1.2 .model偽指令 18
2.1.3 指明是否區(qū)分大小寫 18
2.1.4 要引用的頭文件和庫文件 18
2.1.5 函數(shù)原型PROTO聲明 19
2.1.6 函數(shù)原型EXTRN聲明 19
2.1.7 變量的定義及使用 20
2.1.8 數(shù)據(jù)段和代碼段的定義 21
2.1.9 注釋 22
2.1.10 指令、標號和分行 22
2.1.11 invoke偽指令調(diào)用函數(shù) 23
2.1.12 Call指令調(diào)用函數(shù) 23
2.1.13 函數(shù)調(diào)用返回值 24
2.1.14 函數(shù)的定義 24
2.1.15 局部變量的定義 26
2.1.16 程序結(jié)束 27
2.1.17 匯編結(jié)束 27
2.2 數(shù)據(jù)類型 27
2.2.1 整數(shù) 27
2.2.2 整數(shù)常量表達式 28
2.2.3 浮點數(shù) 30
2.2.4 字符和字符串 33
2.2.5 結(jié)構體 34
習題2 36
第3章 Win32匯編語言的編譯運行 40
3.1 配置編譯鏈接環(huán)境 40
3.1.1 配置VC6.0環(huán)境 41
3.1.2 MASM32的安裝 41
3.1.3 配置MASM32環(huán)境 44
3.1.4 通過注冊表配置VC和MASM32環(huán)境 44
3.2 命令提示符下編譯鏈接和運行 44
3.3 VC環(huán)境下編譯鏈接和運行 46
3.4 C/C++嵌入?yún)R編指令 48
3.4.1 匯編指令訪問C整型變量 48
3.4.2 匯編指令讀取C整型數(shù)組元素 49
3.4.3 匯編指令寫入C字符數(shù)組 50
3.5 C程序反匯編生成匯編源程序 51
3.5.1 C程序編譯時生成匯編語言源程序 51
3.5.2 修改C程序反匯編生成的匯編源程序 52
習題3 55
第4章 CPU指令系統(tǒng) 57
4.1 系統(tǒng)結(jié)構 58
4.2 80386微處理器結(jié)構 59
4.3 CPU寄存器 61
4.3.1 16位寄存器組 61
4.3.2 32位寄存器組 61
4.3.3 標志寄存器EFlags 62
4.4 80X86處理器工作模式 64
4.5 存儲器 65
4.6 操作數(shù)尋址方式 67
4.7 數(shù)據(jù)傳送類指令 71
4.7.1 通用數(shù)據(jù)傳送MOV/MOV[SZ]X 71
4.7.2 數(shù)據(jù)交換XCHG 73
4.7.3 字節(jié)查表轉(zhuǎn)換XLAT[B] 75
4.7.4 字節(jié)反向存儲BSWAP 76
4.7.5 入棧PUSH/PUSHA[D] 76
4.7.6 出棧POP/POPA[D] 77
4.7.7 取地址LEA/L[DEFGS]S 77
4.7.8 EFlags低8位與AH傳送LAHF/SAHF 78
4.7.9 EFlags出入棧PUSHF[D]/POPF[D] 79
4.7.10 進位位CF操作CLC/STC/CMC 79
4.7.11 方向位DF操作CLD/STD 79
4.7.12 中斷允許位IF操作CLI/STI 79
4.8 整數(shù)算術運算指令 79
4.8.1 加法ADD/ADC/INC/XADD 80
4.8.2 減法SUB/SBB/DEC/NEG 82
4.8.3 乘法MUL/IMUL 82
4.8.4 除法DIV/IDIV 83
4.8.5 符號擴展CBW/CWD/CDQ 85
4.8.6 整數(shù)比較CMP/CMPXCHG[8B] 86
4.9 調(diào)整指令(實現(xiàn)大數(shù)運算) 87
4.9.1 數(shù)字字符加法調(diào)整AAA 87
4.9.2 數(shù)字字符減法調(diào)整AAS 89
4.9.3 二進制編碼調(diào)整為BCD碼AAM 90
4.9.4 BCD碼調(diào)整為二進制編碼AAD 90
4.9.5 BCD碼加法調(diào)整DAA 91
4.9.6 BCD碼減法調(diào)整DAS 92
4.10 邏輯運算指令 93
4.10.1 邏輯與操作AND 93
4.10.2 邏輯或操作OR 94
4.10.3 邏輯非操作NOT 94
4.10.4 邏輯異或操作XOR 94
4.10.5 邏輯比較測試TEST 95
4.11 位操作指令 96
4.11.1 算術移位SAL/SAR 96
4.11.2 邏輯移位SHL/SHR 97
4.11.3 雙精度移位SHLD/SHRD 98
4.11.4 不帶進位循環(huán)移位ROL/ROR 100
4.11.5 帶進位循環(huán)移位RCL/RCR 100
4.11.6 位掃描BSF/BSR 101
4.11.7 第i位操作BT[CRS] 103
4.12 串操作指令 104
4.12.1 重復串操作REP[E|Z|NE|NZ] 105
4.12.2 移串操作MOVS[B|W|D] 106
4.12.3 取串操作LODS[B|W|D] 108
4.12.4 存串操作STOS[B|W|D] 109
4.12.5 輸入串操作INS[B|W|D] 110
4.12.6 輸出串操作OUTS[B|W|D] 111
4.12.7 串掃描操作SCAS[B|W|D] 111
4.12.8 串比較操作CMPS[B|W|D] 112
4.13 CPU控制指令 114
4.13.1 空操作指令NOP 114
4.13.2 等待指令WAIT 115
4.13.3 暫停指令HLT 115
4.13.4 封鎖數(shù)據(jù)指令LOCK 115
4.13.5 獲得CPU信息CPUID 115
4.13.6 讀時間戳計數(shù)器RDTSC 116
習題4 117