つづき
セグメント情報 4 byte
セグメントとなっているが、Z8001のセグメントとは直接関係していない。
COFFやELFのセクションに当たる。セクションをセグメントに対応させれば同じことなので、
完全に別物というわけでは無いのが紛らわしいところ。
ファイル中に含まれるセグメントの数だけ、次の構造 (x_sg) が並べられ配列になっている。
x_sg_no (1 byte)
セグメント番号 0 - 127か255が入る。
Z80001のセグメントに対応していそうだが、ノンセグメンテッドのコマンドをみても、0 - 3の
値が割り当てられており、ただの通し番号かも。
255の場合は、リンカがセグメント番号を割り当てることを示す。
リンク可能なファイルには、この値が入っている。
x_sg_type (1 byte)
セグメントに含まれるデータのタイプ
1 - 初期化されないデータ (BSS)
2 - スタック
3 - 実行コード
4 - 定数
5 - 初期値を持つデータ
6 - コードとデータは混合 保護
7 - コードとデータは混合 非保護
1,2は、ファイルには含まれず、メモリー上にロードされた時点で、領域が確保される。
3は、実行コード本体。
4は、関数への引数で渡される文字列など変更されないデータ。
5は、初期値を持つグローバル変数や文字列。
6,7はROMへの書き込み用らしい。
x_sg_len (2 byte : unsigned)
セグメントのサイズ
ファイル中に含まれるセグメントの数だけ、次の構造 (x_sg) が並べられ配列になっている。
x_sg_no (1 byte)
セグメント番号 0 - 127か255が入る。
Z80001のセグメントに対応していそうだが、ノンセグメンテッドのコマンドをみても、0 - 3の
値が割り当てられており、ただの通し番号かも。
255の場合は、リンカがセグメント番号を割り当てることを示す。
リンク可能なファイルには、この値が入っている。
x_sg_type (1 byte)
セグメントに含まれるデータのタイプ
1 - 初期化されないデータ (BSS)
2 - スタック
3 - 実行コード
4 - 定数
5 - 初期値を持つデータ
6 - コードとデータは混合 保護
7 - コードとデータは混合 非保護
1,2は、ファイルには含まれず、メモリー上にロードされた時点で、領域が確保される。
3は、実行コード本体。
4は、関数への引数で渡される文字列など変更されないデータ。
5は、初期値を持つグローバル変数や文字列。
6,7はROMへの書き込み用らしい。
x_sg_len (2 byte : unsigned)
セグメントのサイズ
コード/データ
ここには、命令コード、定数、初期値を持つデータが、セグメント情報の順番にまとめられている。
各セグメントの開始位置は、ヘッダ情報から求まる。
初期化されないデータ (BSS) とスタックは、ここに含まれない。
各セグメントの開始位置は、ヘッダ情報から求まる。
初期化されないデータ (BSS) とスタックは、ここに含まれない。
0 件のコメント:
コメントを投稿