LEA指令请教一下

cc8476 2012-03-29 11:11:17
查了很多的BAIDU,发现说的都不太一样,所以再来请教一下
我看到一条说:
lea ecx,[eax+0x30]
相当于:
mov ecx,0x30
add ecx,eax

是这样吗?是的话,那么也可以用
mov ecx,0x30+eax 不可以吗?非要用这样的形式?
非常迷惑啊
...全文
182 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小么小儿郎 2012-03-29
  • 打赏
  • 举报
回复
lea指令相比mov指令数目少,速度快,是编译器优化的结果,楼主的写法可以,但是性能和lea相比不给力的。
gsy999 2012-03-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
查了很多的BAIDU,发现说的都不太一样,所以再来请教一下
我看到一条说:
lea ecx,[eax+0x30]
相当于:
mov ecx,0x30
add ecx,eax

是这样吗?是的话,那么也可以用
mov ecx,0x30+eax 不可以吗?非要用这样的形式?
非常迷惑啊
[/Quote]
LZ,你想像的不错,LEA常被用将四则运算表达式的值赋给一个寄存器.
  • 打赏
  • 举报
回复
数据传送指令 MOV
格式: MOV OPRD1,OPRD2
功能: 本指令将一个源操作数送到目的操作数中,即OPRD1<--OPRD2.
说明:
1. OPRD1 为目的操作数,可以是寄存器、存储器、累加器.
OPRD2 为源操作数,可以是寄存器、存储器、累加器和立即数.
2. MOV 指令以分为以下四种情况:
<1> 寄存器与寄存器之间的数据传送指令
<2> 立即数到通用寄存器数据传送指令
<3> 寄存器与存储器之间的数据传送指令
<4> 立即数到存储器的数据传送
3. 本指令不影响状态标志位

有效地址传送指令 LEA
格式: LEA OPRD1,OPRD2
功能: 将源操作数给出的有效地址传送到指定的的寄存器中.

说明:
1. OPRD1 为目的操作数,可为任意一个16位的通用寄存器.
OPRD2 为源操作数,可为变量名、标号或地址表达式.
示例: LEA BX,DATA1
LEA DX,BETA[BX+SI]
LEA BX BX,[BP],[DI]
2. 本指令对标志位无影响。


用lea,一条指令就可以了
cc8476 2012-03-29
  • 打赏
  • 举报
回复
可能还理解不了性能上的优化怎么样先
反正我就先认为是mov 的优化版好了

21,499

社区成员

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

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