MASM中的长代码长度错误?

时间:2010-10-31 18:07:44

标签: assembly masm

我目前正在开发一个相当大的装配程序,它是一个喋喋不休的机器人。 它目前跨越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

编辑:现在我这样看,我想我已经发现了什么是错的,结束主要 - 这是错的。我很抱歉浪费你的时间,这确实是:最终主要搞砸了。

1 个答案:

答案 0 :(得分:0)

如果你的代码中没有提取,那么真的很难猜到,但有一种可能性就是如果你使用.mode" statement, MASM will default to exporting only names of proc s -- a "normal" label defined like: mylabel:`只在里面可见那个源文件。

如果这是问题所在,您可以添加export EEEdnLength,或者(如果内存服务)您可以将其定义为:EEEndLength::(两个冒号而不是一个冒号)。