刚开始学汇编都会接触到指令lea 和mov,但是这两个指令用法看起来很像,会经常误以为两者其实没有很大区别,甚至会误认为两者就是相等的,笔者本人也是很迷,而且书上对lea的讲解又十分有限,但是通过不懈的知识搜素,终于搞明白了这其中的差别,两者还是又很大不同的,所以mark一下防止忘了。
让我们一起看看下面的例子:

大家可以看到,第三行和第四行,看到右边的注释大家是不是有点明白了呢,lea代表的就是加载有效地址(load effective address),而(%rsi , %rdi , 4)代表的是以数值 %rsi + %rdi * 4 为内存地址,在内存里找到相对应的值,然而leaq 是取地址,所以取出来的地址正好是%rsi + %rdi * 4
即X(A) + 4(n*i) ,然后把其送给%rax。
接下来进入第四条语句,movl (%rax , %rcx ,4) %eax,代表的只是把 数值 %rax +%rcx +4作为内存地址,将内存里面的值取出来,mov给寄存器 %eax,其中内存里的值与地址%rax +%rcx +4没有直接关系。

总结一下
1. lea:加载有效地址

一般都是从内存里面取出 地址 传 递给寄存器,相当于C语言里面的取地址符号&
2…mov:
mov就是将一个值(这个值可能在内存,也可能在寄存器里面)传递给另外一个容器( 可以是寄存器,可以是内存),当然传递还有许多限制,在这就不一一赘述。

最后祝大家学习快乐,学习过程都可以收获到知识,yeah

汇编指令lea 和 mov 区别相关推荐

  1. windows debug下验证汇编指令中的mov指令传送数据

    一.知识储备 1.8086CPU是16位结构,有16根数据线,20根地址线.16根数据线可以一次性传送16位数据,也就是两个字节(也就是一个字)的数据. 什么是字? 在这个特定计算机中,字是其用来一次 ...

  2. 汇编指令学习(MOV,MOVSX,MOVZX,LEA,XCHG)

    一.MOV指令 1.将十六进制0x1234数值,赋值给eax寄存器 mov eax,0x1234 2.将十六进制0x123数值,赋值给内存地址为ebx mov dword [ebx],0x123 3. ...

  3. linux汇编 lea,汇编指令LEA

    LEA是微机8086/8088系列的一条指令,取自英语Load effect address--取有效地址,也就是取偏移地址.在微机8086/8088中有20位物理地址,由16位段基址向左偏移4位再与 ...

  4. S5PV210体系结构与接口02:ARM编程模型 汇编指令

    目录 1. ARM的基本设定 1.1 ARM数据类型 1.1.1 基本数据类型 1.1.2 浮点数据类型 1.1.3 存储器大小端 1.2 支持的指令集 2. Cortex-A8编程模型 2.1 处理 ...

  5. 【Android 逆向】x86 汇编 ( call 子函数调用指令 | jmp 跳转指令 | lea 加载指令 | mov 数据传送指令 )

    文章目录 一.call 子函数调用指令 二.jmp 跳转指令 三.lea 加载指令 四.mov 数据传送指令 总结 一.call 子函数调用指令 call 指令是 子函数调用指令 , 调用的指令的下一 ...

  6. 汇编指令push,mov,call,pop,leave,ret建立与释放栈的过程

    栈内的数据 栈在汇编层面是辅助实现函数调用的,每个函数调用过程在栈中被抽象成一帧 ,在老式的32位CPU架构IA32中还有固定寄存器指向当前帧底部(下图中的0x100000f4,0x100000d8) ...

  7. linux命令mov,汇编指令_Y-linuz-linux-w_新浪博客

    ARM处理器有37个寄存器,其中31个通用寄存器,6个程序状态寄存器. R0~R7为不分组的通用寄存器,R8~R14为分组寄存器---不同工作模式下寄存器不同 R13:指向堆栈栈顶指针SP R14:用 ...

  8. 32位汇编寄存器及汇编指令

    32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和 ...

  9. 寄存器和常用的汇编指令

    为了学习需要,最近查看了一下汇编,因为是个初学者很多东东基本不动,所以记录一下基本指令和寄存器,那样就会对汇编慢慢的适应,看得懂那些华丽花哨的反汇编代码了.学习这个东东基本是为了破解和逆向工程使用,因 ...

最新文章

  1. 如何保证消息的顺序性
  2. 学习 PHP SOAP 扩展的一些笔记
  3. Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR
  4. 计算机二级vb知识点汇总,计算机二级vb基础知识考点整理(13页)-原创力文档...
  5. 叙述无保密机制的rsa签名过程_安全系列之——RSA的公钥私钥有多少人能分的清楚?RSA的签名验签与加密解密如何使用公私钥?...
  6. cookie,session的区别和联系(补充token)
  7. [python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容
  8. JS动态添加、删除classl类
  9. 【计算机科学基础】数据运算
  10. python一个中文占几个字节_python中英文字母和中文汉字所占的字节
  11. 【18】Python半成品购物车
  12. Android--数据存储
  13. 为啥mysql的load这么快_【MySQL】浅谈MySQL的LOAD DATA
  14. LLVM PASS类pwn题入门
  15. VScode markdown自动生成目录
  16. pandas中的freq和inferred_freq等时间参数究竟有哪些
  17. 第一章:客户端网页编程简介
  18. 使用NAT打造FTP服务新法
  19. kali系统渗透window实现屏幕监控
  20. linux的几个发行网站

热门文章

  1. 7-5 查询自动售货机中商品的价格
  2. OpenCV环境配置:Ubuntu18.04编译OpenCV4.2.0和contrib模块记录
  3. RSD 教程 —— §4.2 保存框架
  4. Redhat8的yum仓库配置及DNF的解释
  5. r,w,a 与 r+, w+, a+的区别(转)
  6. echars 创建中国气泡地图和定位图表点
  7. CMD命令批量抽取指定文件夹下所有文件路径
  8. MOOC【实用Python程序设计】_026正常血压
  9. 和ASP.NET AJAX应用程序环游地球
  10. 第15周OJ实践12 字符串替换