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