MOV和LEA有什么区别?

问题描述 投票:109回答:7

我想知道这些指令之间的区别是什么:

MOV AX, [TABLE-ADDR]

LEA AX, [TABLE-ADDR]
assembly x86 instruction-set
7个回答
138
投票
  • [LEA表示加载有效地址
  • [MOV表示负载值

42
投票

使用NASM语法:


24
投票

指令MOV reg,addr表示将存储在地址addr的变量读入寄存器reg。指令LEA reg,addr表示将地址(而不是存储在该地址的变量)读入寄存器reg。


10
投票

如果仅指定文字,则没有区别。但是,LEA具有更多功能,您可以在此处阅读有关它们的信息:


10
投票

取决于所使用的汇编程序,因为


2
投票

[基本上...“计算完之后移入REG ...”它似乎也可以用于其他目的:)

如果您只是忘记了该值是一个指针,您可以将其用于代码优化/最小化...什么都可以。

MOV EBX , 1
MOV ECX , 2

;//with 1 instruction you got result of 2 registers in 3rd one ...
LEA EAX , [EBX+ECX+5]

-1
投票

差异微妙但重要。 MOV指令实际上是TABLE-ADDR标签所代表的地址的“ MOVe”副本。 LEA指令是“加载有效地址”,它是一个间接指令,这意味着TABLE-ADDR指向找到要加载地址的内存位置。

有效地使用LEA等效于在诸如C之类的语言中使用指针,因此,它是功能强大的指令。

© www.soinside.com 2019 - 2024. All rights reserved.