首先,[esi+18]这种写法,是表示对存储器寻址,是带偏移的寄存器间接寻址,用在MOV指令上,访问的是存储器,地址值是esi+18,
用在LEA指令上,那就是取存储器的地址。
mov esi, [edi+18] ;存储器地址为 edi+18 处的一个dword 的内容读出后送到esi
mov esi,dword ptr [edi+18] ;和上一条无差异,因为送入esi就隐含了dword ptr的操作
lea eax,esi ;此指令不存在
lea eax,[esi+18] ;esi+18作为地址,送入eax,效果是eax=esi+18
lea eax,esi+18 ;此指令不存在
lea eax,dword ptr [esi+18] ;此指令和lea eax,[esi+18]等同,实际上,在lea指令中,不必用dword ptr 等运算