mov -----把数据从一个位置移动到另一个位置 mov destination,source
由方括号括起来的操作数是对内存中数据的引用, [ebx] 指向的内存地址为ebx 处的数据
mov eax , ebx+8 ---这样的指令时非法的
这点类似 C 语言中的指针, int* b ; 定义的 b 为指针,容量为4个字节,用来表示某个地址,
a=*b ; 取变量b 的地址 传给a , 等价 mov eax,[ebx]
lea ----- load effective address (加载有效地址) lea destination , source
lea指令用来将一个内存地址赋给目的操作数,
lea eax,[ebx+8]--- 将ebx+8 的值给eax. 等价于 mov eax,ebx+8
mov eax,[ebx+8] --- 加载内存中地址为ebx+8 处的数据
lea eax,ebx+8 ------ 加载内存中地址为ebx+8 处的数据
可以看到lea 指令可以操作地址也可以操作数据,而且 lea 指令只有一个 周期,因此 lea 指令可以 被一些编译器做很多优化
lea ebx,[eax*5+5] 等价于 ebx=(eax+1)*5
== 比下面的指令更快更短
inc eax;
mov cx ,5;
mul ecx;
mov ebx,eax