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語(yǔ)言新增加的long long是八字節(jié),但是硬件IA32不支持這個(gè)類型。
例如:mo
寄存器(8個(gè)32位的寄存器,均以%e開頭)
%eax、%ecx、%edx:調(diào)用者保存(數(shù)據(jù))寄存器,當(dāng)過(guò)程p調(diào)用q,q可以覆蓋這些寄存器,但是不會(huì)改變p中的數(shù)據(jù)。
%ebx、%esi、%edi:被調(diào)用者保存(數(shù)據(jù))寄存器,當(dāng)過(guò)場(chǎng)p調(diào)用q,q必須在覆蓋這些寄存器數(shù)據(jù)前,要把它們保存到棧,
并在調(diào)用結(jié)束返回時(shí)恢復(fù)它們,這些數(shù)據(jù)p或其他過(guò)程需要它們。
%esp、%ebp:有關(guān)棧指針的
操作數(shù)分三種:立即數(shù)即常數(shù),用$開頭,后面加一個(gè)整數(shù)表示;
寄存器數(shù),對(duì)字操作而言表示某個(gè)寄存器中的保存的值;對(duì)字節(jié)操作而言是8個(gè)單字節(jié)寄存器中的一個(gè),比如:%al(eax寄存器中的低8位)
存儲(chǔ)器引用,根據(jù)計(jì)算出的有效地址來(lái)訪問(wèn)存儲(chǔ)器的某個(gè)位置;包括四部分:偏移數(shù)(lmm)、基地址Eb、變址寄存器Ei、比例因子s
有關(guān)操作數(shù)格式表
類型 格式 操作數(shù)值 名稱
立即數(shù) $Imm Imm 立即數(shù)尋址
寄存器 Ea R[Ea] 寄存器尋址
存儲(chǔ)器 Imm M[Imm] 絕對(duì)尋址
存儲(chǔ)器 (Ea) M[R[Ea]] 間接尋址
存儲(chǔ)器 Imm(Eb) M[Imm+R[Eb]] (基地址+偏移量)尋址
存儲(chǔ)器 (Eb,Ei) M[R[Eb]+R[Ei]] 變址尋址
存儲(chǔ)器 Imm(Eb,Ei) M[Imm+R[Eb]+R[Ei]] 變址尋址
存儲(chǔ)器 (,Ei,s) M[R[Eb].s] 比例變址尋址
存儲(chǔ)器 Imm(,Ei,,,s) M[Imm+R[Eb].s] 比例變址尋址
存儲(chǔ)器 (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中的一個(gè),最后一個(gè)常用在數(shù)組中
例如:地址0x100的值是56,那么操作數(shù)0x100的值就是56,屬于絕對(duì)尋址;$0x100的值0x100,是立即數(shù)尋址;