關于我們
書單推薦
新書推薦
|
匯編語言:基于x86處理器(原書第7版) 本書是匯編語言課程的經(jīng)典教材,系統(tǒng)介紹x86和Intel64處理器的匯編語言編程和架構。前9章為匯編語言的核心概念,包括:匯編語言基礎,x86處理器架構,數(shù)據(jù)傳送、尋址和算術運算,過程,條件處理,整數(shù)運算,高級過程,以及字符串和數(shù)組。本書為原書第7版,增加了部分實例程序的討論,補充了更多的復習題和關鍵術語,介紹了64位編程;還有配套的網(wǎng)上資料,提供完整的程序清單、復習題答案和編程練習的解決方案。 前 言A 本書介紹x86和Intel64處理器的匯編語言編程與架構,適合作為下述幾類大學課程的教材: 匯編語言編程計算機系統(tǒng)基礎計算機體系結(jié)構基礎學生使用Intel或AMD處理器,用Microsoft宏匯編器(Microsoft Macro Assembler,MASM)編程,MASM運行在Microsoft Windows最新的版本上。盡管本書的初衷是作為大學生的編程教材,但它也是計算機體系結(jié)構課程的有效補充。本書廣受歡迎,前幾個版本已被翻譯為多種語言。 重點主題 本版所含主題可以自然過渡到講述計算機體系結(jié)構、操作系統(tǒng)和編寫編譯器的后續(xù)課程: 虛擬機概念指令集架構基本布爾運算指令執(zhí)行周期內(nèi)存訪問和握手中斷和輪詢基于硬件的I/O浮點數(shù)二進制表示其他主題則專門針對x86和Intel64架構: 受保護的內(nèi)存和分頁實地址模式的內(nèi)存分段16位中斷處理MS-DOS和BIOS系統(tǒng)調(diào)用(中斷)浮點單元架構和編程指令編碼本書中的某些例子還可以用于計算機科學課程體系中的后續(xù)課程: 搜索與排序算法高級語言結(jié)構有限狀態(tài)機代碼優(yōu)化示例第7版的新內(nèi)容這一版增加了對程序示例的討論,添加了更多的復習題和關鍵術語,介紹了64位編程,降低了對子程序庫的依賴性。具體內(nèi)容如下: 本版前面的幾章現(xiàn)在包含了以64位CPU架構和編程為主的小節(jié),并且還創(chuàng)建了子程序庫的64位版本Irvine64。 修改、替換了很多復習題和練習,部分題目從章節(jié)內(nèi)移動到該章末尾,且習題分為兩部分:簡答題和算法基礎練習。后者要求學生編寫一小段代碼實現(xiàn)一個目標。 每章有一節(jié)為關鍵術語,列出了新的術語和概念,以及新的MASM偽指令和Intel指令。 添加了新的編程練習,刪除了一些舊習題,并對一些現(xiàn)有的練習進行了修改。 本書對作者子程序庫的依賴性大大減低。鼓勵學生自己調(diào)用系統(tǒng)函數(shù),并使用Visual Studio調(diào)試器單步執(zhí)行程序。Irvine32和Irvine64鏈接庫可以幫助學生處理輸入/輸出,但是不強制要求使用它們。 作者錄制的新視頻教程涵蓋了本書的基本內(nèi)容,并已添加到Pearson網(wǎng)站。 本書仍然關注其首要目標,即教授學生編寫并調(diào)試機器級程序。它不能代替計算機體系結(jié)構的完整教材,但它確實在告訴學生計算機工作原理的基礎上,給出了編寫軟件的第一手經(jīng)驗。我們認為,理論聯(lián)系實際能讓學生更好地掌握知識。在工程課程中,學生構建原型;在計算機體系結(jié)構課程中,學生應編寫機器級程序。在這些課程里,學生都能獲得難忘的經(jīng)驗,從而有信心在任何OS/面向機器的環(huán)境中工作。 保護模式編程是紙版章節(jié)(第1章~第13章)的重中之重。因此,學生需要在最新版本的Microsoft Windows環(huán)境下創(chuàng)建并運行32位和64位程序。其他4章是電子版,講述16位編程。這些章包含了BIOS編程、MS-DOS服務、鍵盤和鼠標輸入、視頻編程和圖形圖像內(nèi)容。其中一章為磁盤存儲基礎,還有一章為高級DOS編程技術。 子程序庫 本書為學生提供了三個版本的子程序庫,用于基本輸入/輸出、模擬、計時和其他有用的任務。Irvine32和Irvine64鏈接庫運行于保護模式。16位版本的鏈接庫(Irvine16.lib)運行于實地址模式,且只用于第14章~第17章。這些庫的完整源代碼見于配套的網(wǎng)站。鏈接庫是為了使用方便,而不是為了阻止學生學習如何自行對輸入–輸出編程。鼓勵學生創(chuàng)建自己的鏈接庫。 所含軟件與示例 所有示例程序均在Microsoft Visual Studio 2012下,用Microsoft Macro Assembler Version 11.0進行了驗證。此外,還提供了批處理文件允許學生用Windows命令行匯編和運行應用程序。第14章中的32位C++應用程序已用Microsoft Visual C++ .NET測試。本書的內(nèi)容更新與勘誤參見配套的網(wǎng)站,其中包括了一些額外的編程項目,老師可以在章節(jié)結(jié)束的時候布置給學生。 總體目標本書的以下目標旨在提高學生對匯編語言相關知識的興趣并拓展知識面: Intel和AMD處理器架構與編程;實地址模式和保護模式編程;匯編語言偽指令、宏、運算符與程序結(jié)構;編程方法,展示了如何用匯編語言創(chuàng)建系統(tǒng)級軟件工具和應用程序;計算機硬件操作;匯編語言程序、操作系統(tǒng)和其他應用程序之間的交互作用。 本書的目標之一是幫助學生以機器級的思維方式來處理編程問題。將CPU視為交互工具,學習盡可能直接地監(jiān)控其操作是很重要的。調(diào)試器是程序員最好的朋友,不僅可以捕捉錯誤,還可以用作學習CPU和操作系統(tǒng)的教學工具。我們鼓勵學生探查高級語言的內(nèi)部機制,并能意識到大多數(shù)編程語言都被設計為可移植的,因此,也獨立于其運行的主機。除了短小的示例外,本書還有幾百個可運行的程序來演示書中講述的指令和思想。本書結(jié)尾有參考資料,包括MS-DOS中斷和指令助記符指南。 背景知識 讀者應至少能熟練使用一種高級語言進行編程,比如Python、Java、C或C++。本書有一章涉及C++接口,因此,如果手邊有編譯器將會非常有幫助。本書不僅已經(jīng)用于計算機科學和管理信息系統(tǒng)專業(yè)課堂,而且還用于其他工程課程。 特點完整的程序清單 配套的網(wǎng)站包含了補充資料、學習指南,以及本書全部示例的源代碼。本書還提供了豐富的鏈接庫,其中包括30多個過程,可以簡化用戶輸入–輸出、數(shù)字處理、磁盤和文件處理,以及字符串處理。課程初期,學生可以用這個鏈接庫來改進自己編寫的程序。之后,學生可以自行編寫過程并將它們添加到鏈接庫中。 編程邏輯 本書用兩章的篇幅重點介紹了布爾邏輯和位操作,并且有意識地嘗試將高級編程邏輯與底層機器細節(jié)對應起來。這有助于學生創(chuàng)建更有效的實現(xiàn),且有助于他們更好地理解編譯器是如何生成目標代碼的。 硬件和操作系統(tǒng)概念 本書前兩章介紹基礎硬件和數(shù)據(jù)表示概念,包括二進制數(shù)、CPU架構、狀態(tài)標志和內(nèi)存映射。概述硬件和以歷史的角度審視Intel處理器系列可以幫助學生更好地理解其目標計算機系統(tǒng)。 結(jié)構化程序設計方法 從第5章開始,關注重點為過程和功能分解。同時,提供了更復雜的編程練習,要求學生在編碼之前把設計作為重點。 Java字節(jié)碼和Java虛擬機 第8章和第9章解釋了Java字節(jié)碼的基本操作,并給出了簡短的演示例子。很多短示例不僅給出了反匯編字節(jié)碼形式,還給出了詳細的步驟解釋。 磁盤存儲概念 學生從硬件和軟件的角度學習基于MS-Windows的磁盤存儲系統(tǒng)的基本原理。 創(chuàng)建鏈接庫 學生不僅可以自由地把自己編寫的過程添加到本書鏈接庫,還可以創(chuàng)建新的鏈接庫。他們要學習用工具箱方法進行編程,并編寫多個程序可以共用的代碼。 宏和結(jié)構 本書用一章專門描述創(chuàng)建結(jié)構、聯(lián)合以及宏,這些對匯編語言編程和系統(tǒng)編程是非常重要的。條件宏和高級運算符使得宏更加專業(yè)。 高級語言接口 本書用一章專門描述匯編語言與C和C++的接口。對于想要從事高級語言編程工作的學生而言,這是一項重要的工作技能。他們可以學習代碼優(yōu)化,還可以通過例子了解C++編譯器是如何優(yōu)化代碼的。 教學輔助 所有的程序清單都在網(wǎng)上。同時向教師提供了測試庫、復習題答案、編程練習的解決方案,以及每章的PPT。 章節(jié)說明第1章~第9章為匯編語言核心概念,需要按順序?qū)W習。后面的章節(jié)則可以自由選擇。下面的章節(jié)示意圖展示了后續(xù)章節(jié)與其他章節(jié)知識之間的依賴關系。 第1章 基本概念:匯編語言的應用、基礎概念、機器語言和數(shù)據(jù)表示。 第2章 x86處理器架構:基本微計算機設計、指令執(zhí)行周期、x86處理器架構、Intel64架構、x86內(nèi)存管理、微計算機組件、輸入–輸出系統(tǒng)。 第3章 匯編語言基礎:介紹匯編語言、鏈接和調(diào)試、常量和變量定義。 第4章 數(shù)據(jù)傳送、尋址和算術運算:簡單的數(shù)據(jù)傳送和算術運算指令、匯編–鏈接–執(zhí)行周期、運算符、偽指令、表達式、JMP和LOOP指令、間接尋址。 第5章 過程:與外部鏈接庫的鏈接、描述本書鏈接庫、堆棧操作、過程的定義和使用、流程圖、自頂向下的結(jié)構設計。 第6章 條件處理:布爾和比較指令、條件跳轉(zhuǎn)和循環(huán)、高級邏輯結(jié)構、有限狀態(tài)機。 第7章 整數(shù)運算:移位和循環(huán)移位指令及其應用、乘法和除法、擴展加法和減法、ASCII和壓縮十進制運算。 第8章 高級過程:堆棧參數(shù)、局部變量、高級PROC和INVOKE偽指令、遞歸。 第9章 字符串和數(shù)組:字符串原語、操作字符和整數(shù)數(shù)組、二維數(shù)組、排序和檢索。 第10章 結(jié)構和宏:結(jié)構、宏、條件匯編偽指令、定義重復塊。 第11章 MS-Windows編程:保護模式內(nèi)存管理概念、用Microsoft-Windows API顯示文本和顏色,動態(tài)內(nèi)存分配。 第12章 浮點數(shù)處理與指令編碼:浮點數(shù)二進制表示和浮點運算。學習IA-32浮點單元編程。理解IA-32機器指令編碼。 第13章 高級語言接口:參數(shù)傳遞規(guī)范、內(nèi)嵌匯編代碼、將匯編語言模塊鏈接到C和C++程序。 附錄A MASM參考知識附錄B x86指令集附錄C “本節(jié)回顧”問題答案下面的章節(jié)和附錄由配套網(wǎng)站提供: 第14章 16位MS-DOS編程:內(nèi)存組織、中斷、函數(shù)調(diào)用、標準MS-DOS文件I/O服務。 第15章 磁盤基礎知識:磁盤存儲系統(tǒng)、扇區(qū)、簇、目錄、文件分配表、處理MS-DOS錯誤碼、驅(qū)動器和目錄操作。 第16章 BIOS編程:鍵盤輸入、視頻文本、圖形、鼠標編程。 第17章 高級MS-DOS編程:自定義設計段、運行時程序結(jié)構、中斷處理、用I/O端口的硬件控制。 附錄D BIOS和MS-DOS中斷附錄E “本節(jié)回顧”問題答案(第14章~第17章)教師和學生資源教師資源下面受保護的教師資源見配套網(wǎng)站www.pearsonhighered.com/irvine: PPT講義教師解題手冊學生資源學生通過位于www.pearsonhighered.com/irvine的出版社網(wǎng)站可以找到本書作者的網(wǎng)站鏈接。下述資源位于www.asmirvine.com,且不需要用訪問卡: Getting Started(入門),循序漸進的完整教程,幫助學生設置Visual Studio進行匯編語言編程。 與匯編語言編程主題相關的補充讀物。 本書全部示例程序的完整代碼,以及作者補充鏈接庫的源代碼。 Assembly Language Workbook(匯編語言工作手冊),一個交互式的工作手冊,其中包括數(shù)值轉(zhuǎn)換、尋址模式、寄存器使用、調(diào)試編程和浮點二進制數(shù)。內(nèi)容頁面是可以自定義的HTML文檔,幫助文件為Windows幫助格式。 調(diào)試工具:Microsoft Visual Studio調(diào)試器用法教程。 致謝非常感謝培生教育(Pearson Education)計算機科學的執(zhí)行主編Tracy Johnson,過去幾年提供了友好且有益的指導。感謝Jouve公司的Pavithra Jayapaul以及培生出版社的產(chǎn)品編輯Greg Dulles為本書出版所做的出色工作。 早期版本特別感謝以下諸位,他們在本書早期版本中提供了極大的幫助: William Barrett,圣何塞州立大學Scott BlackledgeJames Brink,太平洋路德大學Gerald Cahill,羚羊谷學院 出版者的話 譯者序 前言 第1章 基本概念 1 1.1 歡迎來到匯編語言的世界 1 1.1.1 讀者可能會問的問題 2 1.1.2 匯編語言的應用 4 1.1.3 本節(jié)回顧 5 1.2 虛擬機概念 5 1.3 數(shù)據(jù)表示 7 1.3.1 二進制整數(shù) 7 1.3.2 二進制加法 8 1.3.3 整數(shù)存儲大小 9 1.3.4 十六進制整數(shù) 10 1.3.5 十六進制加法 11 1.3.6 有符號二進制整數(shù) 12 1.3.7 二進制減法 13 1.3.8 字符存儲 14 1.3.9 本節(jié)回顧 15 1.4 布爾表達式 16 1.4.1 布爾函數(shù)真值表 18 1.4.2 本節(jié)回顧 18 1.5 本章小結(jié) 19 1.6 關鍵術語 19 1.7 復習題和練習 20 1.7.1 簡答題 20 1.7.2 算法基礎 21 第2章 x86處理器架構 23 2.1 一般概念 23 2.1.1 基本微機設計 23 2.1.2 指令執(zhí)行周期 24 2.1.3 讀取內(nèi)存 25 2.1.4 加載并執(zhí)行程序 26 2.1.5 本節(jié)回顧 26 2.2 32位x86處理器 27 2.2.1 操作模式 27 2.2.2 基本執(zhí)行環(huán)境 27 2.2.3 x86內(nèi)存管理 30 2.2.4 本節(jié)回顧 30 2.3 64位x86-64處理器 30 2.3.1 64位操作模式 31 2.3.2 基本64位執(zhí)行環(huán)境 31 2.4 典型x86計算機組件 32 2.4.1 主板 32 2.4.2 內(nèi)存 34 2.4.3 本節(jié)回顧 34 2.5 輸入輸出系統(tǒng) 34 2.5.1 I/O訪問層次 34 2.5.2 本節(jié)回顧 36 2.6 本章小結(jié) 36 2.7 關鍵術語 37 2.8 復習題 38 第3章 匯編語言基礎 39 3.1 基本語言元素 39 3.1.1 第一個匯編語言程序 39 3.1.2 整數(shù)常量 40 3.1.3 整型常量表達式 41 3.1.4 實數(shù)常量 41 3.1.5 字符常量 42 3.1.6 字符串常量 42 3.1.7 保留字 42 3.1.8 標識符 43 3.1.9 偽指令 43 3.1.10 指令 44 3.1.11 本節(jié)回顧 46 3.2 示例:整數(shù)加減法 46 3.2.1 AddTwo程序 46 3.2.2 運行和調(diào)試AddTwo程序 48 3.2.3 程序模板 52 3.2.4 本節(jié)回顧 52 3.3 匯編、鏈接和運行程序 53 3.3.1 匯編–鏈接–執(zhí)行周期 53 3.3.2 列表文件 53 3.3.3 本節(jié)回顧 55 3.4 定義數(shù)據(jù) 55 3.4.1 內(nèi)部數(shù)據(jù)類型 55 3.4.2 數(shù)據(jù)定義語句 55 3.4.3 向AddTwo程序添加一個變量 56 3.4.4 定義BYTE和SBYTE數(shù)據(jù) 57 3.4.5 定義WORD和SWORD數(shù)據(jù) 59 3.4.6 定義DWORD和SDWORD數(shù)據(jù) 59 3.4.7 定義QWORD數(shù)據(jù) 60 3.4.8 定義壓縮BCD(TBYTE)數(shù)據(jù) 60 3.4.9 定義浮點類型 61 3.4.10 變量加法程序 61 3.4.11 小端順序 62 3.4.12 聲明未初始化數(shù)據(jù) 62 3.4.13 本節(jié)回顧 63 3.5 符號常量 63 3.5.1 等號偽指令 63 3.5.2 計算數(shù)組和字符串的大小 64 3.5.3 EQU偽指令 65 3.5.4 TEXTEQU偽指令 66 3.5.5 本節(jié)回顧 66 3.6 64位編程 67 3.7 本章小結(jié) 68 3.8 關鍵術語 69 3.8.1 術語 69 3.8.2 指令、運算符和偽指令 70 3.9 復習題和練習 70 3.9.1 簡答題 70 3.9.2 算法基礎 71 3.10 編程練習 71 第4章 數(shù)據(jù)傳送、尋址和算術運算 73 4.1 數(shù)據(jù)傳送指令 73 4.1.1 引言 73 4.1.2 操作數(shù)類型 73 4.1.3 直接內(nèi)存操作數(shù) 74 4.1.4 MOV指令 75 4.1.5 整數(shù)的全零/符號擴展 76 4.1.6 LAHF和SAHF指令 77 4.1.7 XCHG指令 78 4.1.8 直接–偏移量操作數(shù) 78 4.1.9 示例程序(Moves) 79 4.1.10 本節(jié)回顧 80 4.2 加法和減法 81 4.2.1 INC和DEC指令 81 4.2.2 ADD指令 81 4.2.3 SUB指令 81 4.2.4 NEG指令 82 4.2.5 執(zhí)行算術表達式 82 4.2.6 加減法影響的標志位 82 4.2.7 示例程序(AddSubTest) 85 4.2.8 本節(jié)回顧 86 4.3 與數(shù)據(jù)相關的運算符和偽指令 87 4.3.1 OFFSET運算符 87 4.3.2 ALIGN偽指令 88 4.3.3 PTR運算符 88 4.3.4 TYPE運算符 89 4.3.5 LENGTHOF運算符 89 4.3.6 SIZEOF運算符 90 4.3.7 LABEL偽指令 90 4.3.8 本節(jié)回顧 90 4.4 間接尋址 91 4.4.1 間接操作數(shù) 91 4.4.2 數(shù)組 91 4.4.3 變址操作數(shù) 92 4.4.4 指針 93 4.4.5 本節(jié)回顧 95 4.5 JMP和LOOP指令 95 4.5.1 JMP指令 96 4.5.2 LOOP指令 96 4.5.3 在Visual Studio調(diào)試器中顯示數(shù)組 97 4.5.4 整數(shù)數(shù)組求和 98 4.5.5 復制字符串 98 4.5.6 本節(jié)回顧 99 4.6 64位編程 99 4.6.1 MOV指令 99 4.6.2 64位的SumArray程序 100 4.6.3 加法和減法 101 4.6.4 本節(jié)回顧 102 4.7 本章小結(jié) 102 4.8 關鍵術語 104 4.8.1 術語 104 4.8.2 指令、運算符和偽指令 104 4.9 復習題和練習 104 4.9.1 簡答題 104 4.9.2 算法基礎 106 4.10 編程練習 107 第5章 過程 108 5.1 堆棧操作 108 5.1.1 運行時堆棧(32位模式) 108 5.1.2 PUSH和POP指令 110 5.1.3 本節(jié)回顧 112 5.2 定義并使用過程 112 5.2.1 PROC偽指令 112 5.2.2 CALL和RET指令 114 5.2.3 過程調(diào)用嵌套 115 5.2.4 向過程傳遞寄存器參數(shù) 116 5.2.5 示例:整數(shù)數(shù)組求和 116 5.2.6 保存和恢復寄存器 118 5.2.7 本節(jié)回顧 119 5.3 鏈接到外部庫 119 5.3.1 背景知識 119 5.3.2 本節(jié)回顧 120 5.4 Irvine32鏈接庫 120 5.4.1 創(chuàng)建庫的動機 120 5.4.2 概述 122 5.4.3 過程詳細說明 123 5.4.4 庫測試程序 133 5.4.5 本節(jié)回顧 139 5.5 64位匯編編程 139 5.5.1 Irvine64鏈接庫 139 5.5.2 調(diào)用64位子程序 140 5.5.3 x64調(diào)用規(guī)范 140 5.5.4 調(diào)用過程示例 141 5.6 本章小結(jié) 142 5.7 關鍵術語 143 5.7.1 術語 143 5.7.2 指令、運算符和偽指令 143 5.8 復習題和練習 143 5.8.1 簡答題 143 5.8.2 算法基礎 146 5.9 編程練習 146 第6章 條件處理 148 6.1 條件分支 148 6.2 布爾和比較指令 148 6.2.1 CPU狀態(tài)標志 149 6.2.2 AND指令 149 6.2.3 OR指令 150 6.2.4 位映射集 151 6.2.5 XOR指令 152 6.2.6 NOT指令 153 6.2.7 TEST指令 153 6.2.8 CMP指令 154 6.2.9 置位和清除單個CPU標志位 155 6.2.10 64位模式下的布爾指令 155 6.2.11 本節(jié)回顧 156 6.3 條件跳轉(zhuǎn) 156 6.3.1 條件結(jié)構 156 6.3.2 Jcond指令 156 6.3.3 條件跳轉(zhuǎn)指令類型 157 6.3.4 條件跳轉(zhuǎn)應用 159 6.3.5 本節(jié)回顧 163 6.4 條件循環(huán)指令 163 6.4.1 LOOPZ和LOOPE指令 163 6.4.2 LOOPNZ和LOOPNE指令 164 6.4.3 本節(jié)回顧 164 6.5 條件結(jié)構 164 6.5.1 塊結(jié)構的IF語句 165 6.5.2 復合表達式 167 6.5.3 WHILE循環(huán) 168 6.5.4 表驅(qū)動選擇 169 6.5.5 本節(jié)回顧 171 6.6 應用:有限狀態(tài)機 172 6.6.1 驗證輸入字符串 172 6.6.2 驗證有符號整數(shù) 172 6.6.3 本節(jié)回顧 176 6.7 條件控制流偽指令 176 ……
你還可能感興趣
我要評論
|