Ошибка длинного кода в MASM? - PullRequest
       5

Ошибка длинного кода в MASM?

0 голосов
/ 31 октября 2010

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

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

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

Когда я пытался скомпилировать программу, я получал сообщение об ошибке:

ChatterBot.asm <22>.: EEEndLenght (это имя второй метки)

Метка на 633 строки дальше по строке 655, если я снова удалю функцию, ошибка исчезнет, ​​я уверен, та же меткане появляется в новой функции, и я несколько раз менял ее имя

Кто-нибудь знает, почему это происходит и как я могу это исправить?

Обзор:

.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

Изменить: теперь я смотрю на это так, я думаю, что я уже нашел, что не так, конец основной - это неправильно.Прошу прощения за трату вашего времени, ребята, это было действительно: конец главного, который испортил.

1 Ответ

0 голосов
/ 31 октября 2010

Это действительно трудно угадать, даже не извлекая из своего кода, но одна возможность состоит в том, что если вы используете .mode" statement, MASM will default to exporting only names of proc s -- a "normal" label defined like: mylabel: `виден только внутри этого исходного файла.

Если это проблема, вы можете добавить export EEEdnLength, или (если память служит) вы можете определить его следующим образом: EEEndLength:: (две двоеточия вместо одной).

...