汇编指令lea 和 mov 区别

刚开始学汇编都会接触到指令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

  • 31
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值