當前位置:首頁 » 編程軟體 » x86x64體系探索及編程

x86x64體系探索及編程

發布時間: 2025-05-24 17:15:06

⑴ x86/x64體系探索及編程的前言

2003年前後,我開始對x86平台的一些架構知識產生了濃厚的興趣,在業余時間斷斷續續地學習了AMD的System Programming手冊。後來,為了方便,索性挑了些感興趣的章節列印出來,偶爾拿出來翻翻。也曾通過寫一個OS來學習x64的體系知識,當然這個OS只是個試驗品。
在計劃好寫本書之後,我又好好地重讀了Intel的幾卷手冊,特別是Intel 64 and IA-32 Architectures Software Developer's Manual的Volume 3 System Programming Guide和Volume 1 Basic Architecture。
因此,本書所寫的內容是基於Intel處理器的,至於所測試機器的處理器則是Intel的Westmere微架構處理器(SandyBridge的上一代)。但是,如非明確註明,大部分內容對於AMD處理器也是適用的,有些地方甚至反復多次對Intel與AMD的區別進行了強調。
盡管我已竭力探索事物的本質真相,然而不可否認,本書中仍可能會有些個人主觀的認知因素,但必須說明的是,這些主觀的認知是經過客觀的實驗事實而得出的,本書的每個知識點都經過了實驗例子進行測試。在本書成書過程中,我慢慢地發現,如果沒有經過實驗的測試竟然覺得心裡不踏實,總覺得欠缺什麼而不敢下筆。本書中有上百個實驗,每個章節都有數個例子。然而比起我所做過的測試仍相距甚遠。
通過本書,我希望能引起讀者的共嗚,激發求知的慾望和探索的精神,以及學會怎樣「肓人摸象」。盡管摸到的可能只是事實的一部分,但是只要我們不斷地進行摸索,經過反復的測試,我們終將會慢慢積累知識,在一無所知的情況下逐步接近真相。

⑵ x86/x64體系探索及編程的讀者對象

如果你工作在x86與x64平台上;如果你對x86與x64架構知識有興趣;如果你正在學習x86與x64,或者有一定的基礎,想繼續擴展視野:我想本書是適合你閱讀的。
本書假設你有一定的x86基礎知識,包括:
1)有一些匯編語言的基礎,至少能看懂一些簡單的匯編代碼。
2)有一些x86架構知識,知道x86是什麼。譬如:知道什麼是實模式、保護模式等。
3)最好能有一些寫boot代碼的知識。即使沒有,你也可以參照書中的源代碼例子。
盡管書中例子是使用匯編語言編寫,但即便你的匯編語言基礎不那麼好,閱讀起來也不會感到太困難,因為這些例子的代碼並不像從高級語言反匯編出來的代碼那樣涉及過多的程序結構知識,譬如:
1)你不會面對著stack的各種開棧銷棧處理,因為實驗例子中的過程調用基本上不會使用棧來傳遞參數。
2)你不會面對著各種復雜的程序分支結構和編程技巧,實驗例子都使用很純粹的匯編代碼編寫。
了解一下nasm
如果你對匯編語言掌握比較熟練,你可能需要去了解一下nasm匯編語法,因為本書的所有實驗例子都使用nasm編譯器編譯。別擔心,對一條匯編代碼,nasm的語法和Intel使用的語法是一樣的,但對於操作數定址到內存,則表達形式有一些差異。
nasm與Intel在內存操作數定址的表達上有一些區別,主要有以下兩方面。
1)operand size(操作數尺寸)的指示字。
2)segment override prefix(段改寫前綴)的位置。
在Intel語法上:
mov dword ptr [eax], 1 ; 操作數尺寸使用dword ptr指示字
mov eax, cs:[20100h] ; 段前綴放在[]括弧外
而在nasm語法上則需要變通一下:
mov dword [eax], 1 ; 操作數尺寸指示字去掉ptr字
mov eax, [cs:20100h] ; 段前綴放在[]括弧內
另外,例子中也有使用宏定義,因此也需要注意一下nasm中宏的定義方式,如下所示:
%macro NMI_DISABLE 0 ; 由%macro 開始,參數個數為0
......
%endmacro ; 由%endmacro結束

⑶ x86/x64體系探索及編程的本書特色

本書是對Intel手冊所描述的處理器架構進行探索和論證,每個章節都有相應的測試實驗,所運行的實驗例子可以在真實的機器上執行。部分實驗是不能在VMware虛擬機和bochs模擬器上進行的,必須要在真實機器上運行。例如:第3篇的絕大部分內容和第4篇的部分內容。
通過閱讀本書,大約能培養自己動手實驗的能力。由於本書的實例是在祼機(無OS環境)上運行,因此,如果能走完本書的例子,加上一些OS知識的處理,基本上就可以寫出自己簡易的OS核心。
關於x86與x64
本書的另一個特色是無縫地集成了對x86與x64體系的描述。因此,既適合於x86體系,也適合於x64體系。這是因為,x64是在x86的基礎上擴展而來的64位技術,x64體系有x86的全部內容,又增添了全新的long-mode工作模式與64位執行環境。
在現在的技術趨勢下,為什麼還要保留對x86體系的描述?一方面,這能滿足不同的讀者層;另一方面,也是最重要的原因:x64體系並不是一個全新的平台架構,而是基於x86架構擴展而來的。因此對x64的描述絕不能脫離x86架構,x64體系還保留著向下兼容的能力,在long-mode的64位執行環境里,許多情況下仍然可能使用常見的32位編程技術,這主要是因為,在64位執行環境里,盡管default address size(默認地址大小)是64位,然而絕大部分指令的default operand size(默認操作數大小)依然是32位。
從軟體編程的角度上看,Pointer(指針)值是屬於64位的(地址寬度為64位),但是integer與long仍屬於32位(默認的數據寬度為32位),除非明確數據使用64位的long long類型訪問,64位執行環境里指令使用REX prefix(REX擴展操作數前綴)來達到訪問64位的數據寬度。
當然,如果只把它看成一本描述x64體系的書籍,那也是沒問題的!即使是Intel官方的手冊里也是同時在對Intel64與IA-32架構進行描述。

熱點內容
樂清dns伺服器地址 發布:2025-05-24 20:17:46 瀏覽:833
蘋果訪問限制app 發布:2025-05-24 20:12:04 瀏覽:990
工資資料庫 發布:2025-05-24 20:09:49 瀏覽:237
夾具動作編程 發布:2025-05-24 20:09:48 瀏覽:825
現在php版本 發布:2025-05-24 20:04:40 瀏覽:616
安卓內存佔用多少哪裡看 發布:2025-05-24 19:31:29 瀏覽:330
如何設置郵政電子銀行密碼 發布:2025-05-24 19:24:56 瀏覽:732
gbm演算法 發布:2025-05-24 19:07:36 瀏覽:870
怎麼判斷sr9配置 發布:2025-05-24 19:03:52 瀏覽:251
linux系統下安裝win7 發布:2025-05-24 18:58:15 瀏覽:561