我试图用asm程序编译c程序。它应该是16位,所以我使用Visual C++ 1和MASM 6.11。
asm代码:

.MODEL MEDIUM
EXTRN first:WORD, second:WORD, third:WORD
.CODE
_Add_Ext PROC FAR
    mov AX, first
    add AX, second
    mov third, AX
_Add_Ext ENDP
END

我把它编译成了.obj文件
ml.exe -c -Cx -FoC:\prjcts\2_6\2_7.obj C:\prjcts\2_6\2_7.asm

包括在项目中。
C代码:
#include <stdio.h>
int first = 1, second = 2, third = 0;
void main (void)
{
    printf("\nBefore adding third = %d", third);
    Add_Ext();
    printf("\nAfter adding third = %d", third);
}

当我试图编译它时,它给了我:
Compiling...
c:\prjcts\2_6\2_6.c
Linking...

C:\PRJCTS\2_6\2_7.OBJ(C:\prjcts\2_6\2_7.asm) : error L2029: 'first' : unresolved external
C:\PRJCTS\2_6\2_7.OBJ(C:\prjcts\2_6\2_7.asm) : error L2029: 'third' : unresolved external
C:\PRJCTS\2_6\2_7.OBJ(C:\prjcts\2_6\2_7.asm) : error L2029: 'second' : unresolved external

LINK returned error code 2.
Creating browser database...
2_6.EXE - 3 error(s), 0 warning(s)

所以它看到了我的.obj,理解了它是什么,但是不能从c代码中获取变量?我不想使用内联汇编程序,但我之前尝试过,而且成功了。

最佳答案

一个简单的猜测,它将是C名称损坏。一个C语言的外行将倾向于_

EXTRN _first:WORD, _second:WORD, _third:WORD

10-07 14:59