2009-10-12 2 views
0

У меня есть два файла, в одном я объявляю переменную SEED как таковой:Как исправить «нерешенную внешнюю» ошибку в сборке x86?

;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

SEED в файле1.asm должно быть сделано PUBLIC для просмотра другими модулями.

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

 PUBLIC SEED 

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

  • В верхней части файла, все публичные заявления, группируются вместе
  • Над каждой переменной декларации за таковые, например

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

+0

как это сделано? –

+0

#yuval: посмотрите, как это делается в исправленном ответе. Обратите внимание: в зависимости от используемого ассемблера существует несколько вариантов, но в общем случае PUBLIC является подходящим ключевым словом для этой цели. – mjv

+0

большое спасибо! –

Смежные вопросы