我想知道这些指令之间的区别是什么:
MOV AX, [TABLE-ADDR]
和
LEA AX, [TABLE-ADDR]
LEA
表示加载有效地址MOV
表示负载值使用NASM语法:
指令MOV reg,addr表示将存储在地址addr的变量读入寄存器reg。指令LEA reg,addr表示将地址(而不是存储在该地址的变量)读入寄存器reg。
如果仅指定文字,则没有区别。但是,LEA具有更多功能,您可以在此处阅读有关它们的信息:
取决于所使用的汇编程序,因为
[基本上...“计算完之后移入REG ...”它似乎也可以用于其他目的:)
如果您只是忘记了该值是一个指针,您可以将其用于代码优化/最小化...什么都可以。
MOV EBX , 1
MOV ECX , 2
;//with 1 instruction you got result of 2 registers in 3rd one ...
LEA EAX , [EBX+ECX+5]
差异微妙但重要。 MOV指令实际上是TABLE-ADDR标签所代表的地址的“ MOVe”副本。 LEA指令是“加载有效地址”,它是一个间接指令,这意味着TABLE-ADDR指向找到要加载地址的内存位置。
有效地使用LEA等效于在诸如C之类的语言中使用指针,因此,它是功能强大的指令。