Вызов процедур из другого файла сборки без предупреждения - PullRequest
0 голосов
/ 31 мая 2018

У меня есть 2 файла:

м2:

.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

m1:

.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 Я получил предупреждение:

глобальный тип не соответствует символу: PRINT.

Я попытался удалить строку 4, но потом не смог связать m1 , m2 и получил предупреждение:

неопределенный символ PRINT в модуле M1.ASM

Я также пыталсяудалите ключевое слово far из файла m1.asm ... тоже бесполезно.

У меня вопрос , как удалить предупреждение и иметь возможность связатьдва файла?

1 Ответ

0 голосов
/ 31 мая 2018

Просто дайте символу последовательную типизацию.
Самый простой подход - использовать PROC, чтобы ассемблер мог подобрать правильный тип:

m2.asm

...
GLOBAL print: PROC
...

m1.asm

...
EXTRN print: PROC
...

В противном случае вы можете объявить символ с типом NEAR или FAR (используйте его вместо PROC), просто обязательно правильно определите функцию (например, print PROC FAR).

Полный список типов см. В главе 5 руководства TASM .

...