隨著(zhù)計算機技術(shù)的發(fā)展,學(xué)生要學(xué)習的課程越來(lái)越多,每門(mén)課的學(xué)時(shí)越來(lái)越少,而匯編語(yǔ)言從16位過(guò)渡到32位,指令越來(lái)越多,如何在有限的時(shí)間里學(xué)到盡可能多的知識,特別是如何提高匯編語(yǔ)言的編程能力,壓力越來(lái)越大。于是,本書(shū)作者結合多年的教學(xué)與軟件開(kāi)發(fā)的經(jīng)驗,編寫(xiě)了本書(shū)。
本書(shū)雖詳盡介紹了CPU指令和FPU指令等,但在實(shí)際程序設計過(guò)程中,往往可能只需要掌握其中20%的指令,就能解決現實(shí)工作中80%的問(wèn)題,而剩余20%的問(wèn)題,可以根據具體的需要,查閱具體的指令;其中的案例也是作者根據多年教學(xué)經(jīng)驗歸納、總結、設計的,文字表述也是經(jīng)過(guò)再三斟酌的,插圖也是經(jīng)過(guò)專(zhuān)門(mén)加工的。
第1章 匯編語(yǔ)言基礎知識 1
1.1 計數制 1
1.1.1 十進(jìn)制(Decimal) 1
1.1.2 二進(jìn)制(Binary) 1
1.1.3 八進(jìn)制(Octal) 2
1.1.4 十六進(jìn)制(HexaDecimal) 2
1.2 進(jìn)制數間的轉換 3
1.2.1 十進(jìn)制轉二進(jìn)制 3
1.2.2 十進(jìn)制轉八進(jìn)制和十六進(jìn)制 4
1.2.3 十進(jìn)制轉二進(jìn)制加法口算方法 4
1.2.4 十進(jìn)制轉二進(jìn)制減法口算方法 5
1.2.5 十進(jìn)制轉二進(jìn)制其他口算方法 6
1.3 計算機計量單位 6
1.3.1 計算機存儲容量計量單位 6
1.3.2 計算機時(shí)鐘周期計量單位 6
1.4 數值數據的表示 7
1.4.1 無(wú)符號整數的表示 7
1.4.2 有符號整數的表示 7
1.4.3 移碼 8
1.4.4 BCD碼 9
1.4.5 浮點(diǎn)數 9
1.5 字符數據的表示 12
1.5.1 ASCII碼 12
1.5.2 機內碼 12
1.5.3 Unicode 13
1.5.4 UTF-8 14
習題1 14
第2章 Win32匯編語(yǔ)言基本組成 16
2.1 程序結構 16
2.1.1 處理器選擇偽指令 17
2.1.2 .model偽指令 18
2.1.3 指明是否區分大小寫(xiě) 18
2.1.4 要引用的頭文件和庫文件 18
2.1.5 函數原型PROTO聲明 19
2.1.6 函數原型EXTRN聲明 19
2.1.7 變量的定義及使用 20
2.1.8 數據段和代碼段的定義 21
2.1.9 注釋 22
2.1.10 指令、標號和分行 22
2.1.11 invoke偽指令調用函數 23
2.1.12 Call指令調用函數 23
2.1.13 函數調用返回值 24
2.1.14 函數的定義 24
2.1.15 局部變量的定義 26
2.1.16 程序結束 27
2.1.17 匯編結束 27
2.2 數據類(lèi)型 27
2.2.1 整數 27
2.2.2 整數常量表達式 28
2.2.3 浮點(diǎn)數 30
2.2.4 字符和字符串 33
2.2.5 結構體 34
習題2 36
第3章 Win32匯編語(yǔ)言的編譯運行 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 通過(guò)注冊表配置VC和MASM32環(huán)境 44
3.2 命令提示符下編譯鏈接和運行 44
3.3 VC環(huán)境下編譯鏈接和運行 46
3.4 C/C++嵌入匯編指令 48
3.4.1 匯編指令訪(fǎng)問(wèn)C整型變量 48
3.4.2 匯編指令讀取C整型數組元素 49
3.4.3 匯編指令寫(xiě)入C字符數組 50
3.5 C程序反匯編生成匯編源程序 51
3.5.1 C程序編譯時(shí)生成匯編語(yǔ)言源程序 51
3.5.2 修改C程序反匯編生成的匯編源程序 52
習題3 55
第4章 CPU指令系統 57
4.1 系統結構 58
4.2 80386微處理器結構 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 操作數尋址方式 67
4.7 數據傳送類(lèi)指令 71
4.7.1 通用數據傳送MOV/MOV[SZ]X 71
4.7.2 數據交換XCHG 73
4.7.3 字節查表轉換XLAT[B] 75
4.7.4 字節反向存儲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 進(jìn)位位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 整數比較CMP/CMPXCHG[8B] 86
4.9 調整指令(實(shí)現大數運算) 87
4.9.1 數字字符加法調整AAA 87
4.9.2 數字字符減法調整AAS 89
4.9.3 二進(jìn)制編碼調整為BCD碼AAM 90
4.9.4 BCD碼調整為二進(jìn)制編碼AAD 90
4.9.5 BCD碼加法調整DAA 91
4.9.6 BCD碼減法調整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 算術(shù)移位SAL/SAR 96
4.11.2 邏輯移位SHL/SHR 97
4.11.3 雙精度移位SHLD/SHRD 98
4.11.4 不帶進(jìn)位循環(huán)移位ROL/ROR 100
4.11.5 帶進(jìn)位循環(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 封鎖數據指令LOCK 115
4.13.5 獲得CPU信息CPUID 115
4.13.6 讀時(shí)間戳計數器RDTSC 116
習題4 117