| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 271 人关注过本帖
标题:一个c程序的两种反汇编代码不一样
只看楼主 加入收藏
tksfbz
Rank: 2
等 级:论坛游民
帖 子:6
专家分:20
注 册:2011-6-5
结帖率:0
收藏
 问题点数:0 回复次数:0 
一个c程序的两种反汇编代码不一样
★函数的参数传递和函数使用参数的方法:
源程序/* example1.c */

char ch;
int e_main()
{
e_putchar(ch);
}
反汇编1:(这是原文章中的)
xxxx:0000   CALL 0003
xxxx:0003   MOV  AX,000B
xxxx:0006   PUSH AX
xxxx:0007   CALL 0020
xxxx:000A   POP  CX
反汇编2:(这是我自己机子上的)
13AC:0000 E80000        CALL    0003
13AC:0003 A00E00        MOV     AL,[000E]
13AC:0006 98            CBW
13AC:0007 50            PUSH    AX
13AC:0008 E80000        CALL    000B
13AC:000B 59            POP     CX
13AC:000C C3            RET
13AC:000D 0E            PUSH    CS
13AC:000E 8A03          MOV     AL,[BP+DI]
-----------------------------------------------
原文章中说 000B 是全局变量ch在内存的地址,而我的AX寄存器的内容是FF8A
而且call 0020的0020是e_putchar代码的地址,而我的是call 000b,直接就往下走了13ac:000b pop cx
这怎么解释?

 
搜索更多相关主题的帖子: 文章 源程序 c程序 
2012-03-27 16:57
快速回复:一个c程序的两种反汇编代码不一样
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023322 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved