何故, LSTファイルはこんなに乱雑なのですか?

LST"ファイル(リスト・ファイル)は、Cソースコードからアセンブラー・コードを生成しその結果をファイルにしています。 それぞれのCソース行ごとにコンパイラーが生成したアセンブラー・コードが書き込まれます。但し、以下の3つの場合には注意が必要です。 これらは特別な場合で、.LSTファイルは、本来、大変使いやすく有効なファイルです。

1. プログラムの先頭近くに実行可能なソースが無いのにアセンブラ・コードが書き込まれることがあります。

コンパイラーにより作成されたコードのあるものは特定のソース行には対応しません。これは、コンパイラーにより作成されたコードのある種のものが特定のソース行に対応しないためです。コンパイラーはこのようなコードをプログラムの先頭近くに置くか、#USE行に対応するサブルーチンを置きます。

2. アドレスが範囲をオーバーした場合

コンパイラーはCソース・コードの順番で .LSTファイルを作成します。 リンカーは、関数がコードページ内又はコードページの半分に入るようにコードを再配置します。 結果としてコードはソース順とはなりません。コンパイラは .LST ファイル中に不連続があるときはファイルの中に*行を置きます。これは関数及びインライン関数がコールされる場所でしばしば見られます。インライン関数の場合、アドレスはインライン関数のソースが置かれた順序となります。

3. コンパイラが再三同じインストラクションを生成する場合。
例えば:

...........A=0;
03F: CLRF 15 *
46: CLRF 15 *
051: CLRF 15 *
113: CLRF 15

このようなコードは、関数が一つのインライン関数であるときに一つ以上の場所からコールされ るときにみられます。上記のケースでは、A=0の行は一つのインライン関数で、4つの場所からコールされています。関数がコールされるたびに、コードのコピーが作成されます。 コードの各インスタンスは元のソース行に沿って示され、結果としてアドレスまで異常に見えるかもしれないので、* が付けられます。