本文描述基本的32位X86匯編語言的一個子集,其中涉及匯編語言的最核心部分,包括寄存器結(jié)構(gòu),數(shù)據(jù)表示,基本的操作指令(包括數(shù)據(jù)傳送指令、邏輯計算指令、算數(shù)運算指令),以及函數(shù)的調(diào)用規(guī)則。個人認為:在理解了本文后,基本可以無障礙地閱讀絕大部分標準X86匯編程序。當然,更復(fù)雜的指令請參閱Intel相關(guān)文檔。
1 寄存器.
主要寄存器如下圖所示:
X86處理器中有8個32位的通用寄存器。由于歷史的原因,EAX通常用于計算,ECX通常用于循環(huán)變量計數(shù)。ESP和EBP有專門用途,ESP指示棧指針(用于指示棧頂位置),而EBP則是基址指針(用于指示子程序或函數(shù)調(diào)用的基址指針)。如圖中所示,EAX、EBX、ECX和EDX的前兩個高位字節(jié)和后兩個低位字節(jié)可以獨立使用,其中兩位低字節(jié)又被獨立分為H和L部分,這樣做的原因主要是考慮兼容16位的程序,具體兼容匹配細節(jié)請查閱相關(guān)文獻。
應(yīng)用寄存器時,其名稱大小寫是不敏感的,如EAX和eax沒有區(qū)別。
2 內(nèi)存和尋址模式
2.1聲明靜態(tài)數(shù)據(jù)區(qū)
可以在X86匯編語言中用匯編指令.DATA聲明靜態(tài)數(shù)據(jù)區(qū)(類似于全局變量),數(shù)據(jù)以單字節(jié)、雙字節(jié)、或雙字(4字節(jié))的方式存放,分別用DB,DW, DD指令表示聲明內(nèi)存的長度。在匯編語言中,相鄰定義的標簽在內(nèi)存中是連續(xù)存放的。
.DATA | |||
var | DB 64 | ;聲明一個字節(jié),并將數(shù)值64放入此字節(jié)中 | |
var2 | DB ? | ; 聲明一個為初始化的字節(jié). | |
網(wǎng)友評論 |