Assembly 在没有警告消息的情况下从另一个程序集文件调用过程
我有两个文件: m2: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
.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的一页已经粘得乱七八糟了。