LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1364|回复: 4

对leal何时加载有效地址,何时进行简单计算实在搞不清楚,大家帮帮忙!

[复制链接]
发表于 2005-5-25 13:16:38 | 显示全部楼层 |阅读模式
从书上看到,leal除了加载有效地址,有时还可以利用它进行简单计算,下面是两个例子

加载有效地址
leal -4(%ebp), %edx        load address to %edx
movl (%edx), %eax                 load value

简单计算,假设%eax存放一个变量x
leal (%eax, %eax, 4), %edx                5*x -> %edx

我不太明白的就是什么时候leal是在加载地址,什么时候是在简单计算?看不出来区别啊!
发表于 2005-5-25 17:06:22 | 显示全部楼层
lea可以进行计算的原因是CPU支持比较复杂的寻址方式。其实,所有lea都可认为是在进行简单计算,比如上面两例子。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-27 08:55:50 | 显示全部楼层

leal -4(%ebp), %edx
这条指令是把ebp-4指向的地址放到edx中,


leal (%eax, %eax, 4), %edx
是计算eax寄存器内保存的值,
二者还是有点差别啊?
回复 支持 反对

使用道具 举报

发表于 2005-5-27 15:26:10 | 显示全部楼层
第一个相当于:
edx=ebp-4
第二个相当于:
edx=eax+eax*4
都是计算啊.
回复 支持 反对

使用道具 举报

发表于 2005-5-28 10:54:22 | 显示全部楼层
lea所做的实际上就是执行计算。你把计算的结果当成地址,它就是地址。你把计算的结果作为数值,这是数值。具体要看上下文。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表