鱼C论坛

 找回密码
 立即注册
查看: 3217|回复: 0

关于LEA指令的疑问....

[复制链接]
发表于 2011-7-24 23:09:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 weixianlang 于 2011-7-26 15:10 编辑
00341000 >/$ 55 PUSH EBP
00341001 |. 8BEC MOV EBP,ESP
00341003 |. 56 PUSH ESI
00341004 |. 8B35 A0203400 MOV ESI,DWORD PTR DS:[<&MSVCR100.printf>>; MSVCR100.printf
0034100A |. 57 PUSH EDI
0034100B |. 8B7D 08 MOV EDI,DWORD PTR SS:[EBP+8] ; EDI的值变为1
0034100E |. 8D47 08 LEA EAX,DWORD PTR DS:[EDI+8] ; EAX的值变为9
00341011 |. 50 PUSH EAX ; /<%d> = 9

这是OD出来的结果...
这是源代码
int nNum; int nA = 8;
nNum = argc + nA; printf("%d\r\n", nNum);
nNum = argc + 9; printf("%d\r\n", nNum);
nNum = nNum + 1; printf("%d\r\n", nNum);
问题是他在做加法优化的话..MOV EDI,DWORD PTR SS:[EBP+8]是从栈中拿出压栈的变量...LEA EAX,DWORD PTR DS:[EDI+8]             ;  EAX的值变为9.....lea不是载入有效地址么?为什么变成了9....反而成了加法的优化?希望有人解答...谢谢..........

评分

参与人数 1鱼币 -2 收起 理由
weixianlang -2 请用代码况来输入代码!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 02:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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