x86 組合語言/簡介

組合語言是計算機程式設計師工具箱中最古老的工具之一。然而如今,整個軟體專案可以在不看一行彙編程式碼的情況下編寫。因此,這就產生了這樣一個問題:為什麼要學習組合語言?組合語言是人類與計算機之間最接近的溝通形式之一。透過組合語言,程式設計師可以以一種幾乎可讀的形式精確地跟蹤程式中資料的流動和執行。一旦程式被編譯,就很難(有時幾乎不可能)將程式碼反向工程到其原始形式。因此,如果您希望檢查已經編譯的程式,但不想檢視十六進位制或二進位制,則需要使用匯編語言進行檢查。由於偵錯程式通常只以組合語言顯示程式程式碼,因此這為學習該語言提供了眾多好處之一。
組合語言也是實現某些低階任務(如引導載入程式和低階核心元件)的首選工具,如果不是唯一的工具。用匯編語言編寫的程式碼比用高階語言編寫的程式碼開銷更小,因此彙編程式碼通常比用其他語言編寫的等效程式執行速度更快。此外,用高階語言編寫的程式碼可以編譯成組合語言並進行“手動最佳化”,以從程式碼中榨取每一絲速度。隨著英特爾和 AMD 等硬體製造商為其處理器新增新功能和新指令,通常情況下,訪問這些功能的唯一方法是使用匯編例程。也就是說,至少在主要的編譯器供應商新增對這些功能的支援之前是這樣。
然而,用匯編語言開發程式可能是一個非常耗時的過程。雖然用匯編語言編寫新專案可能不是一個好主意,但瞭解一點組合語言無疑是有價值的。
本書將作為組合語言的入門指南,也是一個很好的資源,適合那些已經瞭解組合語言的人,但需要更多關於 x86 系統架構的資訊的人。它還將描述 x86 組合語言的一些更高階的用途。鼓勵所有讀者閱讀(並貢獻)本書,儘管事先了解程式設計基礎知識無疑會更有益。
第一部分將討論 x86 系列晶片,並介紹基本指令集。第二部分將解釋不同彙編器語法之間的差異。第三部分將介紹一些可用的附加指令集,包括浮點、MMX 和 SSE 操作。
第四部分將介紹 x86 組合語言中的一些高階主題,包括一些低階程式設計任務,例如編寫引導載入程式。許多工無法在 C 或 C++ 等高階語言中輕鬆實現。例如,啟用和停用中斷、啟用保護模式、訪問控制暫存器、建立全域性描述符表以及其他任務都需要在組合語言中進行處理。第四部分還將處理將組合語言與 C 和其他高階語言進行互動。一旦用匯編語言編寫了函式(例如,啟用保護模式的函式),就可以將該函式與更大的基於 C(甚至基於 C++)的核心進行互動。第五部分將討論標準 x86 晶片組,介紹基本的 x86 計算機架構,並一般處理硬體方面的事情。
本書的當前佈局旨在為讀者提供儘可能多的資訊,而不會過分。想要學習特定彙編器上的組合語言的讀者只需要閱讀第一部分和第二部分中直接與他們的彙編器相關的章節。想要為不同演算法實現 MMX 或 SSE 指令的程式設計師只需要閱讀第三部分。想要實現引導載入程式、核心或其他低階任務的程式設計師可以閱讀第四部分。那些真正想要深入瞭解 x86 硬體設計的人可以繼續閱讀第五部分。