主题:命令行下tc和汇编混合的问题
命令行下tc和汇编混合的问题
这个程序如果在tc集成环境下用工程文件连接,则正常执行;如果用命令行连接,则在执行后多显示一行Null pointer assignment。
请高手指教
//-----------------------------------------------
C程序
// main.c
#include <stdio.h>
extern int num;
extern int incnum(void);
void main(void)
{
int i;
for(i=0;i<10;i++)
{
incnum();
printf("%d\n",num);
}
}
//----------------------------------------------
Assembly程序
// incnum.asm
_TEXT SEGMENT BYTE PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT WORD PUBLIC 'DATA'
_DATA ENDS
_CONST SEGMENT WORD PUBLIC 'CONST'
_CONST ENDS
_BSS SEGMENT WORD PUBLIC 'BSS'
_BSS ENDS
DGROUP GROUP _CONST,_BSS,_DATA
ASSUME CS:_TEXT,DS:DGROUP,SS:DGROUP
_DATA SEGMENT
PUBLIC _NUM
_NUM DW 0
_DATA ENDS
_TEXT SEGMENT
PUBLIC _INCNUM
_INCNUM PROC NEAR
PUSH BP
MOV BP,SP
INC _NUM
MOV SP,BP
POP BP
RET
_INCNUM ENDP
_TEXT ENDS
END
//--------------------------------------------
命令行连接
tcc -c -Ic:\turboc2\include -Lc:\turboc2\lib main.c
masm incnum.asm
tlink main.obj incnum.obj c0s.obj cs.lib
//--------------------------------------------
执行结果
1
2
3
4
5
6
7
8
9
10
Null pointer assignment ;这就是多出的一行
这个程序如果在tc集成环境下用工程文件连接,则正常执行;如果用命令行连接,则在执行后多显示一行Null pointer assignment。
请高手指教
//-----------------------------------------------
C程序
// main.c
#include <stdio.h>
extern int num;
extern int incnum(void);
void main(void)
{
int i;
for(i=0;i<10;i++)
{
incnum();
printf("%d\n",num);
}
}
//----------------------------------------------
Assembly程序
// incnum.asm
_TEXT SEGMENT BYTE PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT WORD PUBLIC 'DATA'
_DATA ENDS
_CONST SEGMENT WORD PUBLIC 'CONST'
_CONST ENDS
_BSS SEGMENT WORD PUBLIC 'BSS'
_BSS ENDS
DGROUP GROUP _CONST,_BSS,_DATA
ASSUME CS:_TEXT,DS:DGROUP,SS:DGROUP
_DATA SEGMENT
PUBLIC _NUM
_NUM DW 0
_DATA ENDS
_TEXT SEGMENT
PUBLIC _INCNUM
_INCNUM PROC NEAR
PUSH BP
MOV BP,SP
INC _NUM
MOV SP,BP
POP BP
RET
_INCNUM ENDP
_TEXT ENDS
END
//--------------------------------------------
命令行连接
tcc -c -Ic:\turboc2\include -Lc:\turboc2\lib main.c
masm incnum.asm
tlink main.obj incnum.obj c0s.obj cs.lib
//--------------------------------------------
执行结果
1
2
3
4
5
6
7
8
9
10
Null pointer assignment ;这就是多出的一行