汇编Lea 指令与 Mov 指令
来源:互联网 发布:阿里云代金券申请 编辑:程序博客网 时间:2024/04/29 19:23
比如你用local在栈上定义了一个局部变量LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子:
push ebp
mov esp, ebp
sub esp, 4
现在栈上就有了4各字节的空间,这就是你的局部变量。
接下来,你执行mov LocalVar, 4,那么实际的指令又是什么?是这样:
mov dword ptr [ebp-4], 4
于是,这个局部变量的“地址”就是ebp-4——显然,它不是一个固定的地址。现在需要将它的“地址”作为参数传给某个函数,你这样写:
invoke/call SomeFunc, addr LocalVar
实际生成的指令是:
lea eax, [ebp-4]
push eax
call SomeFunc
当然,你也可以写成:
mov eax, ebp
sub eax, 4
push eax
call SomeFunc
看到了,这里多了一条指令。这就是lea的好处。于是,lea又多了一个非常美妙的用途:作简单的算术计算,特别是有了32位指令的增强寻址方式,更是“如虎添翼”:
比如你要算EAX*4+EBX+3,结果放入EDX,怎么办?
mov edx, eax
shl edx, 2
add edx, ebx
add edx, 3
现在用lea一条指令搞定:
lea edx, [ebx+eax*4+3]
lea的英文解释是: Load Effective Address.(加入有效地址,开始迷惑效地址是什么???既然是有效地址与mov ax , [address] 又有什么不同呢?其实他们都是等效的。 后来知道实际上是一个偏移量可以是立即数,也可以是经过四则运算的结果,更省空间,更有效率)
push ebp
mov esp, ebp
sub esp, 4
现在栈上就有了4各字节的空间,这就是你的局部变量。
接下来,你执行mov LocalVar, 4,那么实际的指令又是什么?是这样:
mov dword ptr [ebp-4], 4
于是,这个局部变量的“地址”就是ebp-4——显然,它不是一个固定的地址。现在需要将它的“地址”作为参数传给某个函数,你这样写:
invoke/call SomeFunc, addr LocalVar
实际生成的指令是:
lea eax, [ebp-4]
push eax
call SomeFunc
当然,你也可以写成:
mov eax, ebp
sub eax, 4
push eax
call SomeFunc
看到了,这里多了一条指令。这就是lea的好处。于是,lea又多了一个非常美妙的用途:作简单的算术计算,特别是有了32位指令的增强寻址方式,更是“如虎添翼”:
比如你要算EAX*4+EBX+3,结果放入EDX,怎么办?
mov edx, eax
shl edx, 2
add edx, ebx
add edx, 3
现在用lea一条指令搞定:
lea edx, [ebx+eax*4+3]
lea的英文解释是: Load Effective Address.(加入有效地址,开始迷惑效地址是什么???既然是有效地址与mov ax , [address] 又有什么不同呢?其实他们都是等效的。 后来知道实际上是一个偏移量可以是立即数,也可以是经过四则运算的结果,更省空间,更有效率)
- 汇编lea 指令与 mov 指令
- 汇编Lea 指令与 Mov 指令
- 汇编Lea 指令与 Mov 指令
- 汇编Lea 指令与 Mov 指令区别
- 汇编Lea 指令与 Mov 指令
- 汇编Lea 指令与 Mov 指令
- 汇编 lea指令和mov指令
- 比较汇编指令 LEA 和 MOV
- 汇编指令1--lea和mov的区别
- mov 和 lea 指令比较
- 汇编指令lea
- 汇编指令LEA意义
- 汇编指令LEA
- 汇编指令lea
- 汇编 LEA指令
- 汇编指令---mov解析
- 汇编总结:mov指令
- 2 mov赋值指令与内联汇编
- 使用中括号 []
- 编写ActiveX控件
- wxPython:布局管理器
- 立夏.谈
- unity_TextField控件
- 汇编Lea 指令与 Mov 指令
- 获取ios 系统 硬件信息
- ARM 开发软件
- 数论中四方定理
- 【python】asq-queryable(1)
- 黑马程序员 面向对象
- Invalidate()函数
- Java_io_RandomAccessFile类
- 10 个很有用的 WordPress 聊天插件