Assembly 在没有警告消息的情况下从另一个程序集文件调用过程

Assembly 在没有警告消息的情况下从另一个程序集文件调用过程,assembly,x86,tasm,Assembly,X86,Tasm,我有两个文件: m2: .model small .stack 100h .data global print ;######4###### .code main: MOV AX, @data MOV DS, AX print proc ;expects information from DX MOV AH,9 INT 21h ENDP MOV AH, 4ch INT 21h END main

我有两个文件:

m2:

.model small
.stack 100h
.data
global print ;######4######
.code
main:
    MOV AX, @data
    MOV DS, AX

        print proc ;expects information from DX
        MOV AH,9
        INT 21h
        ENDP


    MOV AH, 4ch
    INT 21h
END main
.model small
.stack 100h

.data
    str1 DB 'hello $'

.code
    EXTRN print:far

main:
    MOV AX, @data
    MOV DS, AX

    MOV DX, OFFSET str1
    CALL print

    MOV AH, 4ch
    INT 21h
END main
m1:

.model small
.stack 100h
.data
global print ;######4######
.code
main:
    MOV AX, @data
    MOV DS, AX

        print proc ;expects information from DX
        MOV AH,9
        INT 21h
        ENDP


    MOV AH, 4ch
    INT 21h
END main
.model small
.stack 100h

.data
    str1 DB 'hello $'

.code
    EXTRN print:far

main:
    MOV AX, @data
    MOV DS, AX

    MOV DX, OFFSET str1
    CALL print

    MOV AH, 4ch
    INT 21h
END main
我试图通过解释找出如何链接这两个文件,但这是针对NASM的,而我在使用TASM时遇到了一个问题。
我链接了两个文件,但在组装m2时,我收到了一个警告:

全局类型与符号:打印不匹配

我试图删除第4行,但随后我无法链接m1和m2,并收到警告:

模块M1.ASM中未定义的符号打印

我还试图从m1.asm文件中删除关键字
far
。。。也没用


我的问题是如何删除警告并能够链接两个文件?

只要给符号一个一致的输入。
最简单的方法是使用
PROC
让汇编程序选择正确的类型:

m2.asm

...
GLOBAL print: PROC
...
...
EXTRN print: PROC
...
m1.asm

...
GLOBAL print: PROC
...
...
EXTRN print: PROC
...
否则,您可以使用类型
NEAR
FAR
声明符号(使用它代替
PROC
),只需确保正确定义函数(例如
print PROC FAR


有关类型的完整列表,请参阅。

的第5章。只需给符号一个一致的类型。
最简单的方法是使用
PROC
让汇编程序选择正确的类型:

m2.asm

...
GLOBAL print: PROC
...
...
EXTRN print: PROC
...
m1.asm

...
GLOBAL print: PROC
...
...
EXTRN print: PROC
...
否则,您可以使用类型
NEAR
FAR
声明符号(使用它代替
PROC
),只需确保正确定义函数(例如
print PROC FAR


有关类型的完整列表,请参阅。

@theshopen欢迎使用。当心TOC的一页被胶粘得乱七八糟。@theshopen欢迎您。注意,TOC的一页已经粘得乱七八糟了。