2010-10-31 18 views
0

Je travaille actuellement sur un assez gros programme d'assemblage, c'est un robot bavard. Il couvre actuellement plus de 700 lignes de code. Dans mon programme j'ai deux étiquettes, mon programme utilise ces étiquettes pour garder une trace de certaines données qui sont déplacées de manière aléatoire. Permettez-moi de vous expliquer ce qui s'est passé. Le travail que le programme doit faire est grand, donc ce que j'ai tendance à faire c'est de découper ces morceaux de code en morceaux. Je crée des projets séparés pour toutes les fonctions dont mon programme a besoin, et quand ils fonctionnent, je les inclue dans le programme principal.Bogue de longueur de code long dans MASM?

J'ai terminé l'une de ces fonctions et je l'ai intégrée dans mon programme. La fonction est venue entre les deux étiquettes dont je vous ai parlé auparavant.

Quand j'ai essayé de compiler le programme que je suis une erreur en disant:

ChatterBot.asm < 22>: symbole non identifiée: EEEndLenght (qui est le nom de la 2e étiquette)

L'étiquette est 633 lignes plus loin sur la ligne 655, si je supprime à nouveau la fonction, l'erreur disparaît, je suis sûr que la même étiquette n'apparaît pas dans la nouvelle fonction et j'ai changé son nom plusieurs fois

Est-ce que quelqu'un sait w Parce que cela se passe et comment je peux le réparer?

Vue d'ensemble:

.386 
.model flat,stdcall 
option casemap:none 
include \masm32\include\masm32rt.inc 
include \masm32\include\masm32.inc 
include \masm32\include\wsock32.inc 
includelib \masm32\lib\wsock32.lib 

system PROTO C, :PTR BYTE 
SavePoly PROTO 
     .code 

Start: 
... 
... 
mov ecx, (EEEdnLength - Startl) ; line 22, with the label 
... 
... 

Startl 
... 
... 
GetNumb1And8 PROTO 
Filleax PROTO 
... 
... 
FSTR PROTO 
recv PROTO 
GetData PROTO, nread:DWORD 
... 
main proc 
... 
... 
Rand proc 
... 
Rand endp 
... 
... 
main endp 
... 
... 
FSTR proc 
... 
... 
FSTR endp 
... 
... 
GetData proc nread:DWORD 
... 
... 
GetData endp 
... 
... 
end main 
... 
... 
EEEdnLength: 
... 
... 
ret 
SavePoly endp 
EndForError: 
edd: 
ret ; kthxbai 
end Start 

Edit: maintenant je regarde comme ça, je pense que je l'ai déjà trouvé ce qui ne va pas, la fin principale - qui est faux. Je suis désolé de perdre votre temps les gars, c'était en effet le: fin principal qui a foiré.

+0

'EEEndLenght' ressemble à une faute de frappe pour moi (devrait être' EEEndLength'?) –

+0

Non ce n'est pas ça, c'est en effet une faute de frappe (mais pour ça) mais les deux étiquettes ont exactement le même nom, donc ce n'est pas – Rick

Répondre

0

Il est vraiment difficile à deviner sans même un extrait de votre code, mais il est possible que si vous utilisez un .mode" statement, MASM will default to exporting only names of proc s -- a "normal" label defined like: mylabel: `est visible uniquement dans ce fichier source.

Si c'est le problème, vous pouvez ajouter export EEEdnLength, ou (si la mémoire le permet), vous pouvez le définir comme: EEEndLength:: (deux deux points au lieu d'un).

+0

Je suis désolé de ne pas inclure le code. Mais je ne fais peut-être pas ça, ça fait partie d'un projet indépendant, mais je peux vous montrer à quoi ça ressemble, (je vais éditer mon post principal avec la vue d'ensemble) – Rick