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 EAX,[ESI+4]
6基址變址尋址
mov EBX,4
mov EAX,[ESI+EBX]
7基址變址相對尋址
mov EAX,[ESI+EBX+4]
8基址變址比例相對尋址
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
是以一般用不到段超越的操作