加载有效地址(load effective address)指令就是lea,他的指令形式就是从内存读取数据到寄存器,但是实际上他没有引用内存,而是将有效地址写入到目的的操作数,就像是C语言地址操作符&一样的功能,可以获取数据的地址。在实际使用中他有两种使用方式。

1.lea指令获取偏移地址

assume cs:code
code segment
start:
mov byte ptr ds:[98H],12h
lea bx,ds:[98H]
mov  ax,4c00h
int 21
code ends
end start

结果

lea指令获取到了数据的偏移地址

2.x86-64处理器支持多种操作数格式,利用这种功能可以简单实现普通的算术操作,下面演示一下

long exchange(long x,long y,long z)
{long t = x + 4 *y +12 *z;return 0;
}

反汇编

 long t = x + 4 *y +12 *z;
00971C28  mov         eax,dword ptr [y]
00971C2B  mov         ecx,dword ptr [x]
00971C2E  lea         edx,[ecx+eax*4]
00971C31  imul        eax,dword ptr [z],0Ch
00971C35  add         edx,eax
00971C37  mov         dword ptr [t],edx  

可以看到出现了lea         edx,[ecx+eax*4]  ,就是说把ecx+eax*4算出来直接把结果传递给edx,不用繁琐的imul与add指令配合。

汇编:lea指令学习相关推荐

  1. 汇编lea 指令的作用

    LEA指令的功能是将源操作数.即存储单元的有效地址(偏移地址)传送到目的操作数. 示例LEA BX,[BX+SI+0F54H]指令中,[BX+SI+0F54H]采用相对基址变址的寻址方式表达存储单元, ...

  2. 汇编 lea指令和mov指令

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

  3. 8086汇编LEA指令总结

    1.格式: LEA OPRD1,OPRD2  (本指令对标志位无影响) OPRD1 为目的操作数,可为任意一个16位的通用寄存器.除段寄存器外 OPRD2 为源操作数,可为变量名.标号或地址表达式.除 ...

  4. 汇编lea 指令与 mov 指令

    比如你用local在栈上定义了一个局部变量LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子:     push   ebp     mov   esp,   ebp     sub ...

  5. 汇编LAHF指令学习 - 使用emu8086

    LAHF     用于将标志寄存器的低八位送入AH,即将标志寄存器FLAGS中的SF.ZF.AF.PF.CF五个标志位分别传送到累加器AH的对应位,八位中有三位是无效的: 使用emu8086看一下: ...

  6. leaq c 汇编语言,汇编 LEA 指令

    Opencl 并行求和 上周尝试用opencl求极大值,在网上查到大多是求和,所谓的reduction算法.不过思路是一样的. CPP: ; unsigned ; ; ; int nGroup = n ...

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

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

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

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

  9. linux汇编 lea,汇编语言lea指令使用方法解析

    这篇文章主要介绍了汇编语言lea指令使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 lea指令变种(按大小分类): leaw #2个字节 ...

最新文章

  1. 某SAP项目进销存报表优化小记
  2. Linux shell编程与实践(五)之shell程序中循环结构
  3. php 关于文件的一些封装好的函数
  4. Scrollview+ListView冲突解决
  5. bus.js非父子组件之间通讯
  6. Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(六)后端改造
  7. Linux环境下增加swap交换分区
  8. python3安装json库-python库json快速入门
  9. 程序员到底是一种什么样的存在?
  10. 利用汇编与机器码定位崩溃点
  11. Unicode 属性类
  12. WCF 之 数据契约
  13. d3.js——饼状图
  14. 深度学习在音乐信息检索(MIR)方向的应用介绍(上)
  15. Java图形用户界面(容器)
  16. selenium模块
  17. The project uses Gradle 4.4 which is incompatible with Java 11 or newer.
  18. ubuntu 向日葵连接后即断开解决办法
  19. Apollo配置说明
  20. wireless communications in smart grid 2

热门文章

  1. linux切割文件一半命令,Linux系统下切割文件的split命令用法
  2. 思科网络安全 第十章测验答案
  3. matlab中文乱码问题
  4. 关于聚类问题的算法python代码实现-K-均值聚类方法
  5. 鹤岗房价为啥这么低?哪些城市也可以5万买一套房
  6. php trait instanceof,Hyperf 验证 trait
  7. 按图索骥|到底网络空间安全、网络安全、信息安全之间有啥区别?
  8. egg框架各个上下文中的this中有些啥?
  9. 如何修改服务器ttl值,TTL值怎么改(TTL值最大值和默认值是多少)
  10. 做为一个中国的ITer,你感到耻辱吗?看CSDN的“软件中国2006风云榜之10大最具创新性技术”...