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,是立即数寻址;