主题:一个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
这怎么解释?
源程序/* 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
这怎么解释?