Как исправить «неразрешенную внешнюю» ошибку в сборке x86? - PullRequest
0 голосов
/ 13 октября 2009

У меня есть два файла, в одном я объявляю переменную SEED следующим образом:

;file1.asm

.MODEL  SMALL,BASIC
.FARDATA RAND_DATA
SEED       DW      ?

.CODE
;Some code
END

А в другой я пытаюсь сослаться на переменную

;file2.asm

.MODEL  SMALL,BASIC
EXTERNDEF SEED:WORD

FOO PROC  FAR PUBLIC USES DX,DS
    MOV     SEED,DX
FOO ENDP

END

Когда я пытаюсь скомпилировать оба файла, используя код

ml file1.asm file2.asm io.lib

Я получаю следующую ошибку:

error L2029: 'SEED' : unresolved external

Что я делаю не так?

Спасибо!

1 Ответ

1 голос
/ 13 октября 2009

SEED в file1.asm должен быть ПУБЛИЧНЫМ, чтобы его могли видеть другие модули.

Это делается путем добавления строки где-то в file1.asm с

       PUBLIC SEED

Обратите внимание, что в зависимости от используемого вами ассемблера, вместо этого может потребоваться " global ".
Такие операторы области видимости могут находиться в любом месте файла +/-, но есть несколько стилей / соглашений относительно места, где это делается. Два основных из них:

  • В верхней части файла все операторы PUBLIC сгруппированы вместе
  • Чуть выше каждого объявления переменной per se, например

Другие условные обозначения, как правило, являются вариациями вышеуказанного, например, все переменные общедоступных данных находятся в верхней части файла, но публичное объявление процедур выполняется чуть выше каждого файла, где это применимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...