帮忙分析一段汇编代码

hostzhenna 2011-09-15 12:16:59
	int a;
float b;
double c;
scanf("%d, %d, %d", &a, &b, &c);
00401003 lea eax,[esp+0Ch]
00401007 push eax
00401008 lea ecx,[esp+8]
0040100C push ecx
0040100D lea edx,[esp+8]
00401011 push edx
00401012 push offset string "%d, %d, %d" (4020F4h)
00401017 call dword ptr [__imp__scanf (4020A4h)]
float d = (float)(b + a);
printf("%f", d);
0040101D fild dword ptr [esp+10h] -> st(0) = dword ptr [esp+10h]
00401021 add esp,8
00401024 fadd dword ptr [esp+0Ch] -> st(0) = st(0) + dword ptr [esp+0Ch]
00401028 fstp dword ptr [esp+10h] -> 接下来三行代码,不知道是如何把d压进去的
0040102C fld dword ptr [esp+10h]
00401030 fstp qword ptr [esp]
00401033 push offset string "%f" (402100h)
00401038 call dword ptr [__imp__printf (40209Ch)]
return 0;
0040103E xor eax,eax
请教一下, printf("%f", d);中的d是如何压栈进去的
...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
alcz2008 2011-09-15
  • 打赏
  • 举报
回复
Mark,我的汇编还没看打float,看过再来。。。
赵4老师 2011-09-15
  • 打赏
  • 举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
赵4老师 2011-09-15
  • 打赏
  • 举报
回复
参考80x87浮点汇编指令。
PG 2011-09-15
  • 打赏
  • 举报
回复
到汇编板块发~
tony2278 2011-09-15
  • 打赏
  • 举报
回复
汇编很少机会用~
bluesky12312388 2011-09-15
  • 打赏
  • 举报
回复
fstp qword ptr [esp]; //将浮点参数弹出到esp中,也即压栈

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧