LEA 与 MOV 的区分

这两个指令常被混淆, 举例说明:

MOV  DWORD PTR [EDI+EAX+28] , 0X10

MOV EAX, DWORD PTR [EDI+EAX+28] //将内存地址为EDI+EAX+28的4字节内容送到EAX中(执行后, EAX中的值是0X10)

LEA EAX, DWORD PTR [EDI+EAX+28]  //取 DWORD PTR [EDI+EAX+28] 的地址送到EAX中, 即将地址EDI+EAX+28送到EAX中(执行后, EAX中的值是EDI+EAX+28)

时间: 2024-08-10 21:19:10

LEA 与 MOV 的区分的相关文章

汇编中中括号[]作用以及lea和mov指令的区别

现在总结一下:其中牵扯到lea指令,mov指令,[] 一.lea指令:对于寄存器来说:第二个操作数是寄存器必须要加[],不然报错,这里lea就是取[寄存器]的值,如:mov eax,2lea ebx,[eax];执行后ebx=2mov ebx,eax;等同于上句lea ebx,eax;编译器报错: error A2070: invalid instruction operands 对于变量来说加不加[]都是一样的效果,都是取变量的地址,相当于指针如:num dword 2lea ebx,numl

汇编语言中LEA与MOV指令小结

 LEA指令的功能是取偏移地址,MOV指令的功能是传送数据  LEA AX,[1000H],作用是将内存单元[1000H]的偏移地址1000H送至AX: MOV AX,[1000H],作用是将内存单元[1000H]的内容1234H送给AX LEA AX,[SI],作用是将寄存器SI的内容4567H当做数据传送给AX: MOV AX,[SI],作用是将寄存器SI的内容4567H当做地址看待,将地址为4567H处的内容传送给AX: LEA AX,SI,作用是将寄存器SI的偏移地址1001H传送给AX

LEA指令与MOV指令的区别

一.汇编语言中PTR的含义及作用mov ax,bx ;是把BX寄存器"里"的值赋予AX,由于二者都是word型,所以没有必要加"WORD"mov ax,word ptr [bx];是把内存地址等于"BX寄存器的值"的地方所存放的数据,赋予ax.由于只是给出一个内存地址,不知道希望赋予ax的,是byte还是word,所以需要用word明确指出! 所以,当两个操作数的宽度不一样时,就要用到ptr.也就是说*p 用汇编表示就是:dword ptr [p

Linux C存取效率对照——堆、栈、常量区

本文主要探讨堆和栈在使用中的存取效率.利用宏汇编指令分析訪存情况来进行简单推断. 实验环境及使用工具:i686,32位Ubuntu Linux.gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3,gdb 首先,引用一道题的代码和"答案",这是"比較堆和栈存取效率"的.可是其实,他给的两种方式都用的栈,个人试出来的占用堆空间的情况,仅仅能是malloc()和new()等系统调用产生的. #include<stdio.h> ma

16位汇编中的伪指令

汇编中的伪指令(基于汇编编译器MASM讲解) 一丶什么是伪指令,以及作用 首先我们用汇编开发效率低,如何才能开发效率高,甚至开发速度比C语言或这个高级语言快 答案: 伪指令 什么是伪指令 伪指令是汇编编译器提供的,比如昨天我们写的汇编代码,假设调用一个Call我们每次都要手工处理 保存栈底,开辟就变量空间,保存寄存器环境....每次都要做,特别麻烦,所以编译器帮我们提供了伪指令,只要我们 按照汇编编译器的语法去写,那么这些汇编编译器则会自动帮我们补全 比如昨天的代码: ;调用开始,把参数压栈 m

x80386汇编

EAX寄存器:EAX称为累加器,常用于算数运算.布尔操作.逻辑操作.返回函数结果等.EBX寄存器:EBX称为基址寄存器,常用于存档内存地址.ECX寄存器:ECX称为计数寄存器,常用于存放循环语句的循环次数,字符串操作中也常用.EDX寄存器:称为数据寄存器,常常和EAX一起使用. 5.变址寄存器 变址寄存器 顾名思义,变址的含义是内存地址会变动的,也就是说变址寄存器中存放在变动的内存地址.80386架构中有两个变址寄存器,分别是ESI和EDI.ESI和EDI寄存器:ESI:ESI称为源变址寄存器,

汇编语言理解指针

有空自己也写一个学习笔记,先把参考文章记下了: http://www.cnblogs.com/aguncn/archive/2012/11/14/2769989.htmlhttp://www.cnblogs.com/aguncn/archive/2012/11/14/2769814.html http://segmentfault.com/q/1010000000627497 http://blog.csdn.net/herecles/article/details/6080226 我的理解:指

汇编Lea 指令与 Mov 指令

比如你用local在栈上定义了一个局部变量LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子:     push   ebp     mov   esp,   ebp     sub   esp,   4     现在栈上就有了4各字节的空间,这就是你的局部变量.     接下来,你执行mov   LocalVar,   4,那么实际的指令又是什么?是这样:     mov   dword   ptr   [ebp-4],   4     于是,这个局部变量的“地址”就是ebp

学 Win32 汇编[21] - 传送指令: MOV、LEA、XCHG、XLATB、XLAT、MOVZX、MOVSX

汇编指令的一般性要求: 1.两个操作数的尺寸必须一致; 2.操作数不能同为内存. MOV(Move): 最常用的数据传送指令 ;该指令不影响 EFlags ;指令格式: (其中的 r.m.i 分别表示: 寄存器.内存.立即数) MOV r/m, r/m/i ; Test21_1.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc in