64位元最新組合語言
64位元平台已漸為主流,組合語言撰寫也必須符合64位元平台規範方可執行,本書所撰寫程式皆可在64位元平台運作,讓開發跟上最新趨勢。
範例引導學習
每個章節皆設計大量範例與學習做結合,讓基礎從範例學習中建立,不再是單純的學習程式,可讓學習效果事半功倍。
習題驗收成果
章節學習後附有其相關練習題目,針對本章節內容作規劃,使學習成果可立即得到驗證,隨時針對不足之處再次加強。
《本書特色》
◎實例解說破除組合語言艱深難學的刻板印象
◎使用NASM組合語言易於建立程式執行環境,同時具有跨平台優點
◎大量範例使學習更紮實,練習題目可讓學習成果得到驗證
作者序
組合語言通常稱為低階程式語言,只有學過組合語言後才能了解如何控制整部電腦。使用高階程式語言,只能依編譯器所提供的功能來設計程式。組合語言雖然也須要組譯,但是限制較少,設計的彈性較大,很多程式都要自己動手做,因此成就感較大,當然付出的代價也較高。
組合語言給人的印象是艱深而難學,困難的原因有下列兩點:
1. 對電腦各部份的功能不了解。
2. 作業系統不直接提供輸入輸出函式,增加學習困難。
對於第一點困難,正是我們學習組合語言的目標,透過適當的範例實作與說明,這一點困難可以逐漸克服。對於第二點困難,目前 x64 平台提供 C 語言函式庫的介面,必須自己設計一個介面將 C 語言函式庫轉成組合語言的函式,組合語言程式才能直接呼叫。
那麼要如何才能克服困難而學好組合語言呢?
首先應以程式設計者的眼光來看待電腦,剛開始必須建立起來程式的執行環境,如何編寫程式,如何組譯程式,如何執行程式以取得答案,等等的環境,為了這個目的筆者選 NASM 組合語言,很容易就可以建立程式的執行環境,而且 NASM 是跨平台,可從下列網站免費下載:http://www.nasm.us/
接著要將組合語言當高階語言來學,筆者起意撰寫本書也是為了讓讀者實現將組合語言當高階程式語言來學的夢想,因此筆者將大多數常用的 C 語言輸入輸出函式轉成組合語言的巨集(MACRO),建成一個巨集檔(bin\nasm64io.mac),組合語言的程式可以直接呼叫該檔案裡的巨集,方便程式設計。
本書例題及習題程式很多,透過實作希望對您的學習有所幫助。授課教師請向出版商索取相關的教學電子檔案。
本書錯誤難免,敬請高明斧正,感激不盡。
林邦傑 謹識
2011/11/11
組合語言通常稱為低階程式語言,只有學過組合語言後才能了解如何控制整部電腦。使用高階程式語言,只能依編譯器所提供的功能來設計程式。組合語言雖然也須要組譯,但是限制較少,設計的彈性較大,很多程式都要自己動手做,因此成就感較大,當然付出的代價也較高。
組合語言給人的印象是艱深而難學,困難的原因有下列兩點:
1. 對電腦各部份的功能不了解。
2. 作業系統不直接提供輸入輸出函式,增加學習困難。
對於第一點困難,正是我們學習組合語言的目標,透過適當的範例實作與說明,這一點困難可以逐漸克服。對於第二點困難,目前 x...
目錄
Chapter 0本書導讀
在本章節中將引領進入本書,介紹有關本書的一切。
Chapter 1 個人電腦基本功能
寫組合語言的程式必須俱備有關電腦硬體以及指令的知識。本章說明電腦的基本功能。
Chapter 2 NASM組合語言基礎
NASM是一種跨平台的程式語言,只要合乎x86、x86-64、x64 架構的處理器所組成的電腦均適用,它也是一種可攜性高且具模組性的一種組合語言。
Chapter 3 一般指令
本章說明一些一般性的組合語言指令,包括暫存器間資料的拷貝,暫存器與記憶體間資料的傳遞,以及暫存器與堆疊間資料的搬移。
Chapter 4 Win 64呼叫慣例
從Win32 到Win64 有兩項重要的修改,就是六十四位元的定址功能,以及供一般用途使用的十六個六十四位元暫存器的一般設定。
Chapter 5 程式流程控制
程式流程控制是指控制程式中指令執行的順序。依序執行、選擇執行以及重複執行等三種指令是結構化程式設計的三種基本結構。本章主要說明這三種結構及其用法。
Chapter 6 算術運算
在本章您除了會了解整數的加減乘除算術四則計算外,您還會看到有關浮點數的處理。
Chapter 7 程序
程序可以說是一小段的獨立程式,這裡所說的獨立是指邏輯上的獨立,因為是一小段程式所以也稱為函式、常式、副常式、或副程式等,不一而足,其實都表示同一個意思。
Chapter 8 字串處理
x64 處理器提供指令讓您處理字串,並提供一些對字串基本操作的重要指令。
Chapter 9 位元運算
電腦記憶體的最小單元為位元,經常需要更改資料中的某一位元。所以了解位元運算可以說是基本的需要了。
Chapter 10檔案
檔案有許多特點,有檔名、必須開啟、有時需要關閉、可以讀取、可以寫入、也可以附加等等。
Chapter 11 資料結構
陣列與結構均屬於靜態結構,串列、佇列、堆疊等結構則屬於動態的。在組合語言裡並沒有提供陣列及結構的機制,不過我們可以試著來建立這種結構。
Chapter 12 浮點數運算
本章對於x87 數值型共同處理器的要點作一個簡單的介紹,包括浮點堆疊、狀態字組、控制字組、標籤字組、以及浮點指令的運算。
Chapter 13 Win32 與Win64 呼叫慣例之比較
本章是針對Win32 API 及Win64 ABI 呼叫微軟VC++ 語言函式慣例的比較。
Chapter 0本書導讀
在本章節中將引領進入本書,介紹有關本書的一切。
Chapter 1 個人電腦基本功能
寫組合語言的程式必須俱備有關電腦硬體以及指令的知識。本章說明電腦的基本功能。
Chapter 2 NASM組合語言基礎
NASM是一種跨平台的程式語言,只要合乎x86、x86-64、x64 架構的處理器所組成的電腦均適用,它也是一種可攜性高且具模組性的一種組合語言。
Chapter 3 一般指令
本章說明一些一般性的組合語言指令,包括暫存器間資料的拷貝,暫存器與記憶體間資料的傳遞,以及暫存器與堆疊間資料的搬移。
Chapter 4 Win 64呼叫慣...