1立即寻址
在指令中使用的操作数为常数
如:
mov eax,190;与mov eax,00BEH相同,低字节在前s
mov eax,0FFFFFFFFH;与 mov eax,-1相同
eax可以存放一个双字
2寄存器寻址
操作数已经在CPU的寄存器中
如:
mov EAX,EBX
3直接寻址
操作数为一个已经定义好的变量
如:
mov eax,dvar;dvar为一个双字变量
mov dvar,eax
在翻译成及其指令后,以上指令就变成了类似以下形式
mov eax,[00404011];地址外面加一个方括号,表示取这个地址的内容
4寄存器间接寻址
操作数的地址放在寄存器中
如:
mov ESI,00404011H
mov EAX,[ESI]
32位CPU中EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP能用作间接寻址
5寄存器相对寻址
如:
mov ESI,00404011H
mov EAX,[ESI+4]
6基址变址寻址
如:
mov ESI,00404011H
mov EBX,4
mov EAX,[ESI+EBX]
7基址变址相对寻址
如:
mov ESI,00404011H
mov EBX,4
mov EAX,[ESI+EBX+4]
8基址变址比例相对寻址
如:
mov ESI,00404011H
mov EBX,4
mov EAX,[ESI+EBX*2+4]
9*段超越
内存操作数的地址由两个部分指定:段和有效地址。
寻址方式中确定操作数的有效地址后,还要依靠段寄存器一起来确定操作数的内存地址
默认情况下内存操作指令在DS段中
如果使用了ESP和EBP来寻址,那么使用的是SS段寄存器
如:
mov eax,[ebp+8];内存操作数在SS段中
使用段超越前缀可以改变寻址方式中默认使用的段寄存器
如:
mov eax,cs:[ESP-4]
windows 32编程环境下CS,DS,ES,SS在内存中指向同一个段,其大小为4G
所以一般用不到段超越的操作