所以lea
指令 - 加载有效地址 - 假设用于加载地址,但我对这个例子感到困惑,
lea (%edx, %ecx, 1), %eax
此指令是否用于获取地址的字节值(基数%edx
和偏移量%ecx
)?如果是这样,是否可以使用mov
指令而不是在这种情况下使用lea
?
答案 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指令。