我目前正在开发一个相当大的装配程序,它是一个喋喋不休的机器人。 它目前跨越700多行代码。在我的程序中,我有两个标签,我的程序使用这些标签来跟踪以随机方式移动的某些数据。
让我向你解释发生了什么。程序必须完成的工作很大,所以我倾向于将这些代码切成碎片。我为我的程序需要的所有函数创建单独的项目,当它们工作时我将它们包含在主程序中。
我刚刚完成了其中一个功能,并将其集成到我的程序中。这个功能介于我之前告诉你的两个标签之间。
当我尝试编译程序时,我收到一条错误消息:
ChatterBot.asm< 22>:身份不明的符号:EEEndLenght(这是第二个标签的名称)
标签在第655行还有633行,如果我再次删除该功能,错误消失,我确定在新功能中没有出现相同的标签,我已多次更改它的名称< / p>
有谁知道为什么会发生这种情况以及如何解决这个问题?
概述:
.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
编辑:现在我这样看,我想我已经发现了什么是错的,结束主要 - 这是错的。我很抱歉浪费你的时间,这确实是:最终主要搞砸了。
答案 0 :(得分:0)
如果你的代码中没有提取,那么真的很难猜到,但有一种可能性就是如果你使用.mode" statement, MASM will default to exporting only names of
proc s -- a "normal" label defined like:
mylabel:`只在里面可见那个源文件。
如果这是问题所在,您可以添加export EEEdnLength
,或者(如果内存服务)您可以将其定义为:EEEndLength::
(两个冒号而不是一个冒号)。