計算機系統之彙編---IA32處理器數據格式及數據操作

計算機系統之彙編---IA32處理器數據格式及數據操作

IA32數據格式:
Intel用術語“字”表示16位數據類型,因此,稱32位數爲“雙字”,稱64位數爲“四字”。




Char*這裏指的是所有指針類型,注意:c語言新增加的long long是八字節,但是硬件IA32不支持這個類型。

寄存器(8個32位的寄存器,均以%e開頭)
%eax、%ecx、%edx:調用者保存(數據)寄存器,當過程p調用q,q可以覆蓋這些寄存器,但是不會改變p中的數據。
%ebx、%esi、%edi:被調用者保存(數據)寄存器,當過場p調用q,q必須在覆蓋這些寄存器數據前,要把它們保存到棧,
並在調用結束返回時恢復它們,這些數據p或其他過程需要它們。
%esp、%ebp:有關棧指針的



大多數指令有一個或多個操作數,指示出執行一個操作中要引用的源數據值,以及放置結果的目標位置。源數據值可以以常數形式給出,或從寄存器或存儲器中讀出,結果可以保存放在寄存器或存儲器中。

操作數分三種:
>>>1. 立即數即常數,用$開頭,後面加一個整數表示;
>>>2. 寄存器數,對字操作而言表示某個寄存器中的保存的值;對字節操作而言是8個單字節寄存器中的 一個,比如:%al(eax寄存器中的低8位)
>>>3. 存儲器引用,根據計算出的有效地址來訪問存儲器的某個位置;包括四部分:立即數偏移(lmm)、基址寄存器 Eb、變址寄存器 Ei、比例因子s。 有效地址被計算爲 Imm + R[Eb] + R[Ei] * s。 (R[Eb]表示寄存器Eb的值,R[Ei]表示寄存器Ei的值,s的值只能是1,2,4或者8) 下表中Mb[addr] 表示對存儲器在存儲器中從地址addr開始的b個字節值的引用。

有關操作數格式表




例如:地址0x100的值是56,那麼操作數0x100的值就是56,屬於絕對尋址;$0x100的值0x100,是立即數尋址;
發佈了188 篇原創文章 · 獲贊 26 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章