0

我目前正在开发一个相当大的汇编程序,它是一个聊天机器人。它目前跨越 700 多行代码。在我的程序中,我有两个标签,我的程序使用这些标签来跟踪以随机方式移动的某些数据。

让我向你解释发生了什么。程序要做的工作很大,所以我倾向于将这些代码切成小块。我为我的程序需要的所有功能创建单独的项目,当它们工作时,我将它们包含在主程序中。

我刚刚完成了其中一个功能,并将其集成到我的程序中。该功能介于我之前告诉过您的两个标签之间。

当我尝试编译程序时,我收到一条错误消息:

ChatterBot.asm<22>:不明符号:EEEndLenght(这是第二个标签的名称)

标签在第 655 行更远的 633 行,如果我再次删除该函数,错误就会消失,我确定新函数中不会出现相同的标签,我已经多次更改它的名称

有谁知道为什么会发生这种情况以及我该如何解决?

概述:

.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

编辑:现在我是这样看的,我想我已经找到了问题所在,结束 main - 那是错误的。我很抱歉浪费你们的时间,确实是 :end main 搞砸了。

4

1 回答 1

0

如果没有从您的代码中提取,真的很难猜测,但一种可能性是,如果您使用.mode" statement, MASM will default to exporting only names ofproc , s -- a "normal" label defined like:mylabel:` 仅在该源文件中可见。

如果这是问题所在,您可以添加export EEEdnLength,或者(如果没记错的话)您可以将其定义为:(EEEndLength::两个冒号而不是一个冒号)。

于 2010-10-31T18:28:18.823 回答