dポイントプレゼントキャンペーン実施中!

下のようなソースをアセンブルすると
6:error: parser: instruction expected
という、エラーが出ます。

movah,2
movdl,DATA
int21h
movax,4c00h
int21h
DATAbyte'A'

6行目に問題があるようなので下のように書き直したらきちんと動作しました。どうして、上のような記述ではうまくいかないのでしょうか??

movah,2
movdl,'A'
int21h
movax,4c00h
int21h

環境はwindowsXPでnasmとalinkを使っています。
nasmw test.asm -fobj
alink test.obj -oEXEとしてアセンブルしました。

わかる方お願いいたします。

A 回答 (3件)

"instruction expected"というメッセージですが、これは「この場所には命令語が来るはず」(ここには命令語を置くことが望まれる)と言う意味です。


単純分岐命令の次にデータ行を記述するのであればエラーにはなりませんが、まだ命令語による処理が続くと推定されるような記述はしないほうがいいです。
質問者さんのプログラムでは、二番目の"int 21h"で割り込むと、割り込み処理側で'A'というデータを認識して、再び割り込み位置に復帰してこないからいいのだ、という意味がくみ取れるのですが、そのような技法は使用しないほうがいいと警告されたようなものでしょう。
この件は、アセンブル段階で「プログラム暴走」がチェックアウトされたと考えればよろしいです。
    • good
    • 0
この回答へのお礼

詳しく説明していただきどうもありがとうございます。大変わかりやすかったです。まだまだ、アセンブリ言語は理解出来ていない所が多いので、もう一度勉強してみます。どうもありがとうございました。

お礼日時:2005/10/18 15:43

DATAという語は、masm系ではsection名の予約語で


データ名称(変数名)には使えません。別の名称で
試してみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。別の言葉にかえてみたのですが、やはりできませんでした。もう少し調べてみたいと思います。

お礼日時:2005/10/18 15:44

このアセンブラーは知りませんが、エラーメッセージは命令語を書くべき部分に


命令語以外のものがあるという意味ですね。

実際はDATAは実行されることは無いのでしょうが
文法上はまずいと
いうことのようです。

DATA行の前に何か要るのではないでしょうか。
    • good
    • 0
この回答へのお礼

エラーメッセージは、そういった意味だったのですかー。もう少し調べてみます。どうもありがとうございました。

お礼日時:2005/10/18 15:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!