请问下汇编中MOV和LEA的区别是什么

linhuz 2009-09-21 06:08:14
如题 感觉MOV和LEA功能差不多,刚学汇编
...全文
11221 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangwenfeng12345 2010-04-20
  • 打赏
  • 举报
回复
很好 受教了
Lizichuan1996 2009-10-12
  • 打赏
  • 举报
回复
不错 ,受教了
Guilty 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lonelyboysvc 的回复:]
引用 9 楼 guilty 的回复:
6楼说的也不太准确,很多情况是LEA就是MOV一样,不一定和就地址有关,可以用做+计算



那在什么情况下,是用做+运算呢?
[/Quote]
比如说:LEA EAX,[EBX+ECX*2+1]
等效于:
MOV EAX, EBX
ADD EAX, ECX
ADD EAX, ECX
ADD EAX, 1
所以可以说LEA就是一种MOV,所有LEA可以用MOV+ADD取代,但反过来说就不正确,读写内存的MOV指令并不能用LEA取代
dbgchen 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 guilty 的回复:]
6楼说的也不太准确,很多情况是LEA就是MOV一样,不一定和就地址有关,可以用做+计算

[/Quote]

那在什么情况下,是用做+运算呢?
Guilty 2009-10-08
  • 打赏
  • 举报
回复
6楼说的也不太准确,很多情况是LEA就是MOV一样,不一定和就地址有关,可以用做+计算
dbgchen 2009-10-08
  • 打赏
  • 举报
回复
6楼说的正确
Guilty 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 guilty 的回复:]
本来LEA是很容易理解的,就是MOV和ADD、SHL的组合,但是成天有人问,本版可能是第800次出现这个问题了吧?
究其原因,吃屎的8086汇编语言设计者负有很大责任,LEA后面跟[]的语法太愚蠢了,造成N多误会费大家N多口水,
语法上把[]就好了,少敲键盘程序也整洁易读。
[/Quote]
语法上把[]去掉就好了,少敲键盘程序也整洁易读。
Guilty 2009-10-08
  • 打赏
  • 举报
回复
本来LEA是很容易理解的,就是MOV和ADD、SHL的组合,但是成天有人问,本版可能是第800次出现这个问题了吧?
究其原因,吃屎的8086汇编语言设计者负有很大责任,LEA后面跟[]的语法太愚蠢了,造成N多误会费大家N多口水,
语法上把[]就好了,少敲键盘程序也整洁易读。
veranh 2009-10-06
  • 打赏
  • 举报
回复
新手,来学习!
a5796489 2009-09-30
  • 打赏
  • 举报
回复 3
lea传的是地址
mov传的是值
举个例子:
mov eax,[00400000]
传的是地址400000这个地址里的值,假设400000这个地址中的值是100,那么eax寄存器中的值就为100
lea eax,[00400000]
那么eax寄存器中的值就是400000
LAISHUAN001 2009-09-27
  • 打赏
  • 举报
回复 4
lea传送的是寄存器里面的值,mov传送的是主存中以寄存器的值为地址里面的值。
例如。
leal 8(%eax),%ecx
movl 8(%eax) ,%ecx
这样,两条指令,传送的值是不一样的
leal 是传送 8+%eal(值)到 寄存器%ecx
movl 是传送的是在主存中以8+%eax为地址的存储序列里面存的值到%ecx。
anjie4402211 2009-09-22
  • 打赏
  • 举报
回复
我觉得LEA 就像C中的 取地址& ,当源操作数是在内存的时候

传参时
mov 寄存器,offset 变量名
比用LEA快

dlpzgr 2009-09-21
  • 打赏
  • 举报
回复
LEA BX,list
MOV BX,OFFSET list
等价的,但是OFFSET后面不能跟复杂的寻址方式
shenshunxiao 2009-09-21
  • 打赏
  • 举报
回复
支持
killbug2004 2009-09-21
  • 打赏
  • 举报
回复
mov是将数据从源操作传到目的操作数中
lea是将源操作数的地址传到目的操作数中
一个是数据,一个是地址

lea指令只有一个周期,某些编译器会使用lea来优化加法等操作

21,495

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧