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