0x00 指令概念

lea 指令(Load Effective Address)只能用于 memory addressing calculations, 不能用于 address memory 的计算。lea 接受标准的memory addressing operand,除了计算特定的寄存器(可能是任意用于一般目的的寄存器)的内存偏移,其他什么都做不了。

这个指令能干啥?两件add 指令做不到的事情:

1. 2-3个操作数的加法
2. 可以在任意寄存器存储结果,不仅仅是在源操作数上(。。这是在讽刺`add`指令吗)

同时,lea指令不会修改flags。

需要注意的是:lea 指令的第二个操作数是寄存器必须要加[],不然报错。

LEA EBX,EAX
编译器报错: error A2070: invalid instruction operands

mov 指令用于Load value。通俗的说,如果源操作数是常量,有没有[]括号都代表常量。如果源操作数是寄存器,有[]表示取地址(eax存的地址指向的值)操作,无[]表示取值操作。

0x01 应用举例

lea 计算

  • 列表内容

  • 计算(EAX + EBX + 1234567)的值,注意这里有3个操作数,是add指令无法做到的:

LEA EAX, [ EAX + EBX + 1234567 ]
  • 不覆盖目的寄存器值的情况下,计算(EBX + ECX)的结果,这也是add指令无法做到的:
LEA EAX, [ EBX + ECX ]
  • 常数乘法(倍数N为2,3,5或者9等),当然N也可以是1,2,4,8:
LEA EAX, [ EBX + N * EBX ]
  • lea 的其他用法,比如在loop循环中,

    LEA EAX, [ EAX + 1 ]

    INC EAX

    的不同之处在于inc会修改EFLAGS标志位,lea不会修改标志位。

mov 和 lea 同时使用[]操作的区别

mov 读取在内存地址(123 + 4*EBX + ESI)位置的数据:

; Reads from memory at (123 + 4*EBX + ESI)
MOV EAX, [123 + 4*EBX + ESI]

lea 计算一个表达式(123 + 4*EBX + ESI)结果:

; Computes 123 + 4*EBX + ESI and puts this value in EAXLEA EAX, [123 + 4*EBX + ESI]

0x02 小结

话说回来了,lea 指令更像是升级版的 add 指令,而跟 mov 关系不大。

0x03 参考文献

https://www.cnblogs.com/codechild/p/6638861.html
https://stackoverflow.com/questions/1658294/whats-the-purpose-of-the-lea-instruction
https://stackoverflow.com/questions/1699748/what-is-the-difference-between-mov-and-lea
https://www.quora.com/What-is-the-difference-between-LEA-and-MOV-offset-instruction-in-assembly-level-programming

mov和lea指令的区别相关推荐

  1. 计算机汇编指令mov和mova,汇编语言中mov和lea指令的区别详解

    指令(instruction)是一种语句,它在程序汇编编译时变得可执行.汇编器将指令翻译为机器语言字节,并且在运行时由 CPU 加载和执行. 一条指令有四个组成部分: 标号(可选) 指令助记符(必需) ...

  2. mov,lea指令的区别

    转载自 渣渣爱学习 最近在学习汇编语言,过程中遇到很多问题,对此在以后的随笔会逐渐更新,这次谈谈mov,lea指令的区别 一,关于有没有加上[]的问题 1,对于mov指令来说: 有没有[]对于变量是无 ...

  3. ASM mov指令与lea指令的区别

    1 mov 取源操作数的值给目标操作数 格式: mov dest, src dest = [src] 如下图: 999999换算为十六进制是0x000f423f, 在mov eax, a后, eax的 ...

  4. LEA指令与MOV指令区别

    Tips: LEA指令与MOV指令的区别: ① MOV指令是 数据        传送指令-------传送数据 LEA指令是   有效地址 传送指令-------取偏移地址 ② MOV OPRD1 ...

  5. 微机原理——指令系统——传送类指令(MOV、LEA、LDS、LES、LAHF、SAHF、XCHG、XLAT、PUSH、POP、PUSHF、POPF)

    博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问. [没事儿可以到我主页看看 ...

  6. 汇编 lea指令和mov指令

    lea指令 load effective address, 加载有效地址,可以将有效地址传送到指定的的寄存器.指令形式是从存储器读数据到寄存器, 效果是将存储器的有效地址写入到目的操作数, 简单说, ...

  7. ATT格式汇编—— mov与lea的区别

    ATT格式汇编-- mov与lea的区别 1. mov 数据传送指令,目的操作数不能是立即数,数据不能从内存直接传送到内存(若需要,转化成2条指令,从内存取数据到寄存器,从寄存器到内存) 2. lea ...

  8. mov 和 lea 的区别有哪些?

    From:https://www.zhihu.com/question/40720890?sort=created 汇编中 mov 和 lea 的区别是什么 ?:https://bbs.csdn.ne ...

  9. 数据移动指令-----mov,lea,xchg

    mov指令 数据传送指令 格式:MOV OPRD1,OPRD2 功能:将一个源操作数送到目的操作数中,即OPRD2->OPRD1 OPRD1为目的操作数,可以是寄存器,存储器,累加器 OPRD2 ...

最新文章

  1. 在Qt(C++)中使用QThread实现多线程
  2. sketchup生成面域插件_独家教程 | 快速抓取“高精准”场地信息,康石石教你生成不同“体量”地形...
  3. linq查询不包含某个值的记录_【翻译】C#表达式中的动态查询
  4. WebAppBuilder自定义主题
  5. Eclipse Error:“ An API baseline has not been set ” 解决办法
  6. 36. BOM (2)
  7. linux四种网络模式,Linux三种网络连接模式
  8. 谷歌出品!机器学习中英文术语对照表
  9. ubuntu16 安装 teamview 步骤
  10. 机器学习-分类-线性分类器
  11. 【3ds Max】 - 如何使用分布式渲染?
  12. 技校自我鉴定范文计算机600字,技校自我鉴定100字范文18篇
  13. latex插入pdf
  14. 戴戴戴师兄-数据分析课程笔记(第一讲)
  15. 动态规划(Dynamic Programing)背包——01背包
  16. ifup,ifdown命令详解
  17. 2021清远市清城中学高考成绩查询,清远市清城中学中考成绩
  18. 净化实验室设计系统原理是什么样的
  19. HTML5 + canvas 飙车游戏(附源码)
  20. 推荐几本游戏策划的书

热门文章

  1. css伪元素before和after用法详解
  2. 微信小程序-贪吃蛇开发9 滑动控制与碰撞检测
  3. mysql工具都有什么作用是什么_Navicat for MySQL是什么
  4. Macbook Pro 201 装Win10 声卡_世博会概念股联想小新Pro锐龙版的外观设计主打轻薄金属_国际股票...
  5. 凭什么他26岁就年薪30W+?
  6. 【目标检测算法】IOU、GIOU、DIOU、CIOU与YOLOv5损失函数
  7. linux下server命令,Linux基础命令
  8. 浏览器主页被篡改,注册表解决方案
  9. 泛在电力物联网建设路线
  10. 全志V3S嵌入式驱动开发(制作根文件系统)