算术的逻辑运算与指令详解

eal指令是很是神奇的一个指令,它能够取一个存储器操做数的地址,而且将其赋给目的操做数。若是用C语言当中来对应的话,它就至关于&运算。post

  好比对于leal 4(%edx,%edx,4),%eax这条指令来说,咱们假设%edx寄存器的值为x的话,那么这条指令的做用就是将 4 + x + 4x = 5x + 4赋给%eax寄存器。它和mov指令的区别就在于,假设是movl 4(%edx,%edx,4),%eax这个指令,它的做用是将内存地址为5x+4的内存区域的值赋给%eax寄存器,而leal指令只是将5x+4这个地址赋给目的操做数%eax而已,它并不对存储器进行引用的值的计算。url

  为了更好的表示这条指令的效果,LZ这里简单的画个图来表示这一过程。咱们假设下图是执行指令以前,寄存器和存储器的状态。.net

  能够看到,此时在存储器中,地址为5x+4的区域的值为1000。那么此时如果进行movl 4(%edx,%edx,4),%eax操做,很显然,%eax的值应该为1000,也就是下图。blog

  可是若是进行leal 4(%edx,%edx,4),%eax操做的话,%eax的值就不是1000了,由于leal指令不会去取存储器当中的值,所以寄存器%eax的值应该是5x+4。内存

  试想一下,假若在地址为5x+4的位置存储的是变量i,那么其实这条指令就至关于&i操做,这也就是C语言当中的&取地址操做的汇编级作法。各位猿友感受如何,是否很神奇呢。get

 

转自:博客

做者:zuoxiaolong(左潇龙)io

出处:博客园左潇龙的技术博客--http://www.cnblogs.com/zuoxiaolongclass

 

汇编算术指令集:变量

相关文章
相关标签/搜索