回 帖 发 新 帖 刷新版面

主题:一个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
这怎么解释?   

回复列表 (共2个回复)

沙发

解释个球呀:)

板凳

编译器不一样,或者编译选项不一样,得出来的结果自然不一样了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册