一条指令的寻址方式决定了这个操作如何利用指令中所携带的数据

去寻找真正的操作数据。这里,按最直观的理解分做4大类。

(1)立即寻址:真正的操作数就包含在指令当中。

MOV EAX,1

这条指令的写法就是立即寻址,操作数就是1,指令的含义是把1赋给EAX。

(2)寄存器寻址:操作数据在寄存器内。

MOV EAX,EBX

这条指令的写法就是寄存器寻址,操作数放在EBX内,指令的内含义是把EBX

内的数据赋给EAX。

(3)直接寻址:操作数的地址被直接写在指令内。

MOV EAX,[0x1000]

这条指令的写法就是直接寻址,操作数放在0x1000指向的内存地址内,指令的含义

是把地址为0x1000的数据赋给EAX。

(4)间接寻址:操作数的地址需要经过某种运算才能得到,这种运算可能是从

一个寄存器读取,也可能是把某几个寄存器中的数据相加,等等。

      MOV EAX,【EBX】

     含义是把EBX里的数据作为一个地址,然后从这个地址得到

数据赋予EAX。

   MOV EAX, 【EBX+4】

   含义是把EBX里的数据作为一个地址,将这个地址加4后得到新地址,从新地址获取

数据赋给EAX。

  MOV EAX, 【EBX+EDX】

  含义把EBX里的数据与EDX的数据之和作为地址,从这个

地址获取数据赋给EAX。

  MOV EAX,【EBX+ECX*4+4】

  含义把EBX里的数据与ECX*4的数据之和作为地址,将这个地址加上4后得到新地址,从

新地址获取数据赋给EAX。

  这里ECX*4并非表示CPU在做寻址操作的时候可以同时做乘法,而只是将ECX扩大了4倍,

表示这个数组元素都是32位长整数。

写在[ ] 内的最多只能是3个部分的和,你可以理解为基址、变址和常数偏移。