本文描述基本的32位X86匯編語言的一個子集,其中涉及匯編語言的最核心部分,包括寄存器結(jié)構(gòu),數(shù)據(jù)表示,基本的操作指令(包括數(shù)據(jù)傳送指令、邏輯計算指令、算數(shù)運算指令),以及函數(shù)的調(diào)用規(guī)則。個人認(rèn)為:在理解了本文后,基本可以無障礙地閱讀絕大部分標(biāo)準(zhǔn)X86匯編程序。當(dāng)然,更復(fù)雜的指令請參閱Intel相關(guān)文檔。

1 寄存器.

主要寄存器如下圖所示:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

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位的程序,具體兼容匹配細(xì)節(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)存的長度。在匯編語言中,相鄰定義的標(biāo)簽在內(nèi)存中是連續(xù)存放的。

      .DATA


      varDB 64  ;聲明一個字節(jié),并將數(shù)值64放入此字節(jié)中
      var2DB ?; 聲明一個為初始化的字節(jié).

      網(wǎng)友評論