lea指令!「建议收藏」

lea指令!「建议收藏」
最近在看linux-0.11内核,看到lea这个指令,google搜索了一下,转给大家,一起学习@!
 
先看这个这个语法格式吧:
对AT&T来说,寻址方式比较怪异,但又非常简洁,语法格式如下:segreg:base_address(offset_address,index,size) ;例子movl%eax,label1(,$2,$4)movl%ebx,(label2,$2,)movl%ecx,(%esp)
其效果为

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

最近在看linux-0.11内核,看到lea这个指令,google搜索了一下,转给大家,一起学习@!

 

先看这个这个语法格式吧:

对AT&T来说,寻址方式比较怪异,但又非常简洁,语法格式如下:

segreg:base_address(offset_address, index, size)
 
;例子
movl %eax, label1(, $2, $4)
movl %ebx, (label2, $2,)
movl %ecx, (%esp)

Jetbrains全家桶1年46,售后保障稳定

其效果为 segreg:base_address + offset_address + index * size
segreg为分段模式下段寄存器,base_address为基址,offset_address 为偏移,index * size决定了第几个元素,其中size为元素长度,只能为1,2,4,8等等,这些元素都是可选的,index默认为0,size默认为1。

 

常见1:

http://www.adam8157.info/blog/2011/01/interesting-opcode-lea/原文:

最近恶补汇编时发现lea指令很有意思, 但大部分书都把它一笔带过, 同时网上的资料又很少, 所以记一下.

lea, load effective address, 加载有效地址. 指令形式是从存储器读数据到寄存器, 效果是将存储器的有效地址写入到目的操作数, 简单说, 就是C语言中的”&”.

例如在32位环境下, 有内存位置标签foo, 则下面两行效果相同:

movl $foo, %edi
leal foo, %edi

同时, lea还有个很有用但同时又很难理解的用法, 例如这样:

leal 5(%edx, %edx, 2), %eax

假设%edx的值为x, 上面这行会将%eax的值设置为”3x+5″.

奇怪吧, 一个取址的指令怎么用来做简单算术操作了? 其实理解起来也不难, 5(%edx, %edx, 2)是存储器”3x+5″这个地址中的值, 这个值作为leal的源操作数会被取地址, 地址是什么? 自然就是”3x+5″!

值得注意的是, 不管是AT&T还是Intel语法, lea都是加载有效地址, 所以运算结果需得在地址空间能表示的大小范围内.

PS: 可能有人会问为什么不把源操作数写成5(, %edx, 3), 这个嘛, 因为这种寻址模式的比例因子只能是1, 2, 4或者8.

 

 

常见2:

寻址方式:
0x4(%esp)的操作是把寄存器esp中的值取出,然后加上4,得到的值作为地址,间接寻址得到需要的数据
例如:
pushl -0x4(%ecx)
该指令的含义是取出寄存器ecx的值,减去4,将得到的值作为地址,在内存找到该地址对应的值,将其压入栈中。
这是执行后的结果:
ecx            0xbff01450
esp            0xbff0143c    0xbff0143c
ebp            0xbff01498    0xbff01498

(gdb) x/x $esp
0xbff0143c:    0x0804840a    
(gdb) x/x 0xbff0144c
0xbff0144c:    0x0804840a
其中,内存0xbff0144c即为%ecx-4后得到的值

指令LEA的作用和80×86汇编有些类似,即地址传递,下面举例说明:
LEA 0x4(%esp), %ecx
该指令的作用是,取出esp寄存器里的值,加上4,不再继续寻址,而是将得到值直接传递给ecx;如果是其他指令,则还需进行间接寻址,再传值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/210142.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • oracle r修改表名,oracle中修改表名「建议收藏」

    oracle r修改表名,oracle中修改表名「建议收藏」<<>>answer1:ALTERTABLEold_table_nameRENAMETOnew_table_name;(大写为系统命令)answer2:SQL>selecttnamefromtab;TNAME——————————TESTSQL>renametesttotemp;Tablere…

  • 轮询与长轮询_轮询和中断

    轮询与长轮询_轮询和中断轮询:说白了就是客户端定时去请求服务端,是客户端主动请求来促使数据更新;长轮询:说白了也是客户端请求服务端,但是服务端并不是即时返回,而是当有内容更新的时候才返回内容给客户端,从流程上讲,可以理解为服务器向客户端推送内容;从中大家可以看出区别:轮询:1:大量耗费服务器内存和宽带资源,因为不停的请求服务器,很多时候并没有新的数据更新,因此绝大部分请求都是无效请…

  • 图片标注工具LabelImg使用教程[通俗易懂]

    图片标注工具LabelImg使用教程[通俗易懂]前言我们知道,图片标注主要是用来创建自己的数据集,方便进行深度学习训练。本篇博客将推荐一款十分好用的图片标注工具LabelImg,重点介绍其安装以及使用的过程。在此感谢原作者在github所做的贡献,这款工具是全图形界面,用Python和Qt写的,最牛的是其标注信息可以直接转化成为XML文件,与PASCALVOC以及ImageNet用的XML是一样的。Ubuntu源码安装由于Ubuntu系统自带p

  • 动态规划:最长回文子串 & 最长回文子序列

    动态规划:最长回文子串 & 最长回文子序列一、题目所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如“a”、“aba”、“abba”。对于一个字符串,其子串是指连续的一段子字符串,而子序列是可以非连续的一段子字符串。最长回文子串和最长回文子序列(LongestPalindromicSubsequence)是指任意一个字符串,它说包含的长度最长的回文子串和回文子序列。例如:字符串“ABCDDCEFA…

  • 移动端开发模式

    移动端开发模式移动端开发模式现今流行的移动端开发模式共有三种:web(H5)Hybrid(混合开发)Native(原生)下面来剖析一下三种模式的优缺点:1.开发难度:无疑web和Hybrid难度要小于原生app开发,而且可以利用现有的Web开发工具和工作流程。2.移动设备本地API访问:Hybrid可以通过jsAPI访问移动设备的摄像头,GPS等。原生App可以通

  • chmod命令使用方法

    chmod命令使用方法chmod:给文件设置权限。详细用法:指令名称:chmod使用权限:所有使用者使用方式:chmod[-cfvR][–help][–version]modefile…说明:Linux/Unix的档案调用权限分为三级:档案拥有者、群组、其他。利用chmod可以藉以控制档案如何被他人所调用。参数:mode:权限设定字串,格式如下:[ugoa…][[±=][rwxX]…][,…],其中u表示该档案的拥有者,g表示与该档案的拥有者属于同一个群体(gr

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号