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

Posted zzdbullet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算术的逻辑运算与指令详解相关的知识,希望对你有一定的参考价值。

eal指令是非常神奇的一个指令,它可以取一个存储器操作数的地址,并且将其赋给目的操作数。如果用C语言当中来对应的话,它就相当于&运算。

  比如对于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而已,它并不对存储器进行引用的值的计算。

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

技术分享图片

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

技术分享图片

  但是如果进行leal 4(%edx,%edx,4),%eax操作的话,%eax的值就不是1000了,因为leal指令不会去取存储器当中的值,因此寄存器%eax的值应该是5x+4。

技术分享图片

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

 

转自:

以上是关于算术的逻辑运算与指令详解的主要内容,如果未能解决你的问题,请参考以下文章

编程中有那些逻辑运算指令

详解图像处理的算术运算与逻辑运算

4.1 算术运算和逻辑运算

二进制算术移位和逻辑移位运算,及移位运算对数据的影响(详解及过程推导)

逻辑运算符及其优先级,C语言逻辑运算符及其优先级详解

[Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解