`

lea指令——一个为了方便的多余指令

 
阅读更多

buf db 'loading ....'

lea bp,buf   

 会出现这样的错误:invalid combination of opcode and operands

 

Google一通,如下几个帖子有帮助:

1.官网的LEA解释:http://home.myfairpoint.net/fbkotler/nasmdocc.html#section-A.4.135

 简单地说,nasm中简化了很多masm中的很多指令,比如说获取有效地址:mov ax,offset buffer等价于nasm中的mov  ax,buffer,在nasm源程序中,几乎都是标号,标号就是地址;所以,在nasm中lea的正确语法为:lea ax,[buffer]

 

2. http://www.wming.com/a/articles/devlanguage/asm/2010/1229/74571.html

3.http://forum.nasm.us/index.php?topic=435.0

 

 

问题:

LEA指令不是取地址的吗?为什么最后ECX=0x30,可以用来存储立即数?

那这样为什么不直接用mov ecx,0x30呢?

这样用LEA指令有什么含义?

 

答案:

1. mov ecx,[eax+0x30]表示先运算eax+0x30得到一个结果,以这个结果为地址找一个ecx长度的内存数赋给ecx

2. lea ecx,[eax+0x30]表示先运算eax+0x30得到一个结果,把这个结果(mov时地址)赋给ecx ,效果为ecx=eax+0x30  (这里eax参与了运算却没有改变值)

如果没有LEA指令,那么:

mov ecx,0x30

add ecx,eax

从指令长度和执行速度来看.lea ecx,[eax+0x30]要好.

分享到:
评论

相关推荐

    Lea——护理机器人.pdf

    #资源达人分享计划#

    inout、jmp、lea、lods指令演示

    通过选择要播放的指令演示inout指令基本功能、段间间接转移jmp指令、有效地址传送lea指令及串读取指令

    汇编语言指令系统、伪指令

    LEA、LDS、LES 标志传送指令 LAHF、SAHF、PUSHF、POPF  查表转换指令 XLAT   算术   运算   指令 二进制加法指令 ADD、ADC 加1指令INC 二进制减法指令 SUB、SBB指令、CMP、DEC、...

    汇编指令英文全称

    MOV 指令把一个字节或字的操作数从源地址 src 传送至目的地址 dest。MOVSX 指令将带符号的数据从源地址传送至目的地址,而 MOVZX 指令将无符号的数据从源地址传送至目的地址。 PUSH 和 POP 指令用于进栈出栈操作,...

    8086 汇编指令速查手册.doc

    本文档提供了8086汇编指令的速查手册,涵盖了数据传输指令、输入输出端口传送指令、目的地址传送指令、标志传送指令和算术运算指令等多个方面。 数据传输指令: 1. MOV指令:传送字或字节。 2. MOVSX指令:先符号...

    汇编语言所有指令

    XCHG指令用于交换两个操作数的数据。XCHG指令的语法格式为:XCHG r1,r2,XCHG m,r,XCHG r,m。 PUSH和POP指令用于把操作数压入或取出堆栈。PUSH指令的语法格式为:PUSH 操作数。POP指令的语法格式为:POP 操作数。 ...

    8086寻址方式及指令系统

    24.如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一条指令的操 作码,那么该条指令的位移量是( )。 A.20H B.1EH C.0DEH D.0E0H 25.如果“JA P”指令的操作码放在0050H, 该指令的位移量为34H,...

    微机原理指令小结.pdf

    XCHG 指令用于交换两个操作数的数据,XLAT 指令用于完成一个字节的换码转换。XCHG 指令格式为 XCHG OPRD1,OPRD2,表示将 OPRD1 和 OPRD2 的数据交换。XLAT 指令格式为 XLAT,表示将 AL 的内容作为某一项到表首的...

    汇编指令速查手册-VC爱好者.doc

    这个汇编指令速查手册涵盖了数据传输指令、输入输出端口传送指令、目的地址传送指令、标志传送指令、算术运算指令、逻辑运算指令和串指令等多方面的内容,为编程人员提供了一个全面的参考手册。

    数据传送指令与算术逻辑运算和移位指令的使用

    3.目的地址传送指令: LEA,LDS,LES 4. 标志位传送指令: LAHF,SAHF,PUSHF,POPF 二 使用算术逻辑运算和移位指令,可以实现对二进制数据的加、减、乘、除等四则运算,与、或、非、异或等逻辑运算,以及移位运算和...

    80x86指令使用实验

    3.使用列子说明mov指令和lea指令的不同以及相同之处 4.将dx、ax两个寄存器组合构成32位数据(dx中是高位)实现rol和rcr移位。 5.在debug中定义内存单元如下,统计其中0的个数; 6.使用例子说明求操作数的补码和相反...

    AT&T汇编指令精简介绍

    好不容易找了一篇稍全面又简洁的指令集介绍 add,mov(bwl),test,sub,shr,cmp,lea,je,jne,ja,jb 列出来帮助搜索

    GPS.rar_GPS_GPS解析函数_lea_lea 5s

    基于LEA——5S的GPS模块的解析函数,只对其中常用的量进行提取。

    cpp-一个C版本的DougLea的优秀malloc实现

    一个C 版本的Doug Lea的优秀malloc()实现

    _3.2数据传送指令下lea-flag与算术逻辑加减乘法汇总.pptx

    _3.2数据传送指令下lea-flag与算术逻辑加减乘法汇总.pptx

    汇编语言各种指令的解释与用法

    汇编语言各种指令的解释与用法 数据传输指令: 1.传输指令 mov ,进栈指令 push 交换指令 XCHG 输入指令 in 输出指令 out 换码指令 xlat 有效地址传输指lEA 等等汇编指令介绍

    微机原理与接口技术课件:第4章_2过程定义伪指令PROC、ENDP.ppt

    一个过程可以被其它程序所调用,过程的最后一条指令一般是返回指令RET。 过程定义伪指令的格式为: 过程名 >> PROC [ 类型 ] …… RET 过程名 >> ENDP 其中,过程名是过程的名称,类型可以是NEAR或FAR,表示段...

    汇编指令(chm格式)

    XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里 ) XLAT 字节查表转换....

    x86架构汇编指令介绍

    文中介绍了汇编指令add, sub, mul, div, inc, dec, cmp, and, or, xor, not, shl, shr, rol, ror, jmp, call, ret, push, pop, mov, lea, nop, xchg, test, fld, fst, fadd, fsub, fmul, fdiv, fist, fistp, fxch, ...

    LEA-5 GPS模块

    IC part LEA-5S-0-004 Compare IC part LEA-5S-0-004 Min. Order: 1 Piece Tags: Lea-5s-0-004 | Chips Lea-5s-0-004 | Part Lea-5s-0

Global site tag (gtag.js) - Google Analytics