0

私は現在、おしゃべりボットであるかなり大きなアセンブリプログラムに取り組んでいます。現在、700行をはるかに超えるコードにまたがっています。私のプログラムには2つのラベルがあり、プログラムはこれらのラベルを使用して、ランダムに移動する特定のデータを追跡します。

何が起こったのか説明させてください。プログラムがしなければならない仕事は大きいので、私がしがちなのは、これらのコードを細かく切り刻むことです。プログラムに必要なすべての機能に対して個別のプロジェクトを作成し、それらが機能しているときにメインプログラムに含めます。

これらの機能の1つをたった今完了し、それをプログラムに統合しました。この機能は、前に説明した2つのラベルの間にあります。

プログラムをコンパイルしようとすると、次のようなエラーが発生しました。

ChatterBot.asm <22>:未確認のシンボル:EEEndLenght(2番目のラベルの名前)

ラベルは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

編集:今私はそれをこのように見ています、私はすでに何が間違っているのかを見つけたと思います、メインを終了します-それは間違っています。時間を無駄にしてすみません、めちゃくちゃになったのは確かに:endmainでした。

4

1 に答える 1

0

コードからの抜粋がなければ推測するのは非常に困難ですが、proc mylabel:`を使用すると、そのソースファイル内にのみ表示される可能性があります.mode" statement, MASM will default to exporting only names ofs -- a "normal" label defined like:

それが問題である場合は、を追加するexport EEEdnLengthか、(メモリが機能する場合は)次のように定義できますEEEndLength::(1つではなく2つのコロン)。

于 2010-10-31T18:28:18.823 に答える