何故, LSTファイルはこんなに乱雑なのですか?
LST"ファイル(リスト・ファイル)は、Cソースコードからアセンブラー・コードを生成しその結果をファイルにしています。
それぞれのCソース行ごとにコンパイラーが生成したアセンブラー・コードが書き込まれます。但し、以下の3つの場合には注意が必要です。
これらは特別な場合で、.LSTファイルは、本来、大変使いやすく有効なファイルです。
1. プログラムの先頭近くに実行可能なソースが無いのにアセンブラ・コードが書き込まれることがあります。
コンパイラーにより作成されたコードのあるものは特定のソース行には対応しません。これは、コンパイラーにより作成されたコードのある種のものが特定のソース行に対応しないためです。コンパイラーはこのようなコードをプログラムの先頭近くに置くか、#USE行に対応するサブルーチンを置きます。
2. アドレスが範囲をオーバーした場合
コンパイラーはCソース・コードの順番で .LSTファイルを作成します。
リンカーは、関数がコードページ内又はコードページの半分に入るようにコードを再配置します。
結果としてコードはソース順とはなりません。コンパイラは .LST ファイル中に不連続があるときはファイルの中に*行を置きます。これは関数及びインライン関数がコールされる場所でしばしば見られます。インライン関数の場合、アドレスはインライン関数のソースが置かれた順序となります。
3. コンパイラが再三同じインストラクションを生成する場合。
このようなコードは、関数が一つのインライン関数であるときに一つ以上の場所からコールされ
るときにみられます。上記のケースでは、A=0の行は一つのインライン関数で、4つの場所からコールされています。関数がコールされるたびに、コードのコピーが作成されます。
コードの各インスタンスは元のソース行に沿って示され、結果としてアドレスまで異常に見えるかもしれないので、* が付けられます。
例えば:
...........A=0;
03F: CLRF 15 *
46: CLRF 15 *
051: CLRF 15 *
113: CLRF 15