2016-11-16 15 views
1

たとえば、のは、次の構文を使用してアセンブリ言語のコードがあります言わせて:「LOAD」のスペルが間違っていた場合アセンブラで構文エラーが発生した場合はどうなりますか?

LOAD 14 // loads contents of memory location 14 into the accumulator 
ADD #16 // adds 16 to the contents of the accumulator 
STORE 15 // stores contents of accumulator in memory index 15 

は何?この場合、アセンブラは何をしますか? CPUの命令セットがこれに影響しますか?

+3

あなたは本質的に_「入力でエラーが検出されたときにプログラムが何をするのですか?」_と答えています:それは依存しています。 – Michael

+0

余りに広い質問があり、おそらく議論されるでしょう。現実的には、構文エラー/タイプミスの結果は、字句アナライザとパーサーの設計方法になります。 –

+0

ほとんどのアセンブラは "構文エラー"を出力し、コンパイルを中止します。アセンブルのステップはソースコードをマシンコードにコンパイルして実行するのではなく、だからあなたの質問がアイディアに沿っているなら "CPUはパニックになるのですか?"と答えるのではなく、CPUが最終的なマシンコードを実行していて、構文エラー(テキストではない)無効な命令オペコード。その後、CPUは何らかの定義された方法でパニックを起こします(通常、OSから無効なopcodeハンドラに実行を切り替えます)。 – Ped7g

答えて

2

アセンブラは面白い種類のコンパイラです。これは、サポートするCPU用に定義された言語(「アセンブリ言語」と呼ばれる)を受け取り、アセンブルされた命令のバイナリ出力を生成します。

他のコンパイラと同様に、構文エラーが発生すると、診断が生成されます。それが良い場合は、構文エラーが正確にどこにあるのかを指摘していますが、どのラインが間違っているかを単に伝えるアセンブラを見たことがあります(たとえば、「bad opcode」など)。それは、貧弱なコンパイラが行うことと同じではありません。

診断を生成した後で、(バイナリデータを生成しないなどの)デフォルトのセマンティックアクションを選択し、ソースコードの次のビットに進みます。

通常のコンパイラと同じです。

エラーが発生した場合のほとんどのコンパイラのバイナリ出力は通常役に立ちません。エラーがセマンティクスにカスケードする傾向があり、コードを生成すると不適切なコードを生成します。 (多くのコンパイラは、最初のエラーが報告されたときにコードの出力を停止するだけです)。エラーが発生した場合のアセンブラのバイナリ出力は、まだ役に立つかもしれません。通常、エラーは生成されたバイナリコードの小さな部分にのみ影響します。

関連する問題