2009-10-12 6 views
0

J'ai deux fichiers, dans un je déclare la variable SEED en tant que tel:Comment réparer une erreur «non résolue externe» dans l'assembly x86?

;file1.asm 

.MODEL SMALL,BASIC 
.FARDATA RAND_DATA 
SEED  DW  ? 

.CODE 
;Some code 
END 

Et dans l'autre, j'essaie de faire référence à la variable

;file2.asm 

.MODEL SMALL,BASIC 
EXTERNDEF SEED:WORD 

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

END 

Lorsque je tente de compiler les deux fichiers à l'aide le code

ml file1.asm file2.asm io.lib 

je reçois l'erreur suivante:

error L2029: 'SEED' : unresolved external 

Qu'est-ce que je fais mal?

Merci! SEED dans file1.asm DEVRAIT être PUBLIC être vu par d'autres modules.

Répondre

1

Cela se fait en ajoutant une ligne quelque part dans file1.asm avec

 PUBLIC SEED 

Notez que selon l'assembleur que vous utilisez-vous cela pourrait exiger « global » à la place.
De telles instructions d'étendue peuvent être placées n'importe où dans le fichier, mais il existe plusieurs styles/conventions en ce qui concerne l'emplacement où cela est effectué. Les deux principales sont:

  • Près du haut du dossier, toutes les déclarations publiques sont regroupées
  • Juste au-dessus de chaque déclaration de variable par-soi, par exemple

D'autres conventions sont généralement des variations sur la ci-dessus, par exemple toutes les variables de données publiques ont une portée proche du haut du fichier, mais la déclaration publique de procs est effectuée juste au-dessus de chaque fichier, le cas échéant.

+0

comment cela se fait-il? –

+0

#yuval: voir comment cela se fait dans la réponse modifiée. Notez qu'il existe quelques variantes en fonction de l'assembleur utilisé, mais en général, PUBLIC est le mot clé approprié à cette fin. – mjv

+0

merci beaucoup! –

Questions connexes