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