预购商品
书目分类
特别推荐
譯者序 前言 關於作者 相關碼表 第1章基本概念1 1.1歡迎來到組合語言的世界1 1.1.1讀者可能會問的問題2 1.1.2組合語言的應用4 1.1.3本節回顧5 1.2虛擬機器概念5 1.2.1本節回顧6 1.3資料表示7 1.3.1二進位整數7 1.3.2二進位加法9 1.3.3整數存儲大小9 1.3.4十六進位整數10 1.3.5十六進位加法11 1.3.6有符號二進位整數12 1.3.7二進位減法14 1.3.8字元存儲14 1.3.9二進位編碼的十進位數字16 1.3.10本節回顧16 1.4布林運算式17 1.4.1布耳函數的真值表18 1.4.2本節回顧19 1.5本章小結20 1.6關鍵術語20 1.7複習題和練習21 1.7.1簡答題21 1.7.2演算法題22 第2章x86處理器架構23 2.1一般概念23 2.1.1基本微機設計23 2.1.2指令執行週期24 2.1.3讀取記憶體25 2.1.4載入並執行程式26 2.1.5本節回顧27 2.232位x86處理器27 2.2.1操作模式27 2.2.2基本執行環境28 2.2.3x86記憶體管理30 2.2.4本節回顧31 2.364位x86-64處理器31 2.3.164位元操作模式32 2.3.2基本的64位執行環境32 2.3.3本節回顧33 2.4典型x86電腦的元件33 2.4.1主機板33 2.4.2記憶體35 2.4.3本節回顧35 2.5輸入/輸出系統36 2.5.1I/O訪問層次36 2.5.2本節回顧38 2.6本章小結38 2.7關鍵術語39 2.8複習題40 第3章組合語言基礎41 3.1基本語言元素41 3.1.1個組合語言程式41 3.1.2整數字面量42 3.1.3常整數運算式43 3.1.4實數字面量43 3.1.5字元字面量44 3.1.6字串字面量44 3.1.7保留字44 3.1.8識別字45 3.1.9虛擬指令45 3.1.10指令46 3.1.11本節回顧48 3.2示例:整數加減法48 3.2.1AddTwo程式48 3.2.2運行和調試AddTwo程式50 3.2.3程式範本54 3.2.4本節回顧54 3.3彙編、連結和運行程式55 3.3.1彙編–連結–執行週期55 3.3.2列表文件55 3.3.3本節回顧57 3.4定義資料57 3.4.1內部資料類型57 3.4.2資料定義語句58 3.4.3向AddTwo程式添加一個變數58 3.4.4定義BYTE和SBYTE資料59 3.4.5定義WORD和SWORD資料61 3.4.6定義DWORD和SDWORD資料61 3.4.7定義QWORD資料62 3.4.8定義壓縮的BCD(TBYTE)資料62 3.4.9定義浮點類型62 3.4.10變數相加程式63 3.4.11小端序64 3.4.12聲明未初始化數據64 3.4.13本節回顧65 3.5符號常量653.5.1等號虛擬指令66 3.5.2計算陣列和字串的大小67 3.5.3EQU虛擬指令68 3.5.4TEXTEQU虛擬指令68 3.5.5本節回顧69 3.664位程式設計介紹70 3.7本章小結71 3.8關鍵術語72 3.8.1術語72 3.8.2指令、操作符及虛擬指令72 3.9複習題和練習73 3.9.1簡答題73 3.9.2演算法題73 3.10程式設計練習74 第4章資料傳送、定址及算數運算75 4.1資料傳送指令75 4.1.1引言75 4.1.2運算元類型75 4.1.3直接記憶體運算元76 4.1.4MOV指令77 4.1.5整數的零/符號擴展78 4.1.6LAHF和SAHF指令79 4.1.7XCHG指令80 4.1.8直接–偏移量運算元80 4.1.9傳送資料的示例81 4.1.10本節回顧834.2加法和減法84 4.2.1INC和DEC指令84 4.2.2ADD指令84 4.2.3SUB指令85 4.2.4NEG指令85 4.2.5實現算術運算式85 4.2.6加減法影響的標誌86 4.2.7示例程式(AddSubTest)88 4.2.8本節回顧89 4.3與資料相關的操作符和虛擬指令90 4.3.1OFFSET操作符90 4.3.2ALIGN虛擬指令91 .3.3PTR操作符92 4.3.4TYPE操作符92 4.3.5LENGTHOF操作符93 4.3.6SIZEOF操作符93 4.3.7LABEL虛擬指令94 4.3.8本節回顧94 4.4間接定址94 4.4.1間接運算元94 4.4.2陣列95 4.4.3變址運算元96 4.4.4指針97 4.4.5本節回顧99 4.5JMP和LOOP指令100 4.5.1JMP指令100 4.5.2LOOP指令101 4.5.3在VisualStudio調試器中顯示陣列102 4.5.4整數陣列求和103 4.5.5複製字串103 4.5.6本節回顧104 4.664位程式設計105 4.6.1MOV指令105 4.6.264位元版本的SumArray程式105 4.6.3加法和減法106 4.6.4本節回顧107 4.7本章小結107 4.8關鍵術語109 4.8.1術語109 4.8.2指令、操作符及虛擬指令109 4.9複習題和練習109 4.9.1簡答題109 4.9.2演算法題111 4.10程式設計練習112 第5章過程113 5.1堆疊操作113 5.1.1運行時堆疊(32位元模式)113 5.1.2PUSH和POP指令115 5.1.3本節回顧118 5.2定義和使用過程118 5.2.1PROC虛擬指令118 5.2.2CALL和RET指令120 5.2.3嵌套程序呼叫120 5.2.4向過程傳遞寄存器參數121 5.2.5示例:整數陣列求和122 5.2.6保存和恢復寄存器123 5.2.7本節回顧124 5.3連結到外部庫124 5.3.1背景資訊125 5.3.2本節回顧125 5.4Irvine32庫126 5.4.1創建庫的動機126 5.4.2Win32控制台窗口127 5.4.3各個過程的描述128 5.4.4庫測試程式138 5.4.5本節回顧144 5.564位彙編程式設計145 5.5.1Irvine64庫145 5.5.2調用64位子常式145 5.5.3x64調用規約146 5.5.4調用過程的示例程式146 5.5.5本節回顧147 5.6本章小結148 5.7關鍵術語149 5.7.1術語149 >5.7.2指令、操作符及虛擬指令149 5.8複習題和練習149 5.8.1簡答題149 5.8.2演算法題151 5.9程式設計練習152 第6章條件處理154 6.1布林和比較指令154 6.1.1CPU狀態標誌154 6.1.2AND指令155 6.1.3OR指令156 6.1.4位映射集157 6.1.5XOR指令158 6.1.6NOT指令159 6.1.7TEST指令159 6.1.8CMP指令160 6.1.9置位元和清零各個CPU標誌161 6.1.1064位元模式下的布林指令161 6.1.11本節回顧161 6.2條件跳轉162 6.2.1條件結構162 6.2.2Jcond指令162 6.2.3條件跳轉指令的類型163 6.2.4條件跳轉應用166 6.2.5本節回顧169 6.3條件迴圈指令170 6.3.1LOOPZ和LOOPE指令170 6.3.2LOOPNZ和LOOPNE指令170 6.3.3本節回顧171 6.4條件結構171 6.4.1塊結構的IF語句171 6.4.2複合運算式175 6.4.3WHILE迴圈176 6.4.4表驅動的選擇178 6.4.5本節回顧180 6.5應用:有限狀態機181 6.5.1驗證輸入字串181 6.5.2驗證有符號整數182 6.5.3本節回顧185 6.6條件控制流虛擬指令(可選主題)186 6.6.1創建IF語句186 6.6.2有符號數和無符號數的比較188 6.6.3複合運算式189 6.6.4用.REPEAT和.WHILE創建迴圈191 6.7本章小結192 6.8關鍵術語193 6.8.1術語193 6.8.2指令、操作符及虛擬指令193 6.9複習題和練習194 6.9.1簡答題194 6.9.2演算法題195 6.10程式設計練習196 6.10.1對代碼測試的建議196 6.10.2習題描述197 第7章整數算數運算200 7.1移位元和迴圈移位元指令200 7.1.1邏輯移位元和算術移位200 7.1.2SHL指令201 7.1.3SHR指令202 7.1.4SAL和SAR指令202 7.1.5ROL指令203 7.1.6ROR指令204 7.1.7RCL和RCR指令204 7.1.8有符號數溢出205 7.1.9SHLD/SHRD指令205 7.1.10本節回顧207 7.2移位和迴圈移位的應用207 7.2.1多個雙字的移位208 7.2.2通過移位做乘法208 7.2.3顯示二進位位元209 7.2.4提取檔日期欄位210 7.2.5本節回顧210 7.3乘法和除法指令212 7.3.1不帶正負號的整數乘法(MUL)212 7.3.2有符號整數乘法(IMUL)213 7.3.3測量程式執行時間216 7.3.4不帶正負號的整數除法(DIV)217 7.3.5有符號整數除法(IDIV)219 7.3.6實現算術運算式222 7.3.7本節回顧224 7.4擴展的加減法225 7.4.1ADC指令225 7.4.2擴展加法的示例225 7.4.3SBB指令227 7.4.4本節回顧228 7.5ASCII和非壓縮十進位算數運算228 7.5.1AAA指令229 7.5.2AAS指令230 7.5.3AAM指令231 7.5.4AAD指令231 7.5.5本節回顧231 7.6壓縮十進位的算數運算232 7.6.1DAA指令232 7.6.2DAS指令233 7.6.3本節回顧233 7.7本章小結234 7.8關鍵術語235 7.8.1術語235 7.8.2指令、操作符及虛擬指令235 7.9複習題和練習235 7.9.1簡答題235 7.9.2演算法題237 7.10程式設計練習237 第8章過程240 8.1引言240 8.2堆疊幀240 8.2.1堆疊參數240 8.2.2寄存器參數的缺點241 8.2.3訪問堆疊參數243 8.2.432位調用規約245 8.2.5區域變數246 8.2.6傳址參數247 8.2.7LEA指令248 8.2.8ENTER和LEAVE指令249 8.2.9LOCAL虛擬指令250 8.2.10Microsoftx64調用規約251 8.2.11本節回顧252 8.3遞迴252 8.3.1遞迴求和253 8.3.2計算階乘254 8.3.3本節回顧258 8.4INVOKE、ADDR、PROC及PROTO259 8.4.1INVOKE虛擬指令259 8.4.2ADDR操作符260 8.4.3PROC虛擬指令260 8.4.4PROTO虛擬指令263 8.4.5參數分類266 8.4.6示例:交換兩個整數266 8.4.7調試提示267 8.4.8WriteStackFrame過程267 8.4.9本節回顧268 8.5創建多模組程式269 8.5.1隱藏和匯出過程名269 8.5.2調用外部過程269 8.5.3跨模組使用變數和符號270 8.5.4示例:ArraySum程式271 8.5.5用Extern創建模組271 8.5.6用INVOKE和PROTO創建模組274 8.5.7本節回顧277 8.6參數的用法(可選主題)277 8.6.1受USES操作符影響的堆疊277 8.6.2向堆疊傳遞8位元和16位參數278 8.6.3傳遞64位參數279 8.6.4非雙字區域變數280 8.7Java位元組碼(可選主題)281 8.7.1Java虛擬機器281 8.7.2指令集282 8.7.3Java反彙編示例283 8.7.4示例:條件分支285 8.8本章小結287 8.9關鍵術語288 8.9.1術語288 8.9.2指令、操作符及虛擬指令288 8.10複習題和練習288 8.10.1簡答題288 8.10.2演算法題289 8.11程式設計練習289 第9章字串和陣列291 9.1引言291 9.2字串原語指令291 9.2.1MOVSB、MOVSW及MOVSD292 9.2.2CMPSB、CMPSW及CMPSD293 9.2.3SCASB、SCASW及SCASD293 9.2.4STOSB、STOSW及STOSD294 9.2.5LODSB、LODSW及LODSD294 9.2.6本節回顧294 9.3若干字串過程295 9.3.1Str_compare過程295 9.3.2Str_length過程296 9.3.3Str_copy過程297 9.3.4Str_trim過程297 9.3.5Str_ucase過程299 9.3.6字串庫演示程式300 9.3.7Irvine64庫中的字串過程301 9.3.8本節回顧304 9.4二維陣列304 9.4.1行列順序304 9.4.2基址–變址運算元30 9.4.3基址–變址–位移運算元306 9.4.464位元模式下的基址–變址運算元307 9.4.5本節回顧308 9.5整數陣列的查找和排序308 9.5.1冒泡排序309 9.5.2對半查找310 9.5.3本節回顧315 9.6Java位元組碼:字串處理(可選主題)315 9.7本章小結316 9.8關鍵術語和指令317 9.9複習題和練習317 9.9.1簡答題317 9.9.2演算法題318 9.10程式設計練習318 第10章結構和巨集322 10.1結構322 10.1.1定義結構322 10.1.2聲明結構物件323 10.1.3引用結構物件324 10.1.4示例:顯示系統時間327 10.1.5結構包含結構329 10.1.6示例:醉漢行走329 10.1.7聲明和使用聯合332 10.1.8本節回顧334 10.2宏334 10.2.1概述334 10.2.2定義宏335 10.2.3調用宏336 10.2.4其他宏特性337 10.2.5使用本書的宏庫(僅32位元模式)340 10.2.6示例程式:封裝器345 10.2.7本節回顧346 10.3條件彙編虛擬指令347 10.3.1檢查缺失的參數347 10.3.2默認參數初始化值348 10.3.3布林運算式348 10.3.4IF、ELSE及ENDIF虛擬指令349 10.3.5IFIDN和IFIDNI虛擬指令349 10.3.6示例:矩陣行求和350 10.3.7特殊操作符353 10.3.8巨集函數356 10.3.9本節回顧357 10.4定義重複語句塊357 10.4.1WHILE虛擬指令358 10.4.2REPEAT虛擬指令358 10.4.3FOR虛擬指令358 10.4.4FORC虛擬指令359 10.4.5示例:鏈表360 10.4.6本節回顧361 10.5本章小結362 10.6關鍵術語363 10.6.1術語363 10.6.2操作符及虛擬指令363 10.7複習題和練習364 10.7.1簡答題364 10.7.2演算法題364 10.8程式設計練習366 第11章MS-Windows程式設計368 11.1Win32控制台程式設計368 11.1.1背景資訊368 11.1.2Win32控制台函數371 11.1.3顯示訊息方塊373 11.1.4控制台輸入375 11.1.5控制台輸出380 11.1.6讀寫文件382 11.1.7Irvine32庫中的文件I/O385 11.1.8測試檔I/O過程386 11.1.9控制台視窗操作389 11.1.10控制游標392 11.1.11控制文本顏色392 11.1.12時間和日期函數394 11.1.13使用64位WindowsAPI397 11.1.14本節回顧398 11.2編寫圖形化的Windows應用程式398 11.2.1必要的結構399 11.2.2MessageBox函數400 11.2.3WinMain過程400 11.2.4WinProc過程401 11.2.5ErrorHandler過程401 11.2.6程式清單402 11.2.7本節回顧405 11.3動態記憶體分配405 11.3.1HeapTest程式408 11.3.2本節回顧411 11.432位元x86存儲管理411 11.4.1線性位址412 11.4.2頁轉換414 11.4.3本節回顧416 11.5本章小結416 11.6關鍵術語417 11.7複習題和練習417 11.7.1簡答題417 11.7.2演算法題418 11.8程式設計練習418 第12章浮點數處理和指令編碼420 12.1浮點數的二進位表示420 12.1.1IEEE二進位浮點數表示420 12.1.2階數421 12.1.3規格化二進位浮點數422 12.1.4創建IEEE表示422 12.1.5將十進位分數轉換為二進位實數424 12.1.6本節回顧425 12.2浮點單元425 12.2.1FPU寄存器棧426 12.2.2舍入428 12.2.3浮點異常429 12.2.4浮點指令集429 12.2.5算數運算指令432 12.2.6比較浮點數值435 12.2.7讀寫浮點數值437 12.2.8異常同步438 12.2.9代碼示例439 12.2.10混合模式算數運算440 12.2.11遮罩和非遮罩異常441 12.2.12本節回顧442 12.3x86指令編碼443 12.3.1指令格式443 12.3.2單字節指令444 12.3.3將立即數送入寄存器444 12.3.4寄存器模式指令445 12.3.5處理器運算元大小首碼446 12.3.6記憶體模式指令446 12.3.7本節回顧448 12.4本章小結449 12.5關鍵術語450 12.6複習題和練習450 12.6.1簡答題450 12.6.2演算法題451 12.7程式設計練習452 第13章語言介面454 13.1引言454 13.1.1通用規約454 13.1.2.MODEL虛擬指令455 13.1.3檢查編譯器生成的代碼457 13.1.4本節回顧460 13.2內聯彙編代碼461 13.2.1VisualC++中的_?_asm虛擬指令461 13.2.2檔加密示例463 13.2.3本節回顧465 13.3將32位元組合語言代碼連結到C/C++466 13.3.1IndexOf示例466 13.3.2調用C和C++函數469 13.3.3乘法表的示例471 13.3.4本節回顧474 13.4本章小結474 13.5關鍵術語474 13.6複習題474 13.7程式設計練習475 第14章16位MS-DOS程式設計476 14.1MS-DOS和IBM-PC476 14.1.1記憶體組織476 14.1.2重定向輸入/輸出478 14.1.3軟體插斷78 14.1.4INT指令478 14.1.516位元程式的代碼編寫479 14.1.6本節回顧481 14.2MS-DOS功能調用(INT21h)481 14.2.1若干輸出功能482 14.2.2HelloWorld程式示例483 14.2.3若干輸入功能484 14.2.4日期/時間功能487 14.2.5本節回顧490 14.3標準的MS-DOS檔I/O服務490 14.3.1創建或打開文件(716Ch)491 14.3.2關閉檔案控制代碼(3Eh)492 14.3.3移動文件指標(42h)493 14.3.4獲取檔創建日期和時間493 14.3.5若干庫過程494 14.3.6示例:讀取和複製一個文字檔495 14.3.7讀取MS-DOS命令的尾部496 14.3.8示例:創建二進位檔案498 14.3.9本節回顧501 14.4本章小結501 14.5關鍵術語503 14.6程式設計練習503 第15章磁片基礎知識505 15.1磁片存儲系統505 15.1.1磁軌、柱面及磁區505 15.1.2磁碟分割(卷)506 15.1.3本節回顧507 15.2檔案系統508 15.2.1FAT12508 15.2.2FAT16509 15.2.3FAT32509115.2.4NTFS509 15.2.5主要磁碟區510 15.2.6本節回顧510 15.3磁片目錄511 15.3.1MS-DOS目錄結構512 15.3.2MS-Windows中的長檔名513 15.3.3檔案配置表515 15.3.4本節回顧515 15.4讀寫磁片磁區515 15.4.1磁區顯示程式517 15.4.2本節回顧520 15.5系統級檔功能520 15.5.1獲取磁片空閒空間(7303h)520 15.5.2創建子目錄(39h)523 15.5.3刪除子目錄(3Ah)523 15.5.4設置目前的目錄(3Bh)523 15.5.5獲取目前的目錄(47h)524 15.5.6獲取和設置檔案屬性(7143h)524 15.5.7本節回顧525 15.6本章小結525 15.7關鍵術語526 15.8程式設計練習526 第16章BIOS級程式設計528 16.1引言528 16.1.1BIOS數據區528 16.2使用INT16h進行鍵盤輸入529 16.2.1鍵盤如何工作530 16.2.2INT16h功能530 16.2.3本節回顧534 16.3使用INT10h進行視頻程式設計534 16.3.1基本背景534 16.3.2控制顏色536 16.3.3INT10h視頻功能537 16.3.4庫過程示例546 16.3.5本節回顧547 16.4使用INT10h繪製圖形547 16.4.1INT10h與圖元有關的功能548 16.4.2程式DrawLine548 16.4.3笛卡爾座標程式550 16.4.4將笛卡爾座標轉換為螢幕座標552 16.4.5本節回顧552 16.5記憶體映射的圖形553 16.5.1模式13h:320×200,256色553 16.5.2記憶體映射圖形程式554 16.5.3本節回顧556 16.6滑鼠程式設計557 16.6.1滑鼠INT33h功能557 16.6.2滑鼠跟蹤程式561 16.6.3本節回顧565 16.7本章小結565 16.8程式設計練習566 網路資源 附錄AMASM參考知識 附錄Bx86指令集 附錄CBIOS和MS-DOS中斷 附錄D“本節回顧”的問題答案(4~16章) 詞彙表
客服公告
热门活动
订阅电子报