x86与lea指令混淆

时间:2013-11-27 01:16:43

标签: assembly x86

所以lea指令 - 加载有效地址 - 假设用于加载地址,但我对这个例子感到困惑,

lea (%edx, %ecx, 1), %eax

此指令是否用于获取地址的字节值(基数%edx和偏移量%ecx)?如果是这样,是否可以使用mov指令而不是在这种情况下使用lea

1 个答案:

答案 0 :(得分:5)

我无法说出准确的语法;我已经习惯了MASM,它会“向后”写出或多或少相同的信息。

但通常,LEA指令用于通过将基本寄存器和索引寄存器中的值与各种常量组合来计算地址。一般形式是什么

     LEA  target_register, offset[base_register*k+index_register] ; MASM syntax, read from right to left

确实是:

      target_register:=content(base_register)*k+content(index_register)+offset

其中k为0,1,2或4(如果k为零,我们不打扰写“base register * k”)。

这结合了算术和寄存器到寄存器的移动,所以如果你必须在不使用LEA的情况下实现它,是的,你可能会使用MOV指令(和SHL和ADD ......)。但LEA不会从内存中获取任何内容,并且各种形式的MOV命令都可以,因此我不认为LEA是一种MOV指令。