IA32數(shù)據(jù)格式
類型 Intel數(shù)據(jù)類型 匯編代碼后綴
Char 字節(jié) b(1字節(jié))
Short 字 w(2字節(jié))
Int 雙字 l(4字節(jié))
Long int 雙字 l(4字節(jié))
Long long int - 4字節(jié)
Char* 雙字 l(4字節(jié))
Float 單精度 s(4字節(jié))
Double 雙精度 l(8字節(jié))
Long double 擴(kuò)展精度 t(10或12字節(jié))
Char*這里指的是所有指針類型,注意:c語言新增加的long long是八字節(jié),但是硬件IA32不支持這個類型。
例如:mo
寄存器(8個32位的寄存器,均以%e開頭)
%eax、%ecx、%edx:調(diào)用者保存(數(shù)據(jù))寄存器,當(dāng)過程p調(diào)用q,q可以覆蓋這些寄存器,但是不會改變p中的數(shù)據(jù)。
%ebx、%esi、%edi:被調(diào)用者保存(數(shù)據(jù))寄存器,當(dāng)過場p調(diào)用q,q必須在覆蓋這些寄存器數(shù)據(jù)前,要把它們保存到棧,
并在調(diào)用結(jié)束返回時恢復(fù)它們,這些數(shù)據(jù)p或其他過程需要它們。
%esp、%ebp:有關(guān)棧指針的
操作數(shù)分三種:立即數(shù)即常數(shù),用$開頭,后面加一個整數(shù)表示;
寄存器數(shù),對字操作而言表示某個寄存器中的保存的值;對字節(jié)操作而言是8個單字節(jié)寄存器中的一個,比如:%al(eax寄存器中的低8位)
存儲器引用,根據(jù)計算出的有效地址來訪問存儲器的某個位置;包括四部分:偏移數(shù)(lmm)、基地址Eb、變址寄存器Ei、比例因子s
有關(guān)操作數(shù)格式表
類型 格式 操作數(shù)值 名稱
立即數(shù) $Imm Imm 立即數(shù)尋址
寄存器 Ea R[Ea] 寄存器尋址
存儲器 Imm M[Imm] 絕對尋址
存儲器 (Ea) M[R[Ea]] 間接尋址
存儲器 Imm(Eb) M[Imm+R[Eb]] (基地址+偏移量)尋址
存儲器 (Eb,Ei) M[R[Eb]+R[Ei]] 變址尋址
存儲器 Imm(Eb,Ei) M[Imm+R[Eb]+R[Ei]] 變址尋址
存儲器 (,Ei,s) M[R[Eb].s] 比例變址尋址
存儲器 Imm(,Ei,,,s) M[Imm+R[Eb].s] 比例變址尋址
存儲器 (Eb,Ei,s) M[R[Eb]+R[Ei].s] 比例變址尋址
寄存器 Imm(Eb,Ei,s) M[Imm+R[Eb]+R[Ei].s] 比例變址尋址
S必須是1、2、4、8中的一個,最后一個常用在數(shù)組中
例如:地址0x100的值是56,那么操作數(shù)0x100的值就是56,屬于絕對尋址;$0x100的值0x100,是立即數(shù)尋址;