汇编 mov 与 lea 区别

mov默认对寄存器值或变量值进行操作,可以从寄存器到寄存器,从立即数到寄存器,从存储单元到寄存器,从立即数到存储单元,从寄存器到存储单元,【从寄存器或存储单元到段寄存器(除CS寄存器),立即数不能值接送段寄存器】

但是注意 
(1) MOV指令中的源操作数绝对不能是立即数和代码段CS寄存器; 
(2) MOV指令中绝对不允许在两个存储单元之间直接传送数据; 
(3) MOV指令中绝对不允许在两个段寄存器之间直接传送数据; 
(4) MOV指令不会影响标志位

对于变量,加不加[]都表示取值;

对于寄存器而言,无[]表示取值,有[]表示取地址。

lea是load effective address 的缩写,是取源操作数的偏移地址,并将其传送到目的操作数单元。类似于C语言的取地址符&。

对于变量,其后面的有无[]皆可,都表示取变量地址,相当于指针。

对于寄存器而言,无[]表示取地址,有[]表示取值。

lea常见的几种用法:

1、lea eax,[addr]

就是将表达式addr的值放入eax寄存器,示例如下:

lea eax,[401000h]; 将值401000h写入eax寄存器中

lea指令右边的操作数表示一个精指针,上述指令和mov eax,401000h是等价的

 2、lea eax,dword ptr [ebx]

将ebx的值赋值给eax

3、lea eax,c

其中c为一个int型的变量,该条语句的意思是把c的地址赋值给eax

 

例:SI=1000H, DS=1000H, (5100H)=2345H

MOV BX, [SI]; BX为2345H

LEA BX, [SI]; BX为1000H

你可能感兴趣的:(汇编)