天天看點

彙編語言基礎教程-尋址方式

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

是以一般用不到段超越的操作

繼續閱讀