2020.4.11_leal

c与汇编对照的一个例子

今天还学到了一个指令leal:
在IA32中,leal指令是mov指令的一个变形,但是,mov指令有其他大小的变种,如movl,movb,或者movswl之类,但是leal指令只有leal这一种形式。

leal是 load effective address的缩写,叫做加载有效地址指令,但是leal的基本用法主要有两种:

加载有效地址:leal的指令形式是从存储器读数据到寄存器,但是实际上根本没有引用存储器,它的第一个操作数看起来是一个存储器引用,但是该指令并不会从指定位置读入数据,而是直接将有效地址写入到目的操作数。我们可以用&s说明这种操作。                                                                 例如指令 leal (%ebx) %eax,其中假设%ebx保存的值是地址0x800036, 地址上的值是x, 那么这句指令的意思是将地址0x800036写入到寄存器%eax
进行简单的算数操作:相当于C++中的引用传参函数:例如指令 leal 7(%edx, %edx, 4) %eax,假设%edx保存的值是x,那么这句话的意思是:将%eax的值设置为5x+7
至于上面的两种解释方法,根据源寄存器中的是地址还是一个值来决定。

附加说明:

寄存器可以用来直接保存数,也可以用来保存存储器地址,从寄存器读取数据主要有两种方式:假设地址0x800036上保存的值是12,寄存器中存的值是0x800036,那么

命令 movl (%edx) %eax的意思是,读取%edx所表示的地址(0x800036)上的值12, 赋值给%eax

命令movl %edx %eax 的意思是,将%edx保存的值ox800036赋值给寄存器%eax.

出自http://zhangjiabo.cn/2016/07/16/%E6%B1%87%E7%BC%96%E6%8C%87%E4%BB%A4leal%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95%E8%AE%B2%E8%A7%A3/

在这里插入图片描述今天收工

发布了8 篇原创文章 · 获赞 0 · 访问量 89

猜你喜欢

转载自blog.csdn.net/weixin_45516802/article/details/105459021