2016-12-06 7 views
2

アセンブリに関してかなり新しいので、プログラムを使用しようとしています。だから私はコンパイルしようとするたびに、コードのコメントの下にリストされているように、私は行のエラーを取得します。アセンブリー(Intel構文+ NASM)エラー:ローカルラベル以外のラベルの前にローカルラベルを定義しようとしています

他のアセンブリコードでいくつかのことを定義しているときに、NASMがこのエラーを検出した理由を知りたいと思っていますか?

メインが定義されている方法で何かをしなければならないのでしょうか?

P.S.私はプログラムのかなり長いので、コードの最初の部分を記載しました。

は、ドットで始まるラベルはローカルラベルと呼ばれNASMに役立つ

.xlist    ;attempt to define a local label before any non-local labels 
include stdlib.a  ; parser: instruction expected 
includelib stdlib.lib ; parser: instruction expected 
.list 
.286 

dseg   segment para public 'data' 
; Unknown section attribute 'public' ignored on declaration of section `para' 
h    word ? 
i    word ? 

cseg   segment para public 'code' 
       assume cs:cseg, ds:dseg 

Main 
+0

後のエラーメッセージも便利なので、編集をロールバックしてください。これらのエラーを検索している人は、この質問を見つけることができます。 –

+0

@PeterCordesああ、申し訳ありませんが、私は彼らが役に立たないと思いました。 –

答えて

2

いただきありがとうございます。例えば、

L: 
.l2: ; it is really L.l2 

ですから、まったくNASMコードではありませんすべてのグローバルなもの

+0

これは正解であり、すべてのローカルラベルエラーを削除します。ありがとうございました。 –

+2

正解は、ソースファイルがnasm構文でないことです。マスクやタズムのように見えます。 – Jester

+0

@Jester私が言ったように、私は組み立てにはかなり新しいです。だから私はそれを調べます。あなたはそれが宗教的または宗教的な構文であると思いますか? –

2

前にローカルラベルを持つことができない、最後のグローバルラベルに追加されます。 @Jesterが言うように、おそらくTASMかMASMでしょう。

NASM doesn't ASSUMEだから、これはNASMコードではないことを100%保証することができます。


Linuxコードも間違いありません。 .286指示に注意してください。つまり、16ビットコードになります。構文をNASMに変換しても、結果として得られるバイナリはLinuxシステム上で役に立たないものはありません。

(この質問にはLinuxは記載されていませんが、the followup does

+0

これをコンパイルする代わりに、次のようにコンパイルします。nasm -f elf codeasm.asm -o codeasm.o 私は16ビットとWindowsでコンパイルする必要がありますか? –

+0

@ io16:いいえ、あなたはそれを削除し、現代的な何かを見なければなりません。 DOSシステムコールと16ビットセグメントメモリの学習は、後で行うことができるものですが、今のところ気を散らすだけです。 1つのシステムを選択して、asmを学習します。 x86-64 Linux。快適になったら、他のシステムがどのように違うかを学びましょう。 –

関連する問題