本書共分為9章,具體介紹了匯編語言基礎(chǔ)知識、Win32匯編語言基本組成、Win32匯編語言的編譯運行、CPU指令系統(tǒng)、FPU指令系統(tǒng)、選擇結(jié)構(gòu)程序設(shè)計、循環(huán)結(jié)構(gòu)程序設(shè)計、模塊化程序設(shè)計和吾愛破解軟件使用簡介等內(nèi)容。先詳細介紹了匯編語言程序設(shè)計中要用到的相關(guān)理論基礎(chǔ)和計算機的組成與工作原理,如數(shù)值與字符的表示方法、存儲體系結(jié)構(gòu)與工作原理等;再全面介紹了32位CPU指令與浮點指令;最后詳盡介紹了匯編語言程序設(shè)計的方法,使讀者可以把更多的精力用于匯編的程序設(shè)計上。本書力爭做到,初學(xué)者用C語言能實現(xiàn)的功能,用本書的32位匯編語言也能實現(xiàn)。
本書所有例子的源程序都是完整的,并有詳細的注釋,且都能在Windows XP和Windows 7環(huán)境上編譯運行通過,特別適合初學(xué)者。本書有配套的考試系統(tǒng)和相應(yīng)的題庫,既可作為測評的標(biāo)準(zhǔn)化試題(單項選擇題、多項選擇題、判斷題和填空題),又可作為測評的程序設(shè)計題(程序改錯題、程序填空題和程序設(shè)計題),可按程序功能要求進行測評,也可按標(biāo)準(zhǔn)答案源程序的相似度進行模糊測評。
本書可作為應(yīng)用型本科院校計算機類專業(yè)《Win32匯編語言程序設(shè)計》的教材,也可作為《計算機組成原理與匯編語言(Win32)》的教材,適合既要求有一定理論知識,又要求突出實踐的院校,尤其適合強調(diào)提高編程能力的院校和讀者。
隨著計算機技術(shù)的發(fā)展,學(xué)生要學(xué)習(xí)的課程越來越多,每門課的學(xué)時越來越少,而匯編語言從16位過渡到32位,指令越來越多,如何在有限的時間里學(xué)到盡可能多的知識,特別是如何提高匯編語言的編程能力,壓力越來越大。于是,本書作者結(jié)合多年的教學(xué)與軟件開發(fā)的經(jīng)驗,編寫了本書。
本書雖詳盡介紹了CPU指令和FPU指令等,但在實際程序設(shè)計過程中,往往可能只需要掌握其中20%的指令,就能解決現(xiàn)實工作中80%的問題,而剩余20%的問題,可以根據(jù)具體的需要,查閱具體的指令;其中的案例也是作者根據(jù)多年教學(xué)經(jīng)驗歸納、總結(jié)、設(shè)計的,文字表述也是經(jīng)過再三斟酌的,插圖也是經(jīng)過專門加工的。
隨著計算機技術(shù)的發(fā)展,學(xué)生要學(xué)習(xí)的課程越來越多,每門課的學(xué)時越來越少,而匯編語言從16位過渡到32位,指令越來越多,如何在有限的時間里學(xué)到盡可能多的知識,特別是如何提高匯編語言的編程能力,壓力越來越大。于是,我們結(jié)合多年的教學(xué)與軟件開發(fā)的經(jīng)驗,編寫了本書。
本書雖詳盡介紹了CPU指令和FPU指令等,但并不是每條指令都需要掌握,因為實際程序設(shè)計過程中,往往可能只需要掌握其中20%的指令,就能解決現(xiàn)實工作中80%的問題,而剩余20%的問題,可以根據(jù)具體的需要,查閱具體的指令。因此,在教學(xué)過程中,可根據(jù)具體的情況,選修相關(guān)內(nèi)容。
作者建議,本書按12個主題進行教與學(xué),每個主題講授與訓(xùn)練約3個學(xué)時,課堂測試與講評約1個學(xué)時,合計48學(xué)時。
序 號 主 題 主 要 內(nèi) 容
1 數(shù)據(jù)類型 Win32匯編語言程序結(jié)構(gòu)基本組成,各種數(shù)據(jù)類型數(shù)據(jù)的定義與輸入輸出
2 MASM整數(shù)+-*/% 簡單整數(shù)數(shù)據(jù)傳送指令,整數(shù)的加減乘除余,實現(xiàn)整數(shù)表達式的計算
3 MASM實數(shù)+-*/ 浮點數(shù)數(shù)據(jù)傳送指令,浮點數(shù)的加減乘除,實現(xiàn)浮點數(shù)表達式的計算
4 MASM函數(shù) 算術(shù)指令,如FSQRT、FSIN、FCOS、FABS等函數(shù)的使用
5 選擇結(jié)構(gòu) 實現(xiàn)整數(shù)(含字符)大小和浮點數(shù)大小的比較
6 循環(huán)結(jié)構(gòu) .while和.repeat循環(huán)及LOOP循環(huán)指令,實現(xiàn)各種循環(huán)重復(fù)操作
7 C嵌入?yún)R編 串操作指令結(jié)合C嵌入?yún)R編,在C中實現(xiàn)各種字符串功能
8 子程序(函數(shù)) 子程序(函數(shù))的定義與調(diào)用,實現(xiàn)模塊化程序設(shè)計
9 遞歸程序設(shè)計 匯編實現(xiàn)遞歸程序設(shè)計及C與匯編相互調(diào)用、函數(shù)重載
10 軟件破解 OD實現(xiàn)逆向工程,破解其他開發(fā)工具生成的.exe文件的登錄密碼
11 浮點數(shù)表示 計算機浮點數(shù)的表示等,實現(xiàn)浮點數(shù)與機器碼的相互轉(zhuǎn)換,其他編碼轉(zhuǎn)換
12 CPU與存儲器連接 32位CPU體系結(jié)構(gòu)、存儲訪問工作原理等
通過以上12講的教學(xué),學(xué)生在48學(xué)時下就能具有比較強的匯編編程能力,又能初步了解計算機 的組成與工作原理,因此,本教材也可作為《計算機組成原理與匯編語言(Win32)》的教材。
本書由田民格擔(dān)任主編,秦彩杰、呂良智擔(dān)任副主編。其中秦彩杰編寫第1、2、3章,田民格編寫第4、5、6章,呂良智編寫第7、8、9章和附錄。
本書配套的電子課件和源程序等資料可登錄作者的FTP下載,網(wǎng)址為FTP://218.5. 241.13,用戶名為tmg,密碼為123456。本書資料在masm文件夾中,其中“組成與匯編單機版.rar”是本書單機版考試系統(tǒng),根目錄下的ksxt.exe是本書網(wǎng)絡(luò)版考試系統(tǒng)。
為使本書篇幅不致過長,其中的案例是根據(jù)作者多年教學(xué)經(jīng)驗歸納、總結(jié)、設(shè)計的,文字表述也是經(jīng)過再三斟酌的,插圖也是經(jīng)過專門加工的。在使用本書的過程中,若發(fā)現(xiàn)有任何問題,可與作者進行溝通聯(lián)系,以使本書臻于完善。作者E-mail為TmgDelphi@163.com。
編 者
第1章
匯編語言基礎(chǔ)知識
本章主要介紹數(shù)值數(shù)據(jù)和字符數(shù)據(jù)在計算機內(nèi)部的表示方法,包括各種進制數(shù)及相關(guān)計量單位;數(shù)值數(shù)據(jù)詳細介紹整數(shù)和浮點數(shù)(實數(shù))的表示方法及顯示方法,字符數(shù)據(jù)詳細介紹ASCII碼、機內(nèi)碼、Unicode編碼和UTF-8編碼的表示方法及顯示方法。通過本章的學(xué)習(xí),讀者應(yīng)該完成以下學(xué)習(xí)目標(biāo):
(1)掌握十進制、二進制、十六進制的表示方法及其相互轉(zhuǎn)換方法。
(2)了解八進制和二進制口算方法。
(3)掌握無符號整數(shù)和有符號整數(shù)的表示方法。
(4)掌握移碼的表示方法以及了解BCD碼的表示方法。
(5)掌握浮點數(shù)(實數(shù))的表示方法。
(6)了解ASCII碼常用字符的編碼規(guī)律。
(7)了解機內(nèi)碼和區(qū)位碼的編碼規(guī)律及其相互轉(zhuǎn)換方法。
(8)了解Unicode和UTF-8的編碼規(guī)律及其相互轉(zhuǎn)換方法。
1.1 計 數(shù) 制
1.1.1 十進制(Decimal)
十進制用0~9共10個數(shù)碼來表示,其基數(shù)為10,運算規(guī)則為逢十進一,各位權(quán)是10i(整數(shù)部分最低位位權(quán)為100,其余各位位權(quán)從右至左指數(shù)依次增大;小數(shù)部分最高位位權(quán)為10-1,其余各位位權(quán)從左至右指數(shù)依次減。M制數(shù)后綴字母為D,一般省略,n位整數(shù)m位小數(shù)十進制數(shù)N表示如下:
N=an-1an-2…a0.a-1…a-mD
=an-1×10n-1+an-2×10n-2+…+a0×100+a-1×10-1+…+a-m×10-m
例如:
N=325.46D
=3×102+2×101+5×100+4×10-1+6×10-2
=325.46
1.1.2 二進制(Binary)
二進制用0和1兩個數(shù)碼來表示,其基數(shù)為2,運算規(guī)則為逢二進一,各位權(quán)是2i,二進制數(shù)后綴字母為B,n位整數(shù)m位小數(shù)的二進制數(shù)N表示如下:
N=an-1an-2…a0.a-1…a-mB
=an-1×2n-1+an-2×2n-2+…+a0×20+a-1×2-1+…+a-m×2-m
例如:
N=10111101.11B
=1×27+0×26+1×25+1×24+1×23+1×22+0×21+1×20+1×2-1+1×2-2
=1×128+0×64+1×32+1×16+1×8+1×4+0×2+1×1+1×0.5+1×0.25
=189.75
……