本書內(nèi)容包括基本的匯編語言基礎(chǔ)、常用處理器指令和匯編語言偽指令以及順序、分支、循環(huán)、子程序結(jié)構(gòu),還包括擴展的Windows和DOS編程、與C++語言的混合編程、輸入輸出指令及編程,并涉及浮點、多媒體及64位指令等方面。
隨著計算機技術(shù)的發(fā)展,國內(nèi)高校師生希望能夠在32位Windows操作系統(tǒng)平臺學(xué)習(xí)匯編語言,但如何面向初學(xué)者實施教學(xué)卻面臨諸多難點。于是,我們結(jié)合近年來的32位匯編語言教學(xué)實踐編寫了本書。
本書具有以下特色。
1.簡單易用的開發(fā)環(huán)境目前,32位Windows平臺的匯編語言編程主要使用MASM32和VisualC++集成化開發(fā)系統(tǒng),但它們都略顯復(fù)雜和龐大,不適合初學(xué)者(本書將此內(nèi)容安排在第6章和第7章)。為此,本書構(gòu)建了一個簡單易用的開發(fā)環(huán)境(詳見第1章),無需安裝和配置,直接復(fù)制就可使用。它支持32位Windows控制臺和16位DOS環(huán)境,提供MASM匯編程序、連接程序、WinDbg和CodeView調(diào)試程序及其幫助文檔、配套輸入輸出子程序庫及方便操作的批處理文件等。
2.重點明確的教學(xué)內(nèi)容匯編語言的教學(xué)目的是從軟件角度理解計算機硬件工作原理,為相關(guān)課程提供基礎(chǔ)知識,同時讓讀者全面認識程序設(shè)計語言,體會低層編程特點,以便更好地應(yīng)用高級語言。為此,本書不是詳盡展開所有處理器指令、全部匯編偽指令,而是選擇處理器通用的基本指令和反映匯編語言特色的常用偽指令;沒有引出復(fù)雜的程序格式,而是側(cè)重編程思想和技術(shù)。這樣一方面能夠降低教學(xué)難度、易于學(xué)生掌握,另一方面使得教學(xué)內(nèi)容更加實用、便于學(xué)生實際應(yīng)用。
3.突出實踐的教學(xué)過程本書以約70個示例程序和60個習(xí)題程序貫穿教學(xué)內(nèi)容。第1章在介紹必要的寄存器和存儲器知識后,就引出匯編語言開發(fā)環(huán)境,介紹匯編語言的語句格式、源程序框架和開發(fā)方法,并利用簡單易用的輸入輸出子程序編寫具有顯示結(jié)果的程序。第2章結(jié)合數(shù)據(jù)編碼、常量定義和變量應(yīng)用,自然地引出常用偽指令。第3章分類學(xué)習(xí)處理器基本指令,逐漸編寫特定要求的程序片段。第4~9章以程序結(jié)構(gòu)為主線,圍繞數(shù)碼轉(zhuǎn)換子程序,結(jié)合Windows編程、混合編程、DOS和I/O編程、浮點指令,從簡單到復(fù)雜逐步編寫具有實用價值的應(yīng)用程序。
4.循序漸進的教學(xué)原則為了便于學(xué)生理解和掌握,且便于教師實施教學(xué),本書以“循序漸進、難點分散、前后對照”為原則,努力做到“語言淺顯、描述詳盡、圖表準確”。本書內(nèi)容編排精彩紛呈,例如,將處理器指令和匯編偽指令分散于各個教學(xué)內(nèi)容之中,引出列表文件暫時避開調(diào)試程序,用簡單的子程序庫化解系統(tǒng)調(diào)用的煩瑣;程序具有交互性和趣味性,適當(dāng)對比高級語言,并展示底層工作原理;每章都編制豐富的習(xí)題,滿足課外練習(xí)、上機實踐和試題組織的需要。
為了更好地服務(wù)于廣大師生和讀者,編者開辟了“大學(xué)微機技術(shù)系列課程教學(xué)輔助網(wǎng)站”。該網(wǎng)站面向“匯編語言程序設(shè)計”和“微機原理及接口技術(shù)”課程,提供相關(guān)教學(xué)課件(電子教案)、教學(xué)大綱、教材勘誤、疑難解答、輸入輸出子程序庫、示例源程序文件等輔助資源,是本教材的動態(tài)延伸。
相對于第1版教材,第2版的總體結(jié)構(gòu)和主體內(nèi)容沒有改變,主要針對教學(xué)過程中師生反饋的問題增加了更加詳盡的講解。具體來說,修訂如下:
1)修改最大的是第4章,增加了示例程序的流程圖和說明,使得讀者更容易理解匯編語言的特點和程序結(jié)構(gòu),掌握匯編語言的編程技巧。
2)第2章和第4章特別加入了對各種尋址方式的圖示,利于讀者理解這些概念。
3)第3章重點展開了MOV指令,讓讀者清晰地理解指令對不同數(shù)據(jù)長度(整數(shù)類型)的支持。
4)對第1~5章和第9章部分知識點進行補充說明,對全書各個章節(jié)中發(fā)現(xiàn)的個別錯誤進行修正。
本書由鄭州大學(xué)信息工程學(xué)院錢曉捷編著,并得到了張青、穆玲玲、關(guān)國利、程楠、姚俊婷等同事的幫助,衷心感謝他們的支持。
編者2016年4月
前言
教學(xué)建議
第1章匯編語言基礎(chǔ)
1.1Intel 80x86系列處理器
1.1.116位80x86處理器
1.1.2IA.32處理器
1.1.3Intel 64處理器
1.2個人計算機系統(tǒng)
1.2.1硬件組成
1.2.2寄存器
1.2.3存儲器組織
1.2.4程序設(shè)計語言
1.2.5軟件系統(tǒng)
1.3匯編語言程序格式
1.3.1指令代碼格式
1.3.2語句格式
1.3.3源程序框架
1.3.4開發(fā)過程
第1章習(xí)題
第2章數(shù)據(jù)表示和尋址
2.1數(shù)據(jù)表示
2.1.1數(shù)制
2.1.2數(shù)值的編碼
2.1.3字符的編碼
2.2常量表達
2.3變量應(yīng)用
2.3.1變量定義
2.3.2變量屬性
2.4數(shù)據(jù)尋址方式
2.4.1立即數(shù)尋址方式
2.4.2寄存器尋址方式
2.4.3存儲器尋址方式
2.4.4各種數(shù)據(jù)尋址方式的組合
第2章習(xí)題
第3章通用數(shù)據(jù)處理指令
3.1數(shù)據(jù)傳送類指令
3.1.1通用數(shù)據(jù)傳送指令
3.1.2堆棧操作指令
3.1.3其他傳送指令
3.2算術(shù)運算類指令
3.2.1狀態(tài)標志
3.2.2加法指令
3.2.3減法指令
3.2.4乘法和除法指令
3.2.5其他運算指令
3.3位操作類指令
3.3.1邏輯運算指令
3.3.2移位指令
第3章習(xí)題
第4章程序結(jié)構(gòu)
4.1順序程序結(jié)構(gòu)
4.2分支程序結(jié)構(gòu)
4.2.1無條件轉(zhuǎn)移指令
4.2.2條件轉(zhuǎn)移指令
4.2.3單分支程序結(jié)構(gòu)
4.2.4雙分支程序結(jié)構(gòu)
4.2.5多分支程序結(jié)構(gòu)
4.3循環(huán)程序結(jié)構(gòu)
4.3.1循環(huán)指令
4.3.2計數(shù)控制循環(huán)
4.3.3條件控制循環(huán)
4.3.4多重循環(huán)
第4章習(xí)題
第5章模塊化程序設(shè)計
5.1子程序結(jié)構(gòu)
5.1.1子程序指令
5.1.2子程序設(shè)計
5.2參數(shù)傳遞
5.2.1寄存器傳遞參數(shù)
5.2.2共享變量傳遞參數(shù)
5.2.3堆棧傳遞參數(shù)
5.3多模塊程序結(jié)構(gòu)
5.3.1源文件包含
5.3.2模塊連接
5.3.3子程序庫
5.4宏結(jié)構(gòu)
5.4.1宏匯編
5.4.2重復(fù)匯編
5.4.3條件匯編
第5章習(xí)題
第6章Windows編程
6.1操作系統(tǒng)函數(shù)調(diào)用
6.1.1動態(tài)連接庫
6.1.2MASM的過程聲明和調(diào)用
6.1.3程序退出函數(shù)
6.2控制臺應(yīng)用程序
6.2.1控制臺輸出
6.2.2控制臺輸入
6.2.3單字符輸入
6.3圖形窗口應(yīng)用程序
6.3.1消息窗口
6.3.2結(jié)構(gòu)變量
6.3.3MASM的高級語言特性
6.3.4簡單窗口程序
第6章習(xí)題
第7章與Visual C++混合編程
7.1嵌入?yún)R編
7.2模塊連接
7.2.1約定規(guī)則
7.2.2堆棧幀
7.3調(diào)用高級語言函數(shù)
7.3.1嵌入?yún)R編中調(diào)用高級語言函數(shù)
7.3.2匯編語言中調(diào)用C庫函數(shù)
7.4使用Visual C++開發(fā)環(huán)境
7.4.1匯編語言程序的開發(fā)過程
7.4.2匯編語言程序的調(diào)試過程
第7章習(xí)題
第8章DOS環(huán)境程序設(shè)計
8.1DOS編程
8.1.1實地址存儲模型
8.1.2DOS應(yīng)用程序框架
8.1.3DOS功能調(diào)用
8.2串操作類指令
8.2.1串傳送指令
8.2.2串檢測指令
8.3輸入輸出程序設(shè)計
8.3.1輸入輸出指令
8.3.2定時器初始化編程
8.3.3揚聲器控制編程
8.4中斷控制編程
8.4.1中斷控制系統(tǒng)
8.4.2內(nèi)部中斷服務(wù)程序
8.4.3駐留中斷服務(wù)程序
第8章習(xí)題
第9章 浮點、多媒體及64位指令
9.1 浮點指令
9.1.1實數(shù)編碼
9.1.2浮點寄存器
9.1.3浮點指令及其編程
9.2 多媒體指令
9.2.1MMX技術(shù)
9.2.2SSE技術(shù)
9.2.3SSE2技術(shù)
9.2.4SSE3技術(shù)
9.3 64位指令
9.3.164位方式的運行環(huán)境
9.3.264位方式的指令
第9章習(xí)題
附錄A 調(diào)試程序WinDbg
附錄B 輸入輸出子程序庫
附錄C 32位通用指令列表
附錄D MASM偽指令和操作符列表
附錄E 列表文件符號說明
附錄F 常見匯編錯誤信息
參考文獻