- ベストアンサー
アセンブリ言語で。
下のようなソースをアセンブルすると 6:error: parser: instruction expected という、エラーが出ます。 mov ah,2 mov dl,DATA int 21h mov ax,4c00h int 21h DATA byte 'A' 6行目に問題があるようなので下のように書き直したらきちんと動作しました。どうして、上のような記述ではうまくいかないのでしょうか?? mov ah,2 mov dl,'A' int 21h mov ax,4c00h int 21h 環境はwindowsXPでnasmとalinkを使っています。 nasmw test.asm -fobj alink test.obj -oEXEとしてアセンブルしました。 わかる方お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
"instruction expected"というメッセージですが、これは「この場所には命令語が来るはず」(ここには命令語を置くことが望まれる)と言う意味です。 単純分岐命令の次にデータ行を記述するのであればエラーにはなりませんが、まだ命令語による処理が続くと推定されるような記述はしないほうがいいです。 質問者さんのプログラムでは、二番目の"int 21h"で割り込むと、割り込み処理側で'A'というデータを認識して、再び割り込み位置に復帰してこないからいいのだ、という意味がくみ取れるのですが、そのような技法は使用しないほうがいいと警告されたようなものでしょう。 この件は、アセンブル段階で「プログラム暴走」がチェックアウトされたと考えればよろしいです。
その他の回答 (2)
- skam
- ベストアンサー率0% (0/1)
DATAという語は、masm系ではsection名の予約語で データ名称(変数名)には使えません。別の名称で 試してみてください。
お礼
ご回答ありがとうございました。別の言葉にかえてみたのですが、やはりできませんでした。もう少し調べてみたいと思います。
- ymmasayan
- ベストアンサー率30% (2593/8599)
このアセンブラーは知りませんが、エラーメッセージは命令語を書くべき部分に 命令語以外のものがあるという意味ですね。 実際はDATAは実行されることは無いのでしょうが 文法上はまずいと いうことのようです。 DATA行の前に何か要るのではないでしょうか。
お礼
エラーメッセージは、そういった意味だったのですかー。もう少し調べてみます。どうもありがとうございました。
お礼
詳しく説明していただきどうもありがとうございます。大変わかりやすかったです。まだまだ、アセンブリ言語は理解出来ていない所が多いので、もう一度勉強してみます。どうもありがとうございました。